You need to enable JavaScript to run this app. discord.js开发Discord机器人eHP命令触发后无响应问题求助
优惠活动
大模型
产品
解决方案
定价
更多

discord.js开发Discord机器人eHP命令触发后无响应问题求助

问题原因

    1. 主文件与命令模块的run函数传参顺序不匹配
      主文件调用命令时的参数顺序是command.run(message, args, client),但命令模块定义的run接收顺序是async run (client,message),参数错位导致命令模块内拿到的message对象实际是参数数组,不存在content、reply等属性和方法,所有逻辑都无法执行。
    1. 命令名大小写不匹配
      主文件对触发命令做了toLowerCase()处理,而命令模块配置的name为大写的eHP,无法匹配到对应的命令,直接终止执行。
    1. 命令模块内多余的触发判断
      主文件已经完成了命令前缀、命令存在性的校验,命令模块内不需要再加if(message.content.startsWith("!eHP"))的判断,加上之后反而因为参数错位永远无法满足条件。
    1. 语法错误与逻辑漏洞
      命令模块末尾多了一个多余的闭合大括号,会抛出语法错误;且数值校验失败后没有加return终止执行,会继续输出错误的计算结果。
    1. 参数读取逻辑冗余错误
      主文件已经将命令后的参数拆分存入args数组(已经去除了命令前缀和命令名),命令模块不需要重新拆分message.content,原参数索引对应错误,无法读取正确的数值。

修复方案

1. 修改命令模块代码

替换为以下内容:

module.exports = {
  name: 'ehp', // 改为全小写,适配主文件的toLowerCase处理
  async run (message, args, client) { // 修正参数顺序和主文件调用对应
    // 直接用主文件处理好的args数组,不用重新拆分
    // args格式:用户输入!ehp def 55 hp 42时,args = ["def", "55", "hp", "42"]
    let defenseValue = args[1];
    let hpValue = args[3];
         
    // 转换为数值
    defenseValue = parseFloat(defenseValue);
    hpValue = parseFloat(hpValue);
         
    if(isNaN(defenseValue) || isNaN(hpValue)) {
      if(isNaN(defenseValue)) {
        message.reply(`defense valeur doit être nombre, reçu: "${args[1]}"`);
      } else {
        message.reply(`hp valeur doit être nombre, reçu: "${args[3]}"`);
      }
      return; // 校验失败直接终止后续逻辑
    }
         
    // 执行计算
    const resultat = (((defenseValue * 3.5 ) + 1140) * hpValue) / 1000;
    // 返回结果
    message.reply(`resultat pour => def: ${defenseValue}, hp: ${hpValue} égal: ${resultat}`);
  }
}

2. 主文件无需修改,保持原有逻辑即可

触发示例

发送消息!ehp def 55 hp 42即可得到对应计算结果。


内容的提问来源于stack exchange,提问作者victor

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.14 21:06:04