A powerful and extendable Discord bot, with it's own module system :3
thevoid.cafe/projects/voidy
1import { EmbedBuilder, Events, type GuildMember, type TextChannel } from "discord.js";
2import { Event } from "@voidy/framework";
3import type { IGuildConfig } from "../schemas/GuildConfig";
4
5export default new Event({
6 id: "guildMemberRemove",
7 name: Events.GuildMemberRemove,
8
9 execute: async ({ client }, member: unknown) => {
10 const m = member as GuildMember;
11
12 const cache = client.data.get("guildConfig") as Map<string, IGuildConfig> | undefined;
13 const config = cache?.get(m.guild.id);
14 if (!config?.logging?.channelId) return;
15
16 const logChannel = m.guild.channels.cache.get(config.logging.channelId) as
17 | TextChannel
18 | undefined;
19
20 if (!logChannel) return;
21
22 const embed = new EmbedBuilder()
23 .setColor(0x95a5a6)
24 .setAuthor({
25 name: `${m.user.tag} left`,
26 iconURL: m.user.displayAvatarURL(),
27 })
28 .addFields(
29 { name: "User", value: `${m}`, inline: true },
30 {
31 name: "Joined",
32 value: m.joinedTimestamp
33 ? `<t:${Math.floor(m.joinedTimestamp / 1000)}:R>`
34 : "Unknown",
35 inline: true,
36 },
37 )
38 .setFooter({ text: `ID: ${m.id}` })
39 .setTimestamp();
40
41 await logChannel.send({ embeds: [embed] });
42 },
43});