如何获取 Bot 消息 ID 并编辑消息 - Discord JDA Java
Posted
技术标签:
【中文标题】如何获取 Bot 消息 ID 并编辑消息 - Discord JDA Java【英文标题】:How can i get the Bot Message ID and edit the Message - Discord JDA Java 【发布时间】:2022-01-05 22:14:36 【问题描述】:对于我的学校项目,我正在学习如何设置机器人。我想出了如何获取消息 ID 的消息。但是 ID 不是来自 Bot,他从编写命令的 Author 那里获取 ID。 :
if (content.equals("!dim"))
channel.sendMessage("TEST!").queue();
Message bot = event.getMessage();
long messageID = bot.getIdLong();
String s = String.valueOf(messageID);
System.out.print(s);
channel.editMessageById(messageID, "text").queue();
控制台错误:
914706361378557982[ForkJoinPool.commonPool-worker-19] ERROR RestAction - RestAction queue returned failure: [ErrorResponseException] 50005: Cannot edit a message authored by another user
net.dv8tion.jda.api.exceptions.ContextException
at net.dv8tion.jda.api.exceptions.ContextException.here(ContextException.java:54)
at net.dv8tion.jda.api.requests.Request.<init>(Request.java:71)
at net.dv8tion.jda.internal.requests.RestActionImpl.queue(RestActionImpl.java:197)
at net.dv8tion.jda.api.requests.RestAction.queue(RestAction.java:573)
at net.dv8tion.jda.api.requests.RestAction.queue(RestAction.java:539)
at MessageListener.onMessageReceived(MessageListener.java:68)
at net.dv8tion.jda.api.hooks.ListenerAdapter.onEvent(ListenerAdapter.java:483)
at net.dv8tion.jda.api.hooks.InterfacedEventManager.handle(InterfacedEventManager.java:96)
at net.dv8tion.jda.internal.hooks.EventManagerProxy.handleInternally(EventManagerProxy.java:88)
at net.dv8tion.jda.internal.hooks.EventManagerProxy.handle(EventManagerProxy.java:70)
at net.dv8tion.jda.internal.JDAImpl.handleEvent(JDAImpl.java:160)
at net.dv8tion.jda.internal.handle.MessageCreateHandler.handleInternally(MessageCreateHandler.java:123)
at net.dv8tion.jda.internal.handle.SocketHandler.handle(SocketHandler.java:36)
at net.dv8tion.jda.internal.requests.WebSocketClient.onDispatch(WebSocketClient.java:952)
at net.dv8tion.jda.internal.requests.WebSocketClient.onEvent(WebSocketClient.java:839)
at net.dv8tion.jda.internal.requests.WebSocketClient.handleEvent(WebSocketClient.java:817)
at net.dv8tion.jda.internal.requests.WebSocketClient.onBinaryMessage(WebSocketClient.java:991)
at com.neovisionaries.ws.client.ListenerManager.callOnBinaryMessage(ListenerManager.java:385)
at com.neovisionaries.ws.client.ReadingThread.callOnBinaryMessage(ReadingThread.java:276)
at com.neovisionaries.ws.client.ReadingThread.handleBinaryFrame(ReadingThread.java:996)
at com.neovisionaries.ws.client.ReadingThread.handleFrame(ReadingThread.java:755)
at com.neovisionaries.ws.client.ReadingThread.main(ReadingThread.java:108)
at com.neovisionaries.ws.client.ReadingThread.runMain(ReadingThread.java:64)
at com.neovisionaries.ws.client.WebSocketThread.run(WebSocketThread.java:45)
我可以从错误中看出我的 MessageId 不是来自 Bot。无论如何可以从 Bot 的 MessageBot 获取它。 如果您需要更多信息,我会尽快更新此帖子。
【问题讨论】:
你试过了,效果很好?我有个主意。阅读 Discord API 的文档。 不,我没用。我编辑了这篇文章,并更新了更多信息。我尝试自己先与文档一起做,但我无法得到它。我是编码新手,并试图改进我的编码。抱歉,您必须阅读这篇可悲的帖子。 @大卫康拉德。 【参考方案1】:我不确定您的问题是什么...您调用的方法将为给定的ID
编辑消息(您可以通过getMessageIdLong()
在任何消息事件中获取该 ID,请注意不要与getMessageId()
混淆,因为它返回String
和editMessage()
需要long
)。或者,您可以调用Message.editMessage(String newText).queue()
(直接从您的Message
对象)执行编辑。为了检索上述对象,请在任何Message
事件中使用getMessage()
。如果您对此事仍有任何疑问,请查看the documentation。
【讨论】:
我觉得自己很笨。我现在更新了帖子。是的,我尝试将字符串放入所需的 Long。谢谢你的好意,并试图帮助我! 现在!我明白这个问题! Messagelistener 并没有像我想要的那样做。当机器人发送一条新消息并且我尝试立即更改它时,我将获得人类而不是机器人的消息ID。解决方案:if(event.getAuthor().isBot()) 在正确的位置以上是关于如何获取 Bot 消息 ID 并编辑消息 - Discord JDA Java的主要内容,如果未能解决你的问题,请参考以下文章
添加到其他人服务器的 Discord Bot 如何获取他们希望它发送消息的通道 ID?
PHP telegram bot:错误的请求:找不到编辑消息
如何使用 MS bot 框架从 Teams 私人消息中获取用户上下文