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

Discord.js v13 如何修复下拉菜单触发时多条父消息同时被编辑问题

问题原因

你的代码存在两个核心问题:

  • 每次执行斜杠命令时,你都在命令回调内新增了一个全局的interactionCreate事件监听器,旧的监听器不会被销毁,触发下拉菜单时所有历史注册的监听器都会同时执行
  • 每个监听器都闭包引用了对应斜杠命令触发时的interaction对象,执行interaction.editReply时就会编辑对应历史命令的回复消息,导致所有历史消息被同步修改

修复方案

全局仅注册一次interactionCreate事件监听,触发下拉菜单时直接使用菜单交互实例自带的update方法,该方法默认只会编辑当前触发菜单的所属父消息,不会影响其他历史消息。

修改后的完整代码如下:

斜杠命令回调内代码

const row = new MessageActionRow()
    .addComponents(
        new MessageSelectMenu()
            .setCustomId('letter_select')
            .setPlaceholder('Letter')
            .addOptions([
                {
                    label: 'A',
                    value: 'A',
                },
                {
                     label: 'B',
                     value: 'B',
                },
                {
                    label: 'C',
                    value: 'C',
                },
                {
                    label: 'D',
                    value: 'D',
                },
            ]),
    );
await interaction.reply({content: "Select a letter!", components: [row]})

全局事件监听代码(放在斜杠命令回调外,仅执行一次)

client.on("interactionCreate", async menuInteraction => {
    if (!menuInteraction.isSelectMenu()) return;
    // 过滤非当前业务的下拉菜单交互
    if (menuInteraction.customId !== 'letter_select') return;
                        
    // 直接更新当前触发菜单的父消息
    await menuInteraction.update({
        content: menuInteraction.values[0]
    });              
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 04:18:05