我正在尝试制作一个非常简单的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”周围。我已经尝试了很多事情,例如重新排列代码或重写代码,但是似乎没有任何效果。
答案 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
}
}
并且您应该永远不要在任何地方泄漏您的机器人令牌!