使用Discord.js开发Discord机器人时命令无响应排查求助
Discord.js 机器人命令失效问题修复
问题核心原因
你的代码存在两处关键错误导致命令无法触发:
- 错误调用
discord-prefix模块:设置前缀后,直接用模块对象prefix做startsWith判断,而非获取实际前缀字符串,导致前缀校验逻辑永远不成立。 - 命令匹配逻辑偏差:你设置了前缀
b.,但判断条件是message.content === "help",而用户实际需要发送b.help才能触发命令,两者完全不匹配。
修复后的代码
const express = require("express"); const app = express(); // 若无需动态修改前缀,可直接定义常量,无需引入discord-prefix模块 const prefix = 'b.'; app.listen(3000, () => { console.log("Project is running!"); }) app.get("/", (req, res) => { res.send("Hello World!"); }) const Discord = require("discord.js"); const client = new Discord.Client({intents: ["GUILDS", "GUILD_MESSAGES"]}); client.on("messageCreate", message => { // 跳过机器人自身消息,避免循环触发 if (message.author.bot) return; // 校验消息前缀 if (!message.content.startsWith(prefix)) return; // 提取前缀后的命令文本 const command = message.content.slice(prefix.length).trim(); // 匹配命令 if(command === "help") { message.channel.send("nah"); } }) client.login(process.env.token)
额外优化说明
- 新增
message.author.bot判断,避免机器人响应自身消息引发异常。 - 用
slice(prefix.length)截取前缀后的纯命令文本,后续新增命令时逻辑更清晰。 - 若不需要动态修改前缀的功能,可以直接删除
discord-prefix模块的引入,简化代码结构。
内容的提问来源于stack exchange,提问作者AspectRx
相关产品推荐
相关产品推荐

