【问题标题】:Expected to receive a SlashCommandChannelOption builder, got undefined instead预计会收到一个 SlashCommandChannelOption 构建器,而不是未定义
【发布时间】:2021-10-18 18:16:20
【问题描述】:

在使用 Discord.js v13 创建命令时,我遇到了一个我似乎无法弄清楚的有趣错误。

如果我使用命令处理系统并通过不久前为开发人员应用程序创建的 Application Commands 功能 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:")
    }
}

【问题讨论】:

    标签: javascript node.js discord discord.js bots


    【解决方案1】:

    您作为参数传递给.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:")
        }
    }
    

    【讨论】:

      【解决方案2】:

      我犯了同样的错误。在文档中,他们省略了大括号 {},因此他们可以隐式地 return 回调的主体。如果你使用花括号,你必须使用return

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-04-27
        • 1970-01-01
        • 2020-09-15
        • 1970-01-01
        • 2020-10-23
        • 2020-08-16
        • 2013-06-18
        相关资源
        最近更新 更多