aboutsummaryrefslogtreecommitdiff
path: root/src/listeners/member-custom/customPurge.ts
blob: 70e3f10f17d63a771990bc0403520df12854c47f (plain)
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
import { BotListener, colors, Emitter, emojis, TanzaniteEvent, type BotClientEvents } from '#lib';
import { EmbedBuilder } from 'discord.js';

export default class CustomPurgeListener extends BotListener {
	public constructor() {
		super(TanzaniteEvent.Purge, {
			emitter: Emitter.Client,
			event: TanzaniteEvent.Purge
		});
	}

	public async exec(...[moderator, guild, channel, messages]: BotClientEvents[TanzaniteEvent.Purge]) {
		const logChannel = await guild.getLogChannel('moderation');
		if (!logChannel) return;

		const mappedMessages = messages.map((m) => ({
			id: m.id,
			author: `${m.author.tag} (${m.id})`,
			content: m.content,
			embeds: m.embeds,
			attachments: [...m.attachments.values()]
		}));
		const haste = await this.client.utils.inspectCleanRedactHaste(mappedMessages);

		const logEmbed = new EmbedBuilder()
			.setColor(colors.DarkPurple)
			.setTimestamp()
			.setFooter({ text: `${messages.size.toLocaleString()} Messages` })
			.setAuthor({ name: moderator.tag, iconURL: moderator.avatarURL({ extension: 'png', size: 4096 }) ?? undefined })
			.addFields(
				{ name: '**Action**', value: `${'Purge'}` },
				{ name: '**Moderator**', value: `${moderator} (${moderator.tag})` },
				{ name: '**Channel**', value: `<#${channel.id}> (${channel.name})` },
				{
					name: '**Messages**',
					value: `${
						haste.url ? `[haste](${haste.url})${haste.error ? `- ${haste.error}` : ''}` : `${emojis.error} ${haste.error}`
					}`
				}
			);
		return await logChannel.send({ embeds: [logEmbed] });
	}
}