Discord Java机器人无法响应消息问题排查求助
解决Discord JDA机器人不响应消息的问题
我看了你的代码,发现几个关键问题导致机器人没反应,咱们一步步修复:
1. 事件处理方法名拼写错误
你写的方法名是onGuildMessageRecived,但JDA要求的正确方法名是onGuildMessageReceived(注意末尾多了一个字母e)。JDA是通过方法签名来识别事件处理器的,拼写错了框架就找不到这个方法,自然不会触发命令响应。
2. 监听器类未正确实现事件接口
你的Commands类需要实现EventListener接口,最简便的方式是继承ListenerAdapter(它已经帮你实现了接口,还提供了所有事件方法的空实现),这样JDA才能把它当作有效的事件监听器。
3. 缺失必要的网关意图(JDA v4+)
从JDA版本4开始,默认不允许读取消息内容,你需要在代码里开启MESSAGE_CONTENT意图,同时还要去Discord开发者后台的机器人页面手动开启这个权限,否则机器人根本接收不到消息内容。
修正后的完整代码
监听器类(Commands.java)
import net.dv8tion.jda.api.events.guild.message.GuildMessageReceivedEvent; import net.dv8tion.jda.api.hooks.ListenerAdapter; public class Commands extends ListenerAdapter { @Override public void onGuildMessageReceived(GuildMessageReceivedEvent event) { // 忽略机器人自身的消息,避免循环触发 if (event.getAuthor().isBot()) { return; } String[] args = event.getMessage().getContentRaw().split(" "); if (args[0].equalsIgnoreCase(Main.prefix + "info")) { event.getChannel().sendTyping().queue(); event.getChannel().sendMessage("Started on 09.01.2021").queue(); } } }
主类初始化代码
import net.dv8tion.jda.api.JDABuilder; import net.dv8tion.jda.api.entities.Activity; import net.dv8tion.jda.api.entities.OnlineStatus; import net.dv8tion.jda.api.requests.GatewayIntent; import net.dv8tion.jda.api.exceptions.LoginException; public class Main { public static JDA jda; public static String prefix = "+"; public static void main(String[] args) throws LoginException { jda = JDABuilder.createDefault(REDACTED) // 开启消息内容意图,必须配置 .enableIntents(GatewayIntent.MESSAGE_CONTENT) .build(); jda.getPresence().setStatus(OnlineStatus.DO_NOT_DISTURB); jda.getPresence().setActivity(Activity.watching("Im watching you")); jda.addEventListener(new Commands()); } }
最后别忘了去Discord开发者后台,找到你的机器人,在「Privileged Gateway Intents」里把「Message Content Intent」开关打开,不然代码里开了意图也没用。
内容的提问来源于stack exchange,提问作者renenikolas
相关产品推荐
相关产品推荐

