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

Discord.js机器人运行出现读取name、toJSON未定义报错求助

问题原因与解决方法

两个报错的核心诱因完全相同:你新增的./commands目录下至少有一个命令文件没有按Discord.js的规范导出data属性,导致代码读取command.data时拿到undefined,进一步触发属性读取报错。

排查修复步骤

  • 确认命令文件的标准结构

    每个放在./commands目录下的命令文件必须按以下结构导出内容,你可以对照检查新增的文件:
    const { SlashCommandBuilder } = require('discord.js');
    
    module.exports = {
      // 必须要有data属性,用SlashCommandBuilder构建
      data: new SlashCommandBuilder()
        .setName('test') // 必须调用setName设置命令名,对应command.data.name
        .setDescription('测试命令'),
      // 必须要有execute方法处理命令执行逻辑
      async execute(interaction) {
        await interaction.reply('测试响应');
      }
    };
    
  • 重点检查易出错的点

    1. 有没有漏写module.exports,漏写导出的话require拿到的是空对象,找不到data属性
    2. data属性有没有拼写错误,比如写成Data、datas这类大小写/拼写错误
    3. 有没有给data调用setName方法,漏写的话data.name会是undefined
  • 快速定位出错文件

    可以在读取命令的循环中加入调试代码,直接找到有问题的文件:
    for (const file of commandFiles) {
        const command = require(`./commands/${file}`);
        // 新增调试代码
        if (!command?.data?.name) {
            console.log(`存在问题的命令文件:${file}`);
            continue;
        }
        client.commands.set(command.data.name, command);
    }
    
    运行后控制台会直接输出不符合规范的文件名,针对性修改即可。

修改完成后先重新运行node deploy-commands.js注册命令,再启动机器人即可恢复正常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 03:54:04