如何通过消息ID获取用户名?JDA开发求助
如何通过消息ID获取发送者用户名(JDA)
要在JDA中通过消息ID获取发送者用户名,核心是先定位消息所属频道,拉取消息对象后再提取发送者信息,以下是具体实现步骤和代码示例:
核心逻辑
- 获取消息对应的频道对象(公聊频道用
TextChannel,私信频道用PrivateChannel) - 调用频道的
retrieveMessageById方法异步拉取消息 - 在回调中从消息实例中获取发送者
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
相关产品推荐
相关产品推荐

