bot: log messages in thread correctly
vi did:web:vt3e.cat
Sun, 28 Jun 2026 01:32:55 +0100
2 files changed,
31 insertions(+),
15 deletions(-)
M
apps/bot/src/feats/tickets/actions/lifecycle.ts
→
apps/bot/src/feats/tickets/actions/lifecycle.ts
@@ -227,7 +227,7 @@ .where(eq(tickets.id, ticket.id));
try { const modThread = await channel.threads.create({ - name: `${String(ticket.id).padStart(4, "0")} - mod thread`, + name: `Moderator Thread - #${String(ticket.localId).padStart(4, "0")}`, type: ChannelType.PrivateThread, autoArchiveDuration: 10080, reason: "Private discussion thread for moderators",
M
apps/bot/src/feats/tickets/listeners.ts
→
apps/bot/src/feats/tickets/listeners.ts
@@ -57,11 +57,18 @@ return list;
}; client.on(Events.MessageCreate, async (message) => { - if (message.channel.type !== ChannelType.GuildText) return; + if ( + message.channel.type !== ChannelType.GuildText && + message.channel.type !== ChannelType.PrivateThread + ) + return; if (!message.channel.name.match(/\d+$/)) return; if (!message.guild) return; - const ticket = await getTicketByChannelId(message.channel.id); + const isThread = message.channel.type === ChannelType.PrivateThread; + const channelId = isThread ? message.channel.parentId! : message.channel.id; + + const ticket = await getTicketByChannelId(channelId); if (!ticket) return; const authorDb = await upsertUser(message.author, message.guild);@@ -149,6 +156,7 @@ actorId: authorDb.id,
messageId: message.id, content: anonymisedContent, actorRole: role, + isPrivate: isThread, attachments: attachmentStatuses.map((status) => ({ id: status.uploadedUrl!, fileName: status.fileName,@@ -175,7 +183,11 @@ }
}); client.on(Events.MessageDelete, async (message) => { - if (message.channel.type !== ChannelType.GuildText) return; + if ( + message.channel.type !== ChannelType.GuildText && + message.channel.type !== ChannelType.PrivateThread + ) + return; if (!message.channel.name.match(/\d+$/)) return; if (!message.guild) return;@@ -185,23 +197,27 @@
await deleteTicketMessage(dbMessage.id); }); -client.on(Events.MessageUpdate, async (_, newMessage) => { - if (newMessage.channel.type !== ChannelType.GuildText) return; - if (!newMessage.channel.name.match(/\d+$/)) return; - if (!newMessage.guild) return; +client.on(Events.MessageUpdate, async (_, message) => { + if ( + message.channel.type !== ChannelType.GuildText && + message.channel.type !== ChannelType.PrivateThread + ) + return; + if (!message.channel.name.match(/\d+$/)) return; + if (!message.guild) return; - const dbMessage = await getTicketMessageByMessageId(newMessage.id); - if (!dbMessage) return; + const isThread = message.channel.type === ChannelType.PrivateThread; + const channelId = isThread ? message.channel.parentId! : message.channel.id; - const ticket = await getTicketByChannelId(newMessage.channel.id); + const ticket = await getTicketByChannelId(channelId); if (!ticket) return; + const dbMessage = await getTicketMessageByMessageId(message.id); + if (!dbMessage) return; + const subjectDiscordId = ticket.subjectActor?.discordId || "dummycontentwwawawa"; - const anonymisedContent = newMessage.content.replace( - new RegExp(subjectDiscordId, "g"), - "Reporter", - ); + const anonymisedContent = message.content.replace(new RegExp(subjectDiscordId, "g"), "Reporter"); await editTicketMessage(dbMessage.id, anonymisedContent); });