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);
}
我遇到了一个错误,我已经尝试了所有方法,但没有任何效果。
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); }