Discord.js bot 修改intent后出现BITFIELD_INVALID错误该如何解决?
错误原因
你当前的报错是因为Intents下不存在message、channel、reaction这三个属性,所有合法的网关意图枚举值都必须从Intents.FLAGS下选取,非法值会触发位字段校验失败的报错。
修正步骤
- 修正意图配置,补充必须的基础意图,删除非法的意图值。Discord.js v13及以上版本要读取消息内容,还需新增
Intents.FLAGS.MESSAGE_CONTENT权限。 - 替换废弃的
message监听事件,v13版本开始该事件已被移除,替换为messageCreate才能正常触发消息回调。 - 修正登陆参数,你已经引入了
dotenv,需要从环境变量中读取TOKEN,直接写TOKEN会触发变量未定义报错。 - 前往Discord开发者后台的Bot设置页,开启
Privileged Gateway Intents下的Message Content Intent开关,否则无法读取服务器内的消息内容。
修正后完整代码(适用于Discord.js v13)
require('dotenv').config(); const { Client, Intents } = require('discord.js'); const client = new Client({ intents: [ Intents.FLAGS.GUILDS, // 服务器基础访问权限,必须开启 Intents.FLAGS.GUILD_MESSAGES, // 服务器消息访问权限 Intents.FLAGS.MESSAGE_CONTENT // 读取消息内容权限,v13+必须开启 ] }); client.on('ready', () => { console.log(`It's welcome time`); }); // 替换为v13+支持的messageCreate事件 client.on('messageCreate', msg => { // 跳过机器人自身发送的消息,避免触发无限循环 if (msg.author.bot) return; if (msg.content === 'Hi') { msg.reply('Welcome wallet warrior!'); msg.channel.send('Welcome wallet warrior!'); } else { msg.channel.send('Hi, please introduce yourself'); } }); // 从环境变量读取TOKEN client.login(process.env.TOKEN);
如果你使用的是Discord.js v14版本,引入和配置方式需要调整为:
const { Client, GatewayIntentBits } = require('discord.js'); const client = new Client({ intents: [ GatewayIntentBits.Guilds, GatewayIntentBits.GuildMessages, GatewayIntentBits.MessageContent ] });其余逻辑和v13版本完全一致。
内容的提问来源于stack exchange,提问作者thaghost
相关产品推荐
相关产品推荐

