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

