为什么discord.js机器人复用旧代码后报CLIENT_MISSING_INTENTS错误?
问题成因
该错误和const Discord = require('discord.js')的导入逻辑无关,完全由discord.js的版本差异导致:
- 可正常运行的旧项目使用的是discord.js v12及更早版本,对应版本适配的Discord API未强制要求声明网关意图,初始化客户端无需传递额外参数
- 新建项目安装的是discord.js v13及以上的正式版本,该版本段适配的Discord API要求开发者必须明确指定机器人需要接收的事件类型(即网关意图),未声明就初始化客户端会直接抛出
CLIENT_MISSING_INTENTS错误
解决方法
1. 修改代码初始化配置
调整new Discord.Client()的代码,传入当前功能需要的意图参数。以你当前用到的消息监听、命令响应功能为例,需要配置服务器、服务器消息、消息内容三个核心意图,当前主流稳定版discord.js v14的修改示例如下:
const client = new Discord.Client({ intents: [ Discord.GatewayIntentBits.Guilds, Discord.GatewayIntentBits.GuildMessages, Discord.GatewayIntentBits.MessageContent ] });
另外注意discord.js v13及以上版本已经废弃了message事件,需要把监听代码从client.on("message", async (message) => {修改为client.on("messageCreate", async (message) => {,否则命令不会被触发。
2. 开启开发者后台特权意图
MessageContent属于Discord规定的特权网关意图,需要手动在后台开启权限:
- 进入Discord开发者面板,找到当前机器人对应的应用
- 切换到「Bot」选项卡,向下滑动找到「Privileged Gateway Intents」板块
- 打开「Message Content Intent」的开关,保存设置即可。
内容的提问来源于stack exchange,提问作者nomadsky
相关产品推荐
相关产品推荐

