From c0bea3d32dfcbfa627a723ff8f8395a6e3aced31 Mon Sep 17 00:00:00 2001 From: Isaac Date: Tue, 18 Mar 2025 00:54:53 +0000 Subject: [PATCH] fix: sync and close error handling --- src/lib/sync.js | 7 ++++++- src/lib/tickets/manager.js | 36 ++++++++++++++++++++++-------------- 2 files changed, 28 insertions(+), 15 deletions(-) diff --git a/src/lib/sync.js b/src/lib/sync.js index aa5498e..52404e9 100644 --- a/src/lib/sync.js +++ b/src/lib/sync.js @@ -43,7 +43,12 @@ module.exports = async client => { const guild = client.guilds.cache.get(ticket.guildId); if (guild && guild.available && !client.channels.cache.has(ticket.id)) { deleted += 0; - await client.tickets.finallyClose(ticket.id, { reason: 'channel deleted' }); + try { + await client.tickets.finallyClose(ticket.id, { reason: 'channel deleted' }); + } catch (error) { + client.log.warn('Failed to close ticket', ticket.id); + client.log.error(error); + } } } diff --git a/src/lib/tickets/manager.js b/src/lib/tickets/manager.js index e7565af..b682857 100644 --- a/src/lib/tickets/manager.js +++ b/src/lib/tickets/manager.js @@ -1216,11 +1216,8 @@ module.exports = class TicketManager { closedBy = null, reason = null, }) { - if (this.$stale.has(ticketId)) this.$stale.delete(ticketId); let ticket = await this.getTicket(ticketId); const getMessage = this.client.i18n.getLocale(ticket.guild.locale); - this.$count.categories[ticket.categoryId].total -= 1; - this.$count.categories[ticket.categoryId][ticket.createdById] -= 1; const { _count: { archivedMessages } } = await this.client.prisma.ticket.findUnique({ select: { _count: { select: { archivedMessages: true } } }, @@ -1248,15 +1245,26 @@ module.exports = class TicketManager { data.pinnedMessageIds = [...pinned.keys()]; } - ticket = await this.client.prisma.ticket.update({ - data, - include: { - category: true, - feedback: true, - guild: true, - }, - where: { id: ticket.id }, - }); + try { + ticket = await this.client.prisma.ticket.update({ + data, + include: { + category: true, + feedback: true, + guild: true, + }, + where: { id: ticket.id }, + }); + if (this.$stale.has(ticketId)) this.$stale.delete(ticketId); + this.$count.categories[ticket.categoryId] ??= {}; + this.$count.categories[ticket.categoryId].total -= 1; + this.$count.categories[ticket.categoryId][ticket.createdById] -= 1; + } catch (error) { + this.client.log.error(error); + return; + } + + const guild = this.client.guilds.cache.get(ticket.guildId); if (channel?.deletable) { const member = closedBy ? channel.guild.members.cache.get(closedBy) : null; @@ -1329,7 +1337,7 @@ module.exports = class TicketManager { }; const dmEmbed = new ExtendedEmbedBuilder({ - iconURL: channel.guild.iconURL(), + iconURL: guild.iconURL(), text: ticket.guild.footer, }) .setColor(ticket.guild.primaryColour) @@ -1344,7 +1352,7 @@ module.exports = class TicketManager { if (reason) dmEmbed.addFields(fields.reason); try { - const creator = channel?.guild.members.cache.get(ticket.createdById); + const creator = guild.members.cache.get(ticket.createdById); if (creator) { await creator.send({ components,