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

求助:Discord.js v14下拉菜单模板(含嵌入编辑功能)

Discord.js v14 基础下拉选择菜单模板

以下是满足需求的完整模板代码,包含默认嵌入消息、下拉菜单,以及选择选项后编辑嵌入的逻辑:

const { Client, GatewayIntentBits, EmbedBuilder, ActionRowBuilder, StringSelectMenuBuilder, SlashCommandBuilder } = require('discord.js');
const client = new Client({ intents: [GatewayIntentBits.Guilds, GatewayIntentBits.GuildMessages] });

// 机器人就绪事件
client.on('ready', () => {
    console.log(`Logged in as ${client.user.tag}!`);
    // 注册slash命令(仅需运行一次,之后可注释或移除)
    const menuCommand = new SlashCommandBuilder()
        .setName('menu')
        .setDescription('发送带下拉菜单的嵌入消息');
    
    client.application.commands.create(menuCommand);
});

// 处理slash命令交互
client.on('interactionCreate', async interaction => {
    // 处理/menu命令
    if (interaction.isChatInputCommand() && interaction.commandName === 'menu') {
        // 创建默认嵌入
        const defaultEmbed = new EmbedBuilder()
            .setTitle('选择菜单演示')
            .setDescription('请从下方下拉菜单中选择一个选项')
            .setColor('#0099ff')
            .setTimestamp();

        // 创建下拉菜单
        const selectMenu = new StringSelectMenuBuilder()
            .setCustomId('demo-select')
            .setPlaceholder('请选择一个选项')
            .addOptions(
                {
                    label: '选项1',
                    description: '这是第一个选项的描述',
                    value: 'option1'
                },
                {
                    label: '选项2',
                    description: '这是第二个选项的描述',
                    value: 'option2'
                },
                {
                    label: '选项3',
                    description: '这是第三个选项的描述',
                    value: 'option3'
                }
            );

        // 将菜单放入ActionRow
        const row = new ActionRowBuilder().addComponents(selectMenu);

        // 回复消息
        await interaction.reply({ embeds: [defaultEmbed], components: [row] });
    }

    // 处理下拉菜单交互
    if (interaction.isStringSelectMenu() && interaction.customId === 'demo-select') {
        // 获取用户选择的选项值
        const selectedValue = interaction.values[0];
        
        // 根据选择创建对应的嵌入
        let updatedEmbed;
        switch(selectedValue) {
            case 'option1':
                updatedEmbed = new EmbedBuilder()
                    .setTitle('你选择了选项1')
                    .setDescription('这是选项1对应的内容')
                    .setColor('#00ff00')
                    .setTimestamp();
                break;
            case 'option2':
                updatedEmbed = new EmbedBuilder()
                    .setTitle('你选择了选项2')
                    .setDescription('这是选项2对应的内容')
                    .setColor('#ff9900')
                    .setTimestamp();
                break;
            case 'option3':
                updatedEmbed = new EmbedBuilder()
                    .setTitle('你选择了选项3')
                    .setDescription('这是选项3对应的内容')
                    .setColor('#ff0000')
                    .setTimestamp();
                break;
            default:
                updatedEmbed = new EmbedBuilder()
                    .setTitle('未知选项')
                    .setDescription('请选择有效的选项')
                    .setColor('#999999')
                    .setTimestamp();
        }

        // 编辑原消息的嵌入内容
        await interaction.update({ embeds: [updatedEmbed] });
    }
});

// 登录机器人(替换为你的token)
client.login('YOUR_BOT_TOKEN');

代码各部分说明:

  1. 依赖导入与客户端初始化:导入Discord.js v14所需的类,初始化客户端并开启必要的意图(Guilds和GuildMessages)。
  2. 就绪事件:机器人上线后输出日志,同时注册/menu slash命令(仅需执行一次,命令注册成功后可注释该部分)。
  3. Slash命令处理:当用户发送/menu时,创建默认嵌入和下拉菜单,将菜单放入ActionRow后回复用户。
  4. 下拉菜单交互处理:监听选择菜单的交互事件,根据用户选择的选项值生成对应的嵌入,并用新嵌入更新原消息。

使用注意事项:

  • 确保已安装Discord.js v14及相关依赖:npm install discord.js@14 @discordjs/builders
  • 将代码中的YOUR_BOT_TOKEN替换为你的机器人token
  • 机器人需要拥有发送消息、嵌入消息的权限

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 20:18:24