You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过消息ID获取用户名?JDA开发求助

如何通过消息ID获取发送者用户名(JDA)

要在JDA中通过消息ID获取发送者用户名,核心是先定位消息所属频道,拉取消息对象后再提取发送者信息,以下是具体实现步骤和代码示例:

核心逻辑

  1. 获取消息对应的频道对象(公聊频道用TextChannel,私信频道用PrivateChannel)
  2. 调用频道的retrieveMessageById方法异步拉取消息
  3. 在回调中从消息实例中获取发送者User对象,进而获取用户名

代码示例

// 替换为你的实际消息ID和频道ID
String targetMessageId = "123456789012345678";
TextChannel channel = jda.getTextChannelById("987654321098765432");

if (channel != null) {
    // 异步处理消息拉取结果
    channel.retrieveMessageById(targetMessageId)
           .queue(
               // 成功获取消息时的回调
               message -> {
                   User author = message.getAuthor();
                   // 获取纯用户名
                   String username = author.getName();
                   // 获取带标签的完整用户名(如User#1234)
                   String fullTag = author.getAsTag();
                   System.out.println("发送者用户名:" + username);
                   System.out.println("完整用户名:" + fullTag);
               },
               // 处理拉取失败的情况(如消息不存在、权限不足)
               error -> System.err.println("获取消息失败:" + error.getMessage())
           );
} else {
    System.err.println("无法找到指定频道");
}

关键注意点

  • 必须确保Bot拥有读取消息历史的权限,否则会触发权限异常
  • retrieveMessageById是异步方法,避免用complete()阻塞主线程,优先使用queue()处理回调
  • 如果消息来自私信,需替换为PrivateChannel,获取方式:jda.getPrivateChannelById("私信频道ID")
  • Discord API不支持通过消息ID全局搜索,必须明确消息所属频道才能拉取

内容的提问来源于stack exchange,提问作者Testerr0349349

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 13:52:35