使用discord.js开发Discord机器人时遇GatewayIntentBits未定义错误
Discord.js机器人报错:GatewayIntentBits未定义
问题描述
执行node bot.js时提示GatewayIntentBits未定义,已通过解构导入该对象,从discord.io切换到discord.js后问题仍存在,相关代码:
const {Client, GatewayIntentBits, Partials} = require('discord.js'); const auth = require('./auth.json') const bot = new Client({ intents: [ GatewayIntentBits.Guilds, GatewayIntentBits.GuildMessages, GatewayIntentBits.MessageContent, ], partials: [Partials.Channel, Partials.Message] }) bot.on('ready', function() { logger.info('Connected') logger.info("Logged in as: ") logger.info(bot.username + ' - (' + bot.id + ')') }) bot.on('message', function(user, userID, channelID, message, evt) { if (message.substring(0, 1) === "!") { var args = message.substring(1).split(' ') const cmd = args[0] args = args.splice(1) console.log(args) switch(cmd) { case 'search': { bot.sendMessage({ to: channelID, message: 'Coming soon..' }) } break; } } }) bot.login('nothin to see')
解决方案
1. 确认discord.js版本
GatewayIntentBits是discord.js v14及以上版本新增的API,若安装的是v13或更早版本,会触发未定义错误:
- 执行
npm list discord.js查看当前版本 - 针对不同版本的处理方式:
- 升级到最新版:执行
npm install discord.js@latest,同时适配v14的核心变更:- 事件名
message改为messageCreate,参数结构调整,示例:bot.on('messageCreate', (message) => { if (message.content.startsWith('!')) { const args = message.content.slice(1).split(' '); const cmd = args.shift(); if (cmd === 'search') { message.channel.send('Coming soon..'); } } }); - 移除不存在的
bot.sendMessage方法,改用渠道对象的send方法 bot.username和bot.id需改为bot.user.username和bot.user.id- 补充定义
logger(直接用console.log代替,或导入日志库)
- 事件名
- 保留旧版本:将代码中的
GatewayIntentBits替换为旧版的Intents.FLAGS,同时修改导入语句:const {Client, Intents, Partials} = require('discord.js'); const bot = new Client({ intents: [ Intents.FLAGS.GUILDS, Intents.FLAGS.GUILD_MESSAGES, Intents.FLAGS.MESSAGE_CONTENT, ], partials: [Partials.Channel, Partials.Message] })
- 升级到最新版:执行
2. 修复其他潜在问题
- 代码中
logger未定义,会导致ready事件触发时报错,可直接替换为console.log bot.sendMessage不是discord.js的标准方法,需改为通过渠道对象发送消息
内容的提问来源于stack exchange,提问作者TheDemonSlayerOfTheDemons
相关产品推荐
相关产品推荐

