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
相关产品推荐
相关产品推荐

