Discord.js v13 TypeError: Cannot read properties of undefined (reading 'name')

Discord.js v13 TypeError: Cannot read properties of undefined (reading 'name')

我遇到了一个错误,我已经尝试了所有方法,但没有任何效果。

TypeError: Cannot read properties of undefined (reading 'name')
    at Object.<anonymous> (/home/runner/NauticalAgonizingRegisters/index.js:12:35)
    at Module._compile (node:internal/modules/cjs/loader:1101:14)

代码位于 index.js:12:35

for (const file of commandFiles) {
    const command = require(`./commands/${file}`);
    client.commands.set(command.data.name, command);
}

查看评论,似乎您的大多数命令文件中都没有 command.data.name。你可以做的是:

  for (const file of commandFiles) {
  const commandName = file.split(".")[0]
  const command = require(`./commands/${file}`);
  client.commands.set(commandName, command);
  }

And/or 在每个命令文件中声明一个 command.name,如下所示:

module.exports.name = "foobar";

您可以使用 command.name 而不是 commandName。其他 2 个文件是否不是应用程序命令并不重要,只要它们具有执行(或 运行)函数和可导出名称变量的声明即可。

正如您在 中所说,并非所有命令都导出 data 对象,因为并非所有命令都是应用程序命令。这意味着 command.data 对于这些命令将是 undefined

你可以

  • 通过其他方式获取 non-application 命令的名称。例如:

    client.commands.set(command.data?.name ?? command.name, command)
    
    // commands/nonApplicationCommand.js
    module.exports = {
      name: 'nonApplicationCommand'
      // ...
    }
    
  • 将您的命令分为每种类型的单独文件夹(这就是我会做的)。

    const {readdir} = require('node:fs/promises')
    
    const applicationCommandFiles = await readdir('./commands/application')
    for (const file of applicationCommandFiles) {
      const command = require(`./commands/application/${file}`);
      client.applicationCommands.set(command.data.name, command);
    }