Discord Bot 不响应 ping 命令且对应事件日志无输出问题求助
问题根因与修复方案
1. 缺少必要的监听意图
discord.js 要求开发者显式声明 Bot 需要监听的事件对应权限,你当前仅开启了 GUILDS 意图,无法接收服务器内的消息内容,因此绑定的消息事件回调完全不会触发,对应的日志自然不会输出。
需要额外补充两个意图:
GUILD_MESSAGES:允许监听服务器内的消息事件MESSAGE_CONTENT:允许获取消息的文本内容(该权限还需要在 Discord 开发者后台的 Bot 配置页开启「Message Content Intent」开关)
2. 事件名已废弃
discord.js v13 及以上版本已经废弃了旧的 message 事件,替换为 messageCreate 事件,监听错误的事件名也会导致回调不执行。
3. 命令匹配逻辑错误
你已经定义了前缀为 -,代码中会先切掉前缀再提取命令,因此匹配的命令应该是 ping,而非 -ping,否则需要输入 --ping 才能命中规则。
4. 参数分割规则不合理
你使用的正则 / */ 是匹配0个或多个空格,会切割出空字符串元素,建议替换为 /\s+/ 匹配1个或多个空格,实现按空格正常分割参数。
修复后完整代码
const {Client, Intents} = require('discord.js'); const {token} = require('./config.json'); // 补充必要的意图 const client = new Client({intents:[ Intents.FLAGS.GUILDS, Intents.FLAGS.GUILD_MESSAGES, Intents.FLAGS.MESSAGE_CONTENT ]}); const prefix = '-'; client.once('ready', () => { console.log('Bot works'); }); // 替换为正确的事件名 client.on('messageCreate', message => { console.log('Message received'); if(!message.content.startsWith(prefix) || message.author.bot) return; // 修正参数分割正则 const args = message.content.slice(prefix.length).split(/\s+/); const command = args.shift().toLowerCase(); // 修正命令匹配规则 if(command === 'ping'){ message.channel.send('pong'); } }); client.login(token);
内容的提问来源于stack exchange,提问作者Sprinkled Difficulty
相关产品推荐
相关产品推荐

