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

Discord.js机器人执行accept命令触发TypeError:无法读取undefined的run属性

错误原因

你遇到的报错核心原因是client.commands集合中不存在键为accept的命令对象,调用get("accept")返回undefined,尝试访问undefined的run属性就触发了类型错误。具体触发逻辑如下:

  • 你的命令文件导出的配置项中name字段值为dm,入口文件遍历命令存储时,是用command.name作为集合的键存入client.commands,所以你实际存进去的命令键是dm而非accept
  • 入口文件的命令匹配逻辑里,你判断用户输入的命令是accept时,强行调用键为accept的命令的run方法,自然找不到对应对象
解决方案
  1. 对齐命令标识,二选一即可:
    • 如果你想要用户用-accept触发该命令,直接修改命令文件中导出的name字段值为accept即可
    • 如果你想要用户用-dm触发该命令,修改入口文件的对应代码:
      // 原来的判断
      if(command === "accept") {
          client.commands.get("accept").run(client, message, args);
      }
      // 修改为
      if(command === "dm") {
          client.commands.get("dm").run(client, message, args);
      }
      
  2. 修复命令文件中的语法错误
    你命令文件中if(message.content.includes(-a))存在语法问题,-a是字符串需要加引号,修改为:
    if(message.content.includes("-a"))
    
  3. 可选优化:增加命令存在性判断,避免后续新增命令时重复出现类似崩溃问题,修改入口文件的命令调用逻辑:
    if(!message.content.startsWith(prefix) || message.author.bot) return; 
    
    const args = message.content.slice(prefix.length).split(/ +/);
    const command = args.shift().toLowerCase()
    // 先校验命令存在再调用
    const targetCommand = client.commands.get(command)
    if (targetCommand) {
        targetCommand.run(client, message, args)
    }
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 00:15:06