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 中发送消息