Node.js编写的Discord Bot可正常运行但不响应命令,求问题排查
Discord Bot 不响应指令问题修复方案
核心问题1:事件API已废弃
discord.js v13及更高版本已经废弃了message监听事件,替换为messageCreate事件,你当前监听的旧事件不会被触发,因此无法响应消息。
核心问题2:缺少必要的网关意图
Discord API要求开发者显式声明Bot需要使用的权限意图,你当前仅声明了GUILDS意图,缺少两个必须的权限:
GUILD_MESSAGES:允许Bot接收服务器频道内的消息MESSAGE_CONTENT:允许Bot读取消息的文本内容
注意:
MESSAGE_CONTENT属于特权意图,除了代码中声明外,还需要登录Discord开发者后台,进入对应Bot的管理页面,在「Privileged Gateway Intents」区域手动开启对应开关,否则无法生效。
核心问题3(仅discord.js v14+版本适用):意图枚举写法变更
v14以上版本移除了Intents.FLAGS的写法,改为使用GatewayIntentBits枚举,需要同步调整导入和初始化逻辑。
修复后的完整代码(兼容discord.js v13版本)
const { Client, Intents } = require('discord.js'); const config = require('./config.json'); const client = new Client({ intents: [ Intents.FLAGS.GUILDS, Intents.FLAGS.GUILD_MESSAGES, Intents.FLAGS.MESSAGE_CONTENT ] }); client.once('ready', () => { console.log('Ready!'); }); // 替换为新版消息事件名 client.on('messageCreate', message=>{ if(!message.content.startsWith(config.prefix) || message.author.bot) return; const args = message.content.slice(config.prefix.length).split(/ +/); const command = args.shift().toLowerCase(); if(command === 'ping'){ message.channel.send('pong!'); } }) client.login(config.token);
v14版本适配调整说明
如果你的discord.js依赖版本为v14及以上,仅需要修改代码前两行的导入和意图声明部分即可:
// 替换导入语句 const { Client, GatewayIntentBits } = require('discord.js'); // 替换意图声明部分 const client = new Client({ intents: [ GatewayIntentBits.Guilds, GatewayIntentBits.GuildMessages, GatewayIntentBits.MessageContent ] });
内容的提问来源于stack exchange,提问作者Ivan Antipov
相关产品推荐
相关产品推荐

