Discord Bot已在线但无响应:Ping命令无法触发Pong返回
Discord Bot Ping无响应,控制台提示消息内容非'ping'的解决方法
问题情况
在Replit上基于JavaScript开发Discord Bot,仅实现Ping-Pong命令(发送Ping返回Pong),Bot显示在线,但发送Ping后无响应,控制台输出Message content 'xxx' is not 'ping'。
原因分析
- 缺失MESSAGE_CONTENT意图:Discord从v14版本开始,获取消息内容需要额外声明
MESSAGE_CONTENT意图,且必须在Discord开发者门户中手动启用该权限。当前代码仅声明了GUILDS和GUILD_MESSAGES,无法正常读取完整的消息内容,导致匹配失败。 - 消息内容可能存在隐藏字符/格式问题:比如输入时不小心带入全角空格、表情或其他不可见字符,转小写后无法匹配纯"ping"。
解决方案
步骤1:添加并启用MESSAGE_CONTENT意图
- 代码中更新Intents配置,加入
Intents.FLAGS.MESSAGE_CONTENT:
const client = new Client({ intents: [ Intents.FLAGS.GUILDS, Intents.FLAGS.GUILD_MESSAGES, Intents.FLAGS.MESSAGE_CONTENT // 添加这一行 ] });
- 登录Discord开发者门户,找到你的Bot应用:
- 进入"Bot"页面
- 在"Privileged Gateway Intents"区域,开启"Message Content Intent"开关
步骤2:优化消息匹配逻辑(可选)
如果仍存在匹配问题,可以放宽匹配条件,用正则忽略大小写和前后空格:
// 替换原有的if判断 if (/^\s*ping\s*$/i.test(message.content)) { // 发送pong的逻辑 }
修改后的完整代码
require('dotenv').config(); const { Client, Intents } = require("discord.js"); const client = new Client({ intents: [ Intents.FLAGS.GUILDS, Intents.FLAGS.GUILD_MESSAGES, Intents.FLAGS.MESSAGE_CONTENT // 新增意图 ] }); client.once("ready", () => { console.log("Discord bot is online!"); }); client.on("messageCreate", message => { console.log(`Received message: '${message.content}'`); if (message.author.bot) { console.log("Message is from a bot. Ignoring."); return; } console.log("Message is not from a bot."); // 使用正则匹配,忽略大小写和前后空格 if (/^\s*ping\s*$/i.test(message.content)) { console.log("Received 'ping' message."); message.channel.send("pong").then(() => { console.log("Sent 'pong' in response to 'ping'"); }).catch(err => { console.error("Failed to send 'pong':", err); }); } else { console.log(`Message content '${message.content.trim().toLowerCase()}' is not 'ping'.`); } }); client.login(process.env.token).catch(err => { console.error("Failed to login:", err); });
内容的提问来源于stack exchange,提问作者ethan fait des videos
相关产品推荐
相关产品推荐

