求助: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');
代码各部分说明:
- 依赖导入与客户端初始化:导入Discord.js v14所需的类,初始化客户端并开启必要的意图(Guilds和GuildMessages)。
- 就绪事件:机器人上线后输出日志,同时注册
/menuslash命令(仅需执行一次,命令注册成功后可注释该部分)。 - Slash命令处理:当用户发送
/menu时,创建默认嵌入和下拉菜单,将菜单放入ActionRow后回复用户。 - 下拉菜单交互处理:监听选择菜单的交互事件,根据用户选择的选项值生成对应的嵌入,并用新嵌入更新原消息。
使用注意事项:
- 确保已安装Discord.js v14及相关依赖:
npm install discord.js@14 @discordjs/builders - 将代码中的
YOUR_BOT_TOKEN替换为你的机器人token - 机器人需要拥有发送消息、嵌入消息的权限
内容的提问来源于stack exchange,提问作者Sreyas Menon
相关产品推荐
相关产品推荐

