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

使用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 10:30:53