【问题标题】:JDA bot is not listening to messagesJDA bot 未收听消息
【发布时间】: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”附近。我尝试了很多方法,例如重新排列我的代码或重写它,但似乎没有任何效果。

【问题讨论】:

    标签: java discord discord-jda


    【解决方案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
        }
    }
    

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

    【讨论】:

      猜你喜欢
      • 2023-01-12
      • 2021-07-06
      • 2020-11-23
      • 2022-08-11
      • 2020-05-11
      • 2022-01-05
      • 2021-06-12
      • 2021-09-10
      相关资源
      最近更新 更多