all repos — stealth-developers @ 13b0369f9ad6065bdfc782fd9e3938348c651ece

src/events/messageUpdate.ts (view raw)

 1
 2
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
import { db, ticketMessages, tickets } from "@/database";
import { loggers } from "@/utils/logging";
import { type Client, Events, type Message } from "discord.js";
import { and, eq } from "drizzle-orm";

const logger = loggers.events.child({ name: "messageUpdate" });

export default {
	event: Events.MessageUpdate,
	async execute(client: Client, oldMessage: Message, newMessage: Message) {
		if (!client.user || newMessage.author?.bot) return;
		if (oldMessage.content === newMessage.content) return;

		const ticket = db
			.select()
			.from(tickets)
			.where(
				and(
					eq(tickets.channelId, newMessage.channelId),
					eq(tickets.guildId, newMessage.guildId ?? ""),
				),
			)
			.get();

		if (!ticket) return;

		try {
			let anonymisedContent = newMessage.content.replace(
				new RegExp(ticket.authorId, "g"),
				"Reporter",
			);

			for (const [index, userId] of (ticket.addedUsers || []).entries()) {
				anonymisedContent = anonymisedContent.replace(
					new RegExp(userId, "g"),
					`Guest_${index + 1}`,
				);
			}

			await db
				.update(ticketMessages)
				.set({ content: anonymisedContent })
				.where(eq(ticketMessages.messageId, newMessage.id))
				.returning();
		} catch (error) {
			logger.error(error, "Failed to update ticket message");
		}
	},
};