升级discord.js到V13后报CLIENT_MISSING_INTENTS错误怎么解决?
问题解决方法
这个报错本质是discord.js的Client实例初始化时没有接收到合法的Intents参数,根据你提供的代码,最大概率出在自定义的MongoClient类的实现上,按以下步骤排查解决:
- 检查自定义MongoClient类的参数传递
打开./utils/MongoClient.js文件,确认构造函数是否将接收的配置参数正确传递给父类discord.js的Client构造函数,正确示例如下:
const { Client } = require('discord.js'); class MongoClient extends Client { constructor(options) { // 必须将options传入super(),父类才能拿到intents配置 super(options); // 下方保留你原本的MongoClient初始化逻辑 } }
如果之前调用super()时没有传入options参数,就会导致父类Client拿不到你传入的intents,直接触发该报错。
- 开启Discord开发者后台的特权Intent
v13版本中GUILD_MEMBERS、GUILD_PRESENCES属于特权网关Intent,你需要登录Discord开发者平台,进入对应机器人的设置页,找到「Privileged Gateway Intents」板块,将这两个Intent的开关全部打开,否则即使代码中配置了也无法正常生效。 - 可选优化写法
你也可以直接传入Intents标志数组,不需要手动实例化Intents对象,写法更简洁,也可以排除实例化过程的异常:
const bot = new MongoClient({ intents: [ Intents.FLAGS.GUILD_PRESENCES, Intents.FLAGS.GUILD_MEMBERS, Intents.FLAGS.GUILDS, Intents.FLAGS.GUILD_BANS, Intents.FLAGS.GUILD_MESSAGES, Intents.FLAGS.DIRECT_MESSAGES, Intents.FLAGS.GUILD_EMOJIS_AND_STICKERS, Intents.FLAGS.GUILD_INTEGRATIONS, Intents.FLAGS.GUILD_WEBHOOKS, Intents.FLAGS.GUILD_INVITES, Intents.FLAGS.GUILD_MESSAGE_TYPING, Intents.FLAGS.DIRECT_MESSAGE_REACTIONS, Intents.FLAGS.DIRECT_MESSAGE_TYPING, Intents.FLAGS.GUILD_VOICE_STATES, Intents.FLAGS.GUILD_MESSAGE_REACTIONS ] });
- 确认运行环境符合要求
discord.js v13要求Node.js版本≥16.6.0,你可以在项目根目录的package.json中新增如下配置,强制运行环境使用符合要求的Node版本:
"engines": { "node": "16.x" }
如果还是有问题,可以删除项目下的node_modules文件夹和package-lock.json文件,重新执行npm install重装依赖,排除依赖安装异常的问题。
内容的提问来源于stack exchange,提问作者Nicky
相关产品推荐
相关产品推荐

