Discord.js 14.1.2中为/environnement指令添加子选项是否可行?
实现Store选项的子选择功能
这个需求可以实现,但Discord原生不支持直接的“层级下拉子菜单”,不过可以通过**自动补全(Autocomplete)**结合逻辑判断的方式达成类似效果,以下是具体实现方案:
实现步骤
1. 修改指令定义,添加子选项并开启自动补全
在原有的SlashCommandBuilder中新增一个字符串选项,开启自动补全功能,用于Store的子分类选择:
const { SlashCommandBuilder } = require('discord.js'); module.exports = { data: new SlashCommandBuilder() .setName("environnement") .setDescription("Donne la carte, la météo et le store") .addStringOption((option) => option .setName("category") .setDescription("La catégorie") .setRequired(true) .addChoices( { name: "Carte", value: "carte" }, { name: "Météo", value: "meteo" }, { name: "Store", value: "store" } ) ) // 添加Store子选项 .addStringOption((option) => option .setName("subcategory") .setDescription("Sous-catégorie du Store") .setAutocomplete(true) // 开启自动补全 ),
2. 编写自动补全逻辑
添加autocomplete函数,当用户选择Store分类后,在子选项输入框中动态加载对应的子选项:
// 处理自动补全请求 async autocomplete(interaction) { const focusedOption = interaction.options.getFocused(true); const selectedCategory = interaction.options.getString('category'); // 仅当聚焦的是子选项且主分类为Store时,返回子选项列表 if (focusedOption.name === 'subcategory' && selectedCategory === 'store') { const storeSubcategories = [ { name: "Armes", value: "weapons" }, { name: "Armures", value: "armors" }, { name: "Consommables", value: "consumables" } ]; // 可选:根据用户输入过滤选项 const filteredOptions = storeSubcategories.filter(choice => choice.name.toLowerCase().includes(focusedOption.value.toLowerCase()) ); await interaction.respond(filteredOptions); } else { // 非Store分类时,返回空选项 await interaction.respond([]); } },
3. 完善指令执行逻辑
在execute函数中,判断主分类是否为Store,若为Store则检查子选项是否已选择,并执行对应逻辑:
// 执行指令逻辑 async execute(interaction) { const category = interaction.options.getString('category'); if (category === 'store') { const subcategory = interaction.options.getString('subcategory'); if (!subcategory) { return interaction.reply({ content: "Veuillez sélectionner une sous-catégorie pour le Store !", ephemeral: true }); } // 处理Store子分类的业务逻辑 await interaction.reply(`Vous avez sélectionné : Store > ${subcategory}`); } else { // 处理Carte或Météo的业务逻辑 await interaction.reply(`Vous avez sélectionné : ${category}`); } } };
效果说明
- 用户输入
/environnement并选择Store后,在subcategory输入框中会自动弹出设置的子选项列表,可直接选择。 - 若用户选择Store但未填写子选项,指令会提示必须选择子分类。
内容的提问来源于stack exchange,提问作者Leena Ray
相关产品推荐
相关产品推荐

