JDA bot 未收听消息

Posted

技术标签:

【中文标题】JDA bot 未收听消息【英文标题】:JDA bot is not listening to messages 【发布时间】:2020-12-26 19:56:29 【问题描述】:

我正在尝试制作一个非常简单的 discord 机器人,这是我第一次在 java 中制作一个(使用 IntelliJ IDE)。它登录并正确上线,但不会收到我在公会中发送的任何消息。代码如下:

import net.dv8tion.jda.api.AccountType;
import net.dv8tion.jda.api.JDABuilder;
import net.dv8tion.jda.api.events.message.MessageReceivedEvent;
import net.dv8tion.jda.api.hooks.ListenerAdapter;
import org.jetbrains.annotations.NotNull;

public class Main extends ListenerAdapter 
    public static void main(String[] args) throws Exception
        JDABuilder bot = new JDABuilder(AccountType.BOT);
        String token = "token";
        bot.setToken(token);
        bot.build();
    

    @Override
    public void onMessageReceived(@NotNull MessageReceivedEvent event) 
        System.out.println("message received");
        event.getChannel().sendMessage("reeeeeeee");
        super.onMessageReceived(event);
    

我认为有缺陷的部分在“public void onMessageReceived”附近。我尝试了很多方法,例如重新排列我的代码或重写它,但似乎没有任何效果。

【问题讨论】:

【参考方案1】:

您没有在sendMessage 返回的MessageAction 上调用queue()

使用 X 时没有任何反应

在 JDA 中,我们通过使用通用的 RestAction 类来使用异步速率限制处理。 当您有诸如 channel.sendMessage("hello"); 之类的代码时或 message.delete();实际上什么也没发生。这是因为 sendMessage(...) 和 delete() 都返回一个 RestAction 实例。您还没有在这里完成,因为该类只是执行您的请求的中间步骤。在这里您可以决定使用 async queue()(推荐)或 submit() 或阻塞 complete()(不推荐)。

您可能会注意到 queue() 返回 void。这是因为它是异步的,而是使用回调。 Read More

来自 JDA Troubleshooting Wiki

您也从未注册过您的事件监听器。而且您正在使用已弃用的 JDABuilder 构造函数。

public class Main extends ListenerAdapter 
    public static void main(String[] args) throws Exception
        JDABuilder.createDefault(token) // don't use the deprecated constructor
                  .addEventListeners(new Main()) // register your listener
                  .build();
    

    @Override
    public void onMessageReceived(@NotNull MessageReceivedEvent event) 
        System.out.println("message received");
        event.getChannel().sendMessage("reeeeeeee").queue(); // call queue
    

而且你应该永远不要在任何地方泄露你的机器人令牌

【讨论】:

以上是关于JDA bot 未收听消息的主要内容,如果未能解决你的问题,请参考以下文章

Discord bot 无法使用 JDA 在 java 中发送消息

Discord Bot 不会删除消息(带有 JDA API 的 Eclipse IDE Java)

如何修复此 JDA discord bot 错误?

JDA - 发送消息

如何添加对嵌入消息 JDA 的反应

如何修复不和谐的 jda bot 垃圾邮件