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

如何为discord.js v13的下拉选择菜单设置默认选中值

解决方案

你使用的是Discord.js v13版本的MessageSelectMenu组件,可根据你的需求选择以下两种设置方式:

1. 设置未选择时的占位提示文字

如果只是需要下拉菜单未激活选择时显示默认提示文本,直接在初始化下拉菜单时调用setPlaceholder方法即可,同时注意必须给组件设置customId否则会报错,修改代码如下:

const select = new Discord.MessageSelectMenu()
    .setCustomId('help-category-select') // 必填,自定义ID可任意设置
    .setPlaceholder('请选择命令分类') // 占位提示文字

2. 设置默认预先选中某个分类选项

如果需要页面加载时就默认选中某一个已有的分类选项,同时加载对应分类的命令列表,需要先提取有效分类列表,再调用setDefaultValues方法传入对应选项的value值,修改后完整代码如下:

// 先提取所有有效分类
const validCategories = []
const select = new Discord.MessageSelectMenu()
    .setCustomId('help-category-select')

for (const category of categoriesFolders) {
    const len = category.length;
    if (fs.readdirSync(`./commands/${category}`).length < 1) {continue};
    const cateValue = category.substring(0, len - '-commands'.length)
    validCategories.push(cateValue)
    select.addOptions([{
        label: uppercaseFirst(cateValue),
        value: cateValue
    }]);
}

// 设置默认选中第一个有效分类
select.setDefaultValues([validCategories[0]])

// 初始化embed直接加载默认分类的命令内容,不用显示无分类提示
const helpEmbed = new Discord.MessageEmbed()
    .setColor(696969)
const defaultFls = fs.readdirSync(`./commands/${validCategories[0]}-commands`).filter(file => file.endsWith('.js'));
for (const cmd of defaultFls) {
    const command = require(`../${validCategories[0]}-commands/${cmd}`)
    helpEmbed.addField(command.name, command.description);
}

const row = new Discord.MessageActionRow().addComponents(select);

const filter = (interaction) =>
    interaction.isSelectMenu() &&
    interaction.user.id === message.author.id;

const collector = message.channel.createMessageComponentCollector({
    filter
})

collector.on('collect', async(collected) => {
    const value = collected.values[0];
    // 选择后更新默认选中值
    select.setDefaultValues([value])
    const embed = new Discord.MessageEmbed()
        .setColor(696969)

    const fls = fs.readdirSync(`./commands/${value}-commands`).filter(file => file.endsWith('.js'));
    for (const cmd of fls) {
        const command = require(`../${value}-commands/${cmd}`)
        embed.addField(command.name, command.description);
    }
    // 更新消息同时更新组件的默认选中状态
    collected.message.edit({ embeds: [embed], components: [row] }).catch(() => {});
    await collected.deferUpdate();
})

message.channel.send({ embeds: [helpEmbed], components: [row] });

注意:setDefaultValues传入的数组长度不能超过你设置的下拉菜单maxValues属性值,默认maxValues为1,所以仅需传入单个值即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 15:06:04