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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 11:50:20