JDA机器人未收听消息

时间:2020-09-08 12:17:42

标签: java discord discord-jda

我正在尝试制作一个非常简单的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 个答案:

答案 0 :(得分:1)

您没有在queue()返回的MessageAction上呼叫sendMessage

使用X时没有任何反应

在JDA中,我们通过使用常见的RestAction类来使用异步速率限制处理。 当您具有诸如channel.sendMessage(“ hello”);之类的代码时或message.delete();实际上没有任何反应。这是因为sendMessage(...)和delete()都返回RestAction实例。由于该类只是执行请求的中间步骤,因此您在这里没有完成。在这里,您可以决定使用异步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
    }
}

并且您应该永远不要在任何地方泄漏您的机器人令牌