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

Discord.js v13 Ticket System工单系统创建后无法关闭删除求助

解决方案

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

  1. 创建工单后没有配置关闭工单的触发入口
  2. 没有对应监听关闭触发事件的处理逻辑,来执行频道删除操作

步骤1:修改工单创建逻辑,增加关闭触发入口

这里我们用按钮作为关闭入口,修改你的现有代码如下:

case 'ticket':
case 'Ticket':
    const guild = client.guilds.cache.get('877207084251369512')
    // 创建频道是异步操作,用await拿到创建完成的频道对象,避免查找频道失败的问题
    const ticketChannel = await guild.channels.create(message.author.username + '-ticket', {
        type: 'GUILD_TEXT', // v13版本频道类型枚举调整,text需改为GUILD_TEXT
        topic: 'Ticket' + message.author.id,
        parent: '896402801428456046',
        permissionOverwrites: [
            {
                id: message.author.id,
                allow: ['SEND_MESSAGES', 'VIEW_CHANNEL', 'READ_MESSAGE_HISTORY', 'EMBED_LINKS', 'ATTACH_FILES'],
            },
            {
                id: message.guild.roles.everyone,
                deny: ['VIEW_CHANNEL'],
            },
            {
                id: "877570054710001735",
                allow: ['SEND_MESSAGES', 'VIEW_CHANNEL'],
            },
        ],
    })

    const created = new Discord.MessageEmbed()
        .setTitle("Ticket-System")
        .setDescription("您的工单已创建成功!")
        .setTimestamp()
        .setFooter('Ticket System')
        .setColor("GREY")
    message.channel.send({embeds: [created]});

    // 新建关闭按钮
    const closeBtn = new Discord.MessageButton()
        .setCustomId('close_ticket')
        .setLabel('关闭工单')
        .setStyle('DANGER')
    
    const row = new Discord.MessageActionRow().addComponents(closeBtn)

    // 给新工单频道发一条带关闭按钮的提示
    const tipEmbed = new Discord.MessageEmbed()
        .setDescription(`工单创建人:<@${message.author.id}>\n处理完毕后点击下方按钮即可关闭工单`)
        .setColor('GREEN')
    ticketChannel.send({embeds: [tipEmbed], components: [row]})

注意:你需要把当前的代码逻辑放在async函数里,否则await会报错,比如消息监听事件回调要写成client.on('messageCreate', async message => { ... })

步骤2:新增交互监听事件,处理工单关闭逻辑

在你的客户端事件监听部分新增以下代码,监听按钮点击事件:

client.on('interactionCreate', async interaction => {
    // 只处理关闭工单的按钮交互
    if (!interaction.isButton() || interaction.customId !== 'close_ticket') return;
    const channel = interaction.channel;
    
    // 校验当前频道是否为工单频道,避免误删普通频道
    if (!channel.topic?.startsWith('Ticket') || channel.parentId !== '896402801428456046') {
        return interaction.reply({content: '当前频道不是工单频道,无法关闭', ephemeral: true})
    }

    // 校验权限:仅工单创建人、管理组可关闭工单
    const ticketAuthorId = channel.topic.replace('Ticket', '')
    const isAdmin = interaction.member.roles.cache.has('877570054710001735')
    if (interaction.user.id !== ticketAuthorId && !isAdmin) {
        return interaction.reply({content: '你没有权限关闭该工单', ephemeral: true})
    }

    // 执行删除频道操作
    await interaction.reply('工单将在3秒后关闭')
    setTimeout(() => {
        channel.delete().catch(err => console.log('删除工单频道失败:', err))
    }, 3000)
})

前置要求确认

  • 你的bot已经被授予MANAGE_CHANNELS权限,否则无法删除频道
  • 你的Discord.js客户端初始化时已经开启了必要的意图:GUILDS、GUILD_MESSAGES、GUILD_MESSAGE_REACTIONS、GUILD_INTERACTIONS
  • 你已经在Discord开发者后台的bot设置里开启了Privileged Gateway Intents下的相关开关

内容的提问来源于stack exchange,提问作者I need Help

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 03:15:03