Discord机器人JDA接收消息后分割得到的数组为空求助
问题排查与解决
核心原因:缺少MESSAGE_CONTENT网关意图
Discord内容权限更新后,所有需要读取消息文本的机器人必须同时满足两个条件:
- 在Discord开发者门户开启「Message Content Intent」权限
- 在JDA代码中添加
GatewayIntent.MESSAGE_CONTENT到意图集合
你的代码里仅声明了GUILD_MESSAGES,未添加MESSAGE_CONTENT,导致JDA无法获取消息文本,getContentRaw()返回空字符串,调用split("")后得到空数组。
修复步骤
- 更新代码中的意图集合
修改MainBot类里的intents定义,加入MESSAGE_CONTENT:
EnumSet<GatewayIntent> intents = EnumSet.of( GatewayIntent.GUILD_MEMBERS, GatewayIntent.GUILD_EMOJIS, GatewayIntent.GUILD_VOICE_STATES, GatewayIntent.GUILD_MESSAGES, GatewayIntent.MESSAGE_CONTENT // 新增该意图 );
- 在Discord开发者后台开启对应权限
登录Discord开发者门户进入你的机器人应用:
- 切换到「Bot」标签页
- 在「Privileged Gateway Intents」区域,找到「Message Content Intent」并开启
- 保存更改后重启机器人
额外排查点
- 确认发送的消息包含文本内容,而非仅图片/附件
- 若使用JDA 4及更早版本,需确保机器人账号未被Discord限制内容读取权限
- 检查是否有其他代码逻辑(如消息过滤)提前修改了消息内容,从你给出的代码看不存在此问题
内容的提问来源于stack exchange,提问作者ykd
相关产品推荐
相关产品推荐

