Node.js编写的Discord bot正常上线但不响应指令问题求助
问题排查与解决方案
核心故障原因
- 事件名大小写错误:代码中监听的事件为
Message(首字母大写),但discord.js的消息触发事件名是全小写的message,这是指令无响应的最直接原因。 - 缺少网关意图配置:discord.js v13及以上版本初始化Client时必须声明需要使用的意图,否则无法接收消息事件。
- 权限未开启:Discord开发者后台未给机器人开启
Message Content Intent权限时,机器人无法读取用户发送的消息内容,自然无法匹配指令。 - 邀请权限不足:机器人进服务器时未被授予发消息、读消息的基础权限,也会导致无响应。
修复后可运行代码
// v13版本写法 const { Client, Intents } = require('discord.js'); // 声明需要用到的网关意图 const client = new Client({ intents: [ Intents.FLAGS.GUILDS, Intents.FLAGS.GUILD_MESSAGES, Intents.FLAGS.DIRECT_MESSAGES ] }); const prefix = '-'; client.once('ready', () => { console.log('BOT ist online'); }); // 修正事件名为全小写的message client.on('message', (message) => { if(!message.content.startsWith(prefix) || message.author.bot) return; const args = message.content.slice(prefix.length).split(/ +/); const command = args.shift().toLowerCase(); if(command === 'ping'){ message.channel.send('pong!'); } else if(command == 'youtube'){ message.channel.send('TEST'); } }); client.login('你的机器人Token');
如果使用v14及以上版本,只需将意图声明部分替换为如下写法即可:
const { Client, GatewayIntentBits } = require('discord.js'); const client = new Client({ intents: [ GatewayIntentBits.Guilds, GatewayIntentBits.GuildMessages, GatewayIntentBits.MessageContent, GatewayIntentBits.DirectMessages, ] });
额外配置操作
- 打开Discord开发者平台,进入对应机器人应用页面,切换到
Bot选项卡,找到Privileged Gateway Intents分区,开启Message Content Intent开关后保存设置。 - 重新生成机器人邀请链接,确保勾选
Send Messages、Read Message History、Read Messages/View Channels三个基础权限,用新链接重新邀请机器人进服务器即可。
内容的提问来源于stack exchange,提问作者mdmx
相关产品推荐
相关产品推荐

