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

DiscordJS v14实现依赖选择项的Slash命令是否可行?

可以实现,这里提供两种主流方案:

方案一:使用斜杠命令的自动补全(Autocomplete)功能

这是最贴合原生斜杠命令体验的实现方式,步骤如下:

  • 注册斜杠命令时,将第一个选项(choice1)设为静态可选值(包含"A"和"B"),第二个选项(choice2)开启自动补全属性,不预设静态选项。
  • 当用户选定choice1的选项后,Discord会向你的服务端发送自动补全请求,请求中会携带用户已选择的choice1值。
  • 服务端根据choice1的值返回对应选项列表:
    • 若choice1为"A",返回["One", "Two"]
    • 若choice1为"B",返回["Three", "Four"]
  • 用户在choice2的输入框中就能看到动态生成的可选值,直接选择即可完成命令输入。

以下是Discord.js框架下的伪代码示例:

// 注册斜杠命令
client.application.commands.create({
  name: "dynamiccmd",
  description: "带动态选项的斜杠命令",
  options: [
    {
      name: "choice1",
      type: ApplicationCommandOptionType.String,
      description: "第一个选择项",
      required: true,
      choices: [
        { name: "A", value: "A" },
        { name: "B", value: "B" }
      ]
    },
    {
      name: "choice2",
      type: ApplicationCommandOptionType.String,
      description: "第二个选择项",
      required: true,
      autocomplete: true // 开启自动补全
    }
  ]
});

// 监听自动补全请求
client.on("interactionCreate", async interaction => {
  if (!interaction.isAutocomplete()) return;

  const selectedChoice1 = interaction.options.getString("choice1");
  let dynamicChoices = [];

  switch(selectedChoice1) {
    case "A":
      dynamicChoices = ["One", "Two"].map(item => ({ name: item, value: item }));
      break;
    case "B":
      dynamicChoices = ["Three", "Four"].map(item => ({ name: item, value: item }));
      break;
  }

  await interaction.respond(dynamicChoices);
});

方案二:分两步的交互消息选择

如果不想依赖自动补全,也可以通过两次交互实现:

  • 注册仅包含choice1选项的斜杠命令。
  • 用户执行命令并选择"A"或"B"后,机器人发送一个包含下拉选择菜单的消息,菜单选项根据用户的choice1选择动态生成(选A则显示One/Two,选B则显示Three/Four)。
  • 用户在下拉菜单中完成第二个选项的选择后,机器人再执行后续逻辑。

这种方式交互步骤更多,但对新手来说逻辑更直观。

总结:优先推荐自动补全方案,完全匹配你需要的“斜杠命令内先后选择两个选项,第二个选项随第一个动态变化”的需求,且体验更流畅。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 03:55:30