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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 00:54:30