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

Discord.js v12中能否实现Select Menu(下拉菜单)?求方案及依赖信息

Discord.js v12 中实现 Select Menu 的可行性说明

核心结论

Discord.js v12 原生不支持 Select Menu(下拉菜单)功能——Select Menu是Discord官方在后续API版本中推出的交互组件,而v12的设计仅适配当时的Discord API规范,并未包含这类组件的支持。

可行解决方案

方案1:升级到 Discord.js v13 及以上版本

这是最直接且官方推荐的方案,v13及后续版本完全支持Select Menu等交互组件,无需额外依赖第三方包。实现示例(v13+):

// 导入必要模块(v13+)
const { Client, Intents, MessageActionRow, MessageSelectMenu } = require('discord.js');

// 创建客户端
const client = new Client({ intents: [Intents.FLAGS.GUILDS, Intents.FLAGS.GUILD_MESSAGES] });

client.on('messageCreate', async (message) => {
  if (message.content === '!menu') {
    // 创建下拉菜单选项
    const selectMenu = new MessageSelectMenu()
      .setCustomId('my_select_menu')
      .setPlaceholder('选择一个选项')
      .addOptions([
        { label: '选项1', value: 'option1' },
        { label: '选项2', value: 'option2' },
        { label: '选项3', value: 'option3' }
      ]);

    // 创建消息行并添加菜单
    const row = new MessageActionRow().addComponents(selectMenu);

    // 发送带下拉菜单的消息
    await message.channel.send({ content: '请选择:', components: [row] });
  }
});

// 监听菜单交互事件
client.on('interactionCreate', async (interaction) => {
  if (!interaction.isSelectMenu()) return;

  if (interaction.customId === 'my_select_menu') {
    await interaction.reply(`你选择了:${interaction.values[0]}`);
  }
});

client.login('你的Bot令牌');

方案2:模拟下拉菜单(非官方交互组件)

如果无法升级版本,可通过发送消息+表情反应的方式模拟下拉效果,这并非真正的Select Menu,仅作为替代方案:

// v12 模拟下拉菜单示例
client.on('message', async (message) => {
  if (message.content === '!simulate-menu') {
    const menuMessage = await message.channel.send('请选择一个选项:\n1. 选项1\n2. 选项2\n3. 选项3');
    // 添加反应作为选择按钮
    await menuMessage.react('1️⃣');
    await menuMessage.react('2️⃣');
    await menuMessage.react('3️⃣');

    // 监听反应
    const filter = (reaction, user) => ['1️⃣', '2️⃣', '3️⃣'].includes(reaction.emoji.name) && user.id === message.author.id;
    const collector = menuMessage.createReactionCollector(filter, { time: 15000 });

    collector.on('collect', (reaction) => {
      let selectedOption = '';
      switch(reaction.emoji.name) {
        case '1️⃣': selectedOption = '选项1'; break;
        case '2️⃣': selectedOption = '选项2'; break;
        case '3️⃣': selectedOption = '选项3'; break;
      }
      message.channel.send(`你选择了:${selectedOption}`);
      collector.stop();
    });

    collector.on('end', () => {
      menuMessage.reactions.removeAll().catch(console.error);
    });
  }
});

关于额外依赖的说明

  • 若选择升级到v13+,不需要额外安装第三方依赖包,仅使用Discord.js官方库即可。
  • 若选择模拟方案,同样无需额外依赖,仅用Discord.js v12原生API就能实现。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 10:14:54