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

discord.js工单系统如何不使用数据库检测用户是否已有已开工单

实现方案

你现有代码创建工单时已经将用户ID写入了频道topic字段,且所有工单都存放在指定父分类下,直接遍历该分类下的频道即可完成检测,无需接入数据库。

修改后的ticket分支代码

case 'ticket':
case 'Ticket':
    // 先检测用户是否已有工单
    const ticketCategory = message.guild.channels.cache.get('897771652451678268')
    // 匹配父分类下topic对应用户ID的工单频道
    const userTicket = ticketCategory.children.cache.find(channel => channel.topic === `${message.author.id}-ticket`)
    if (userTicket) {
        return message.channel.send(`你已存在未关闭的工单:<#${userTicket.id}>,请勿重复提交`)
    }

    const guild = client.guilds.cache.get('897417868633940028')
    // 注意:channels.create是异步方法,需用await接收返回的频道对象,避免后续找不到频道
    const newTicketChannel = await guild.channels.create(message.member.displayName + 's-ticket', {
        type: 'text',
        topic: message.author.id + '-ticket',
        parent: '897771652451678268',
        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: "897772395368583178",
                allow: ['SEND_MESSAGES', 'VIEW_CHANNEL'],
            },
        ],
    })

    const created = new Discord.MessageEmbed()
        .setTitle("Ticket-System")
        .setThumbnail('png')
        .setDescription(`你好,${message.member.displayName},你的工单已创建成功`)
        .setColor("GREY")
        .setTimestamp()

    message.channel.send({ embeds: [created] });
    break;

注意事项

  • 该方案依赖工单频道的topic不被随意修改,你现有的rename指令仅修改频道名称,不会影响检测逻辑
  • 如果出现机器人重启后缓存丢失导致漏检的情况,可以在检测前调用await ticketCategory.children.fetch()拉取全量频道数据
  • 单服务器工单量超过1000条后,遍历检测的性能会下降,后续可以考虑接入轻量JSON数据库比如lowdb优化
  • 若要使用上面代码里的await语法,需要将你的指令处理函数改为async声明的异步函数

内容的提问来源于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.26 16:36:03