You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 17:45:06