all repos — stealth-developers @ 333b26bcc0bdb9bb943494889bd8ce8e497e3c64

bot: log messages in thread correctly
vi did:web:vt3e.cat
Sun, 28 Jun 2026 01:32:55 +0100
commit

333b26bcc0bdb9bb943494889bd8ce8e497e3c64

parent

109863efd2a45dd592cbb2de78d17e0a5a7b71be

2 files changed, 31 insertions(+), 15 deletions(-)

jump to
M apps/bot/src/feats/tickets/actions/lifecycle.tsapps/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.tsapps/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); });