Discord JDA Java如何获取机器人消息ID并编辑已发送消息
错误原因
- 你调用
event.getMessage()获取到的是用户发送的触发命令的!dim消息,本身就不是机器人发送的消息,拿到的ID自然属于用户,编辑时就会触发权限报错 channel.sendMessage("TEST!").queue()是异步执行逻辑,调用queue()后请求会在后台线程执行,你后续同步执行的代码无法直接拿到还没发送完成的机器人消息对象
修正后代码
if (content.equals("!dim")){ // 在queue方法中传入成功回调,回调参数即为机器人发送成功的消息实例 channel.sendMessage("TEST!").queue(botMessage -> { long messageID = botMessage.getIdLong(); System.out.println(messageID); // 直接用消息实例调用编辑方法即可,不需要手动传ID botMessage.editMessage("text").queue(); // 你原来的写法 channel.editMessageById(messageID, "text").queue() 也可以正常运行 }); }
逻辑说明
- JDA中所有网络请求相关的RestAction实例,调用
queue()时都支持传入成功、失败回调,发送消息的成功回调会返回机器人刚发送完成的消息对象,直接从该对象就能拿到正确的消息ID,也可以直接调用对象的编辑、删除等方法 - 不要在
queue()调用之后同步执行获取消息、编辑消息的逻辑,异步请求还未完成时无法拿到对应的机器人消息对象
内容的提问来源于stack exchange,提问作者Detrua
相关产品推荐
相关产品推荐

