JDA机器人添加消息反应失败求助(错误10008)
问题分析与解决
你遇到的Unknown Message错误(错误码10008)是因为代码逻辑搞错了操作对象,同时没有正确处理JDA的异步执行特性:
错误原因
- 你调用
event.getMessage().addReaction()是在用户发送的命令消息上添加反应,这完全不是你要操作的机器人投票消息,偏离了需求。 - 退一步说,即便你想操作用户消息,
event.reply()是异步执行的,后续的addReaction可能在Discord消息状态同步完成前就触发,导致系统找不到目标消息。
修复后的代码
正确的做法是在event.reply()的回调中获取机器人发送的投票消息,再给它添加反应:
@Override protected void execute(CommandEvent event) { if (this.check(event)) { return; } var args = event.getArgs().trim(); if (args.isEmpty()) { this.incorrectUsage(event); return; } var announcementFormat = this.getConfig().getMessages().get("pool-format") .replaceAll("%message", args); // 发送投票消息,并在回调中处理反应添加 event.reply(announcementFormat) .queue(sentPollMessage -> { // 给机器人发送的投票消息添加需要的反应 sentPollMessage.addReaction("👍").queue(); sentPollMessage.addReaction("👎").queue(); // 可以继续添加其他表情,比如 "🤷" }, throwable -> { // 处理投票消息发送失败的情况 event.getChannel().sendMessage("抱歉,发送投票消息失败了!").queue(); }); }
额外优化建议
- 如果要添加多个反应,推荐使用
addReactions()方法一次性处理,减少API请求次数:sentPollMessage.addReactions( Emoji.fromUnicode("👍"), Emoji.fromUnicode("👎"), Emoji.fromUnicode("🤷") ).queue(); - 确保机器人在目标频道拥有添加反应的权限,否则会抛出权限相关的错误。
内容的提问来源于stack exchange,提问作者user13506987
相关产品推荐
相关产品推荐

