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

Discord.js v13点击按钮删除频道功能失效该如何修复?

Discord工单系统按钮删除功能修复方案

核心错误点

  • 收集器配置错误:你为下拉菜单消息创建的组件收集器配置属性名写错,filtro不符合discord.js参数要求,正确属性名应为filter;同时该收集器仅筛选选择菜单交互,且仅绑定在初始下拉菜单消息上,工单频道内的按钮点击事件根本不会被该收集器捕获。
  • 按钮判断逻辑错误:Discord.MessageButton.customId是对按钮类的错误引用,不是实际触发交互的实例属性,无法正确匹配按钮点击事件。
  • 频道获取逻辑错误:message.guild.channel是无效属性,无法拿到当前工单频道对象。

修复代码

你可以直接替换原有逻辑,以下是完整修复后的代码:

const Discord = require("discord.js");
const { MessageSelectMenu, MessageActionRow } = require("discord.js");

module.exports = {
    name: "ticket",
    author: "Falcone",
    run: async(client, message, args) => {
        if (!message.member.permissions.has("ADMINISTRATOR")) return message.reply('你没有`ADMINISTRATOR`权限');
        await message.delete();

        let embed = new Discord.MessageEmbed()
        .setColor("RANDOM")
        .setDescription(`测试`)
        .setThumbnail(message.guild.iconURL({ dynamic: true }))
        .setAuthor(message.guild.name, message.guild.iconURL({ dynamic: true }));

        let painel = new MessageActionRow().addComponents( new MessageSelectMenu()
        .setCustomId('menu')
        .setPlaceholder('请选择工单类型')
        .addOptions([
               {
                    label: '技术支持',
                    description: '',
                    emoji: '🙋‍♂️',
                    value: '1',
               },
               {
                label: '测试',
                description: '',
                emoji: '⛔',
                value: '2',
               },
               {
                label: '其他',
                description: '',
                emoji: '🤖',
                value: '3',
               }
            ])
        );

        message.channel.send({ embeds: [embed], components: [painel] }).then(msg => {
            // 修正filter属性名
            const filter = (interaction) => interaction.isSelectMenu() && interaction.user.id === message.author.id;
            const coletor = msg.createMessageComponentCollector({ filter });
      
            coletor.on('collect', async (collected) => {
                let ticket = collected.values[0]
                await collected.deferUpdate()

                if (ticket === "1") {
                    const ticketEmbed = new Discord.MessageEmbed()
                    .setTitle('工单已创建')
                    .setDescription('您好,客服会尽快为您处理,请先描述您遇到的问题,谢谢!')
                    .setColor('GREEN')
                    .setTimestamp()

                    const delBtnRow = new MessageActionRow()
                    .addComponents(
                        new Discord.MessageButton()
                        .setCustomId('del')
                        .setLabel('🗑️ 删除工单')
                        .setStyle('DANGER'),
                    );

                    // 创建工单频道,参数名改ticketChannel避免和原msg混淆
                    message.guild.channels.create(`${collected.user.id}`, {
                        type : 'GUILD_TEXT',
                        permissionOverwrites : [
                            {
                                id : message.guild.id,
                                deny : ['VIEW_CHANNEL']
                            },
                            {
                                id : collected.user.id,
                                allow : ['VIEW_CHANNEL', 'SEND_MESSAGES', 'ATTACH_FILES']
                            }
                        ]
                    }).then(async (ticketChannel) => {
                        // 发送带按钮的消息并钉选
                        const ticketMsg = await ticketChannel.send({ embeds: [ticketEmbed], components: [delBtnRow] });
                        await ticketMsg.pin();

                        // 给当前工单的删除按钮单独加收集器
                        const btnFilter = i => i.customId === 'del' && i.user.id === collected.user.id;
                        const btnCollector = ticketMsg.createMessageComponentCollector({ filter: btnFilter });
                        btnCollector.on('collect', async (i) => {
                            await i.deferUpdate();
                            // 直接删除当前工单频道
                            await ticketChannel.delete();
                        });
                    })
                }
                // 其他工单类型逻辑可自行扩展
            })
        });
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 06:45:05