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

discord.js v13如何获取子命令(SubCommand)的选项参数?

discord.js v13 子命令选项获取方案

getSubcommand()方法的返回值本身就是子命令的名称字符串,这是discord.js的标准设计,作用是用来区分当前触发的是父命令下的哪一个子命令,方便做业务逻辑分支。

方法1:直接调用选项获取方法(最常用)

discord.js的CommandInteractionOptionResolver会自动定位到当前触发的子命令的选项作用域,你不需要手动指定子命令,直接调用对应的get方法传入选项名即可获取参数。
示例代码:

// 监听斜杠命令触发事件
client.on('interactionCreate', async interaction => {
  if (!interaction.isChatInputCommand()) return;

  // 先判断父命令名称
  if (interaction.commandName === '你的父命令名') {
    // 获取当前触发的子命令名称
    const subCommand = interaction.options.getSubcommand();

    // 根据子命令名称走不同逻辑
    if (subCommand === '子命令1的名称') {
      // 直接获取子命令下的选项,不需要额外指定子命令
      const strOption = interaction.options.getString('字符串选项名');
      const intOption = interaction.options.getInteger('数字选项名');
      const userOption = interaction.options.getUser('用户选项名');
      // 执行子命令1的业务逻辑
    } else if (subCommand === '子命令2的名称') {
      // 同理获取子命令2的选项
      const boolOption = interaction.options.getBoolean('布尔选项名');
      // 执行子命令2的业务逻辑
    }
  }
});

如果你的命令结构包含子命令组,还可以配合getSubcommandGroup()方法做多层判断:

const subCommandGroup = interaction.options.getSubcommandGroup();
const subCommand = interaction.options.getSubcommand();

if (subCommandGroup === '子命令组名' && subCommand === '子命令名') {
  // 对应逻辑
}

方法2:获取子命令的完整选项数组

如果你确实需要拿到当前子命令下所有选项的完整数组,可以通过interaction.options.data过滤获取:

const subCommandName = interaction.options.getSubcommand();
// 找到当前触发的子命令对应的配置项
const targetSubCommand = interaction.options.data.find(item => item.name === subCommandName);
// 子命令的所有选项数组
const subCommandOptions = targetSubCommand?.options || [];

// 遍历选项数组可以拿到所有参数的键值
subCommandOptions.forEach(option => {
  console.log(`选项名:${option.name},选项值:${option.value}`);
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 16:09:04