Discord.js v14:下拉菜单交互后重置,无法保留选中状态求助
Discord.js 14.6.0 下拉菜单交互后重置问题
问题描述
开发下拉菜单功能时,交互菜单能正常编辑消息,但每次交互后下拉菜单会重置为默认状态。
期望效果:编辑原消息的同时,下拉菜单保留选中项的勾选状态
当前效果:原消息编辑成功,但下拉菜单被重置
目前只能实现二选一:要么回复新消息时菜单状态正常,要么更新原机器人消息但菜单重置。
现有代码
index.js
client.on('interactionCreate', async interaction => { // ... Command Handler here })
test.js
const row = new Discord.ActionRowBuilder() .addComponents(new Discord.SelectMenuBuilder() .setCustomId('test') .setPlaceholder('test 1') .setMinValues(1) .setMaxValues(1) .addOptions( { label: 'test 1', value: 'first_option' }, { label: 'test 2', value: 'second_option' } )) const testEmbed = new Discord.EmbedBuilder() .setTitle('Testing') interaction.reply({ embeds: [testEmbed], components: [row] })
selectMenu.js
const Embed = new Discord.EmbedBuilder() .setTitle('Testing 2') interaction.update({ embeds: [Embed] })
解决方案
问题核心是interaction.update()时未传入保留选中状态的下拉菜单组件。仅更新embed时,Discord会重置原有组件,需重新构建包含选中状态的菜单并一同传入。
修改selectMenu.js代码如下:
// 获取用户选中的选项值(单选取第一个元素) const selectedValue = interaction.values[0]; // 重新构建下拉菜单,为选中项设置default属性 const updatedRow = new Discord.ActionRowBuilder() .addComponents(new Discord.SelectMenuBuilder() .setCustomId('test') .setPlaceholder('test 1') .setMinValues(1) .setMaxValues(1) .addOptions( { label: 'test 1', value: 'first_option', default: selectedValue === 'first_option' }, { label: 'test 2', value: 'second_option', default: selectedValue === 'second_option' } )) const Embed = new Discord.EmbedBuilder() .setTitle('Testing 2') // 更新消息时同时传入新embed和带选中状态的组件 interaction.update({ embeds: [Embed], components: [updatedRow] })
关键说明
- 通过
interaction.values获取用户选中的选项值,单选场景取values[0] - 为选中的菜单选项添加
default: true属性,Discord会渲染为选中状态 - 必须在
interaction.update()中传入components参数,否则原有组件会被清除
内容的提问来源于stack exchange,提问作者Bobosky
相关产品推荐
相关产品推荐

