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

Discord JS中SlashCommandBuilder.addStringOption出现类型错误

Discord.js SlashCommandBuilder 嵌套选项报错解决方法

错误原因

你碰到的addStringOption is not a function错误,核心问题是普通字符串选项(StringOption)不支持嵌套添加其他选项。Discord.js的SlashCommandBuilder规则里,只有子命令(Subcommand)或子命令组(SubcommandGroup)才能嵌套选项,普通选项根本没有addStringOption这类方法。

正确实现方式

如果你的需求是先选“突击步枪”分类,再选具体枪支,应该把assault_rifle设为子命令,然后在子命令里添加gun选项。修改后的代码如下:

async function main() {
  const classCommand = new SlashCommandBuilder()
    .setName("class")
    .setDescription("Class setups")
    // 用addSubcommand创建子命令,替代原来的addStringOption
    .addSubcommand(subcommand =>
      subcommand
        .setName("assault_rifle")
        .setDescription("Assault Rifles")
        // 在子命令内部添加具体的gun选项
        .addStringOption(option =>
          option
            .setName("gun")
            .setDescription("Select an assault rifle.")
            .setRequired(true)
        )
    );

  const commands = [classCommand.toJSON()];

  try {
    console.log("Started refreshing application (/) commands.");
    await rest.put(Routes.applicationGuildCommands(CLIENT_ID, GUILD_ID), {
      body: commands,
    });
  } catch (err) {
    console.log(err);
  }
}

关键修改点

  • 把原来的addStringOption替换成addSubcommand,将assault_rifle定义为子命令
  • 在子命令内部添加gun字符串选项,这样的层级结构完全符合Discord的命令规范

修改后,你的命令结构会变成/class assault_rifle gun:[具体枪支],既能实现需求,也不会再触发类型错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 11:42:09