使用JDA开发Discord机器人时getContentDisplay()返回空字符串问题
问题描述
我正在学习JDA框架开发Discord机器人,想实现控制台打印测试服务器中发送的消息的功能,但运行代码后,发送任意消息控制台都没有输出。尝试调用e.getMessage().getContentRaw()也得到空字符串,请问我的代码哪里有问题?
主类代码
package net.lib.first; import net.dv8tion.jda.api.JDABuilder; import net.dv8tion.jda.api.entities.Activity; import net.dv8tion.jda.api.entities.Message; import net.lib.first.event.Listener; import javax.security.auth.login.LoginException; public class Main { public static void main(String[] args) throws LoginException { String token = (my bot token); JDABuilder builder = JDABuilder.createDefault(token); builder.addEventListeners(new Listener()); builder.setActivity(Activity.playing("Type !ping")); builder.build(); Message.suppressContentIntentWarning(); } }
监听器类代码
package net.lib.first.event; import net.dv8tion.jda.api.events.message.MessageReceivedEvent; import net.dv8tion.jda.api.hooks.ListenerAdapter; import org.jetbrains.annotations.NotNull; public class Listener extends ListenerAdapter { @Override public void onMessageReceived(@NotNull MessageReceivedEvent e) { System.out.println(e.getMessage().getContentDisplay()); } }
问题原因与解决方法
核心问题是未启用消息内容意图(Message Content Intent),这是Discord针对机器人权限的新限制,不开启的话JDA无法获取消息内容,自然输出空字符串或无有效内容。
修正步骤:
在Discord开发者平台开启意图
- 登录Discord开发者门户,进入你的机器人应用页面
- 切换到「Bot」标签页,找到「Privileged Gateway Intents」区域
- 勾选「Message Content Intent」并保存设置
在代码中启用该意图
当前调用Message.suppressContentIntentWarning()只是隐藏警告,并未实际启用意图。需要在构建JDA实例时明确添加:
修改Main类代码,创建JDABuilder后加入:builder.enableIntents(GatewayIntent.MESSAGE_CONTENT);同时导入对应类:
import net.dv8tion.jda.api.requests.GatewayIntent;
另外,Message.suppressContentIntentWarning()建议放在builder.build()之前调用,但最关键的还是完成上述两步意图启用操作。
内容的提问来源于stack exchange,提问作者Libration
相关产品推荐
相关产品推荐

