在使用 Discord.js v13 创建命令时,我遇到了一个我似乎无法弄清楚的有趣错误。
如果我使用命令处理系统,并通过不久前为开发人员应用程序创建的 应用程序命令 功能 Discord 创建带有 channel 输入字段的命令,我会运行运行 Node.js 应用程序时出现以下错误:
F:\Development\eco-bot\node_modules\@discordjs\builders\dist\interactions\slashCommands\Assertions.js:44
throw new TypeError(`Expected to receive a ${instanceName} builder, got ${input === null ? 'null' : 'undefined'} instead.`);
^
TypeError: Expected to receive a SlashCommandChannelOption builder, got undefined instead.
at Object.assertReturnOfBuilder (F:\Development\eco-bot\node_modules\@discordjs\builders\dist\interactions\slashCommands\Assertions.js:44:15)
at MixedClass._sharedAddOptionMethod (F:\Development\eco-bot\node_modules\@discordjs\builders\dist\interactions\slashCommands\mixins\CommandOptions.js:76:22)
at MixedClass.addChannelOption (F:\Development\eco-bot\node_modules\@discordjs\builders\dist\interactions\slashCommands\mixins\CommandOptions.js:40:21)
at Object.<anonymous> (F:\Development\eco-bot\commands\faq.js:7:10)
at Module._compile (node:internal/modules/cjs/loader:1101:14)
at Object.Module._extensions..js (node:internal/modules/cjs/loader:1153:10)
at Module.load (node:internal/modules/cjs/loader:981:32)
at Function.Module._load (node:internal/modules/cjs/loader:822:12)
at Module.require (node:internal/modules/cjs/loader:1005:19)
at require (node:internal/modules/cjs/helpers:94:18)
在提出任何相关问题之前,是的,所有其他命令都已正确加载并发送到 Discord 的应用程序命令 API,并且 Discord 会毫无错误地注册它们。
这是产生问题的代码:
const { SlashCommandBuilder } = require('@discordjs/builders')
module.exports = {
data: new SlashCommandBuilder()
.setName("faq")
.setDescription("Send a FAQ question and answer in selected channel")
.addChannelOption(channel => {
channel
.setName("channel")
.setDescription("Channel you want to send the FAQ embed in")
.setRequired(true)
}),
async execute (interaction) {
await interaction.reply("Pong! :ping_pong:")
}
}
最佳答案
您作为参数传递到 .addChannelOption()
方法的函数预计会返回 SlashCommandChannelOption
的实例,在您的情况下是 channel
.因此请确保返回 channel
。
const { SlashCommandBuilder } = require('@discordjs/builders')
module.exports = {
data: new SlashCommandBuilder()
.setName("faq")
.setDescription("Send a FAQ question and answer in selected channel")
.addChannelOption(channel => {
return channel // Add return here
.setName("channel")
.setDescription("Channel you want to send the FAQ embed in")
.setRequired(true)
}),
async execute (interaction) {
await interaction.reply("Pong! :ping_pong:")
}
}
关于javascript - 预期收到 SlashCommandChannelOption 构建器,但未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68807171/