/[sudobot]/trunk/src/events/guildMember/GuildMemberRemoveEvent.ts
ViewVC logotype

Annotation of /trunk/src/events/guildMember/GuildMemberRemoveEvent.ts

Parent Directory Parent Directory | Revision Log Revision Log


Revision 393 - (hide annotations)
Mon Jul 29 17:29:59 2024 UTC (8 months, 2 weeks ago) by rakin
File MIME type: application/typescript
File size: 3844 byte(s)
style: add license comments (#77)

* style: add license commits

* fix: shebang errors
1 rakin 393 /**
2     * This file is part of SudoBot.
3     *
4     * Copyright (C) 2021-2022 OSN Inc.
5     *
6     * SudoBot is free software; you can redistribute it and/or modify it
7     * under the terms of the GNU Affero General Public License as published by
8     * the Free Software Foundation, either version 3 of the License, or
9     * (at your option) any later version.
10     *
11     * SudoBot is distributed in the hope that it will be useful, but
12     * WITHOUT ANY WARRANTY; without even the implied warranty of
13     * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14     * GNU Affero General Public License for more details.
15     *
16     * You should have received a copy of the GNU Affero General Public License
17     * along with SudoBot. If not, see <https://www.gnu.org/licenses/>.
18     */
19    
20 rakin 51 import BaseEvent from '../../utils/structures/BaseEvent';
21     import DiscordClient from '../../client/Client';
22     import { GuildMember } from 'discord.js';
23 rakin 127 import UnverifiedMember from '../../models/UnverifiedMember';
24 rakin 214 import Punishment from '../../models/Punishment';
25     import PunishmentType from '../../types/PunishmentType';
26     import MessageEmbed from '../../client/MessageEmbed';
27 rakin 51
28     export default class GuildMemberRemoveEvent extends BaseEvent {
29     constructor() {
30     super('guildMemberRemove');
31     }
32    
33     async run(client: DiscordClient, member: GuildMember) {
34 rakin 77 if (member.user.id === client.user!.id)
35     return;
36    
37 rakin 51 await client.logger.logLeft(member);
38 rakin 209
39     if (member.user.bot)
40     return;
41 rakin 214
42     const logs = (await member.guild.fetchAuditLogs({
43     limit: 1,
44     type: 'MEMBER_KICK',
45     })).entries.first();
46    
47 rakin 227 if (logs && logs.target?.id === member.id && logs.createdAt >= (member.joinedAt ?? 0)) {
48 rakin 214 console.log(logs?.executor);
49    
50     await Punishment.create({
51     type: PunishmentType.KICK,
52     user_id: member.user.id,
53     guild_id: member.guild!.id,
54     mod_id: logs?.executor?.id ?? client.user!.id,
55     mod_tag: logs?.executor?.tag ?? 'Unknown',
56     reason: logs.reason ?? undefined
57     });
58    
59     client.logger.log(member.guild, async channel => {
60     await channel.send({
61     embeds: [
62     new MessageEmbed({
63     author: {
64     name: member.user.tag,
65     iconURL: member.user.displayAvatarURL(),
66     },
67     title: 'Member Kicked',
68     description: 'This user has left the server, probably due to a kick.',
69     fields: [
70     {
71     name: 'Kicked by',
72     value: logs?.executor?.tag ?? 'Unknown'
73     },
74     {
75     name: 'Reason',
76     value: logs?.reason ?? '*No reason provided*'
77     }
78     ],
79     footer: {
80     text: 'Kicked'
81     }
82     })
83     .setTimestamp()
84     ]
85     });
86     });
87     }
88 rakin 209
89 rakin 65 await client.autoClear.start(member, member.guild);
90 rakin 127
91     const verificationData = await UnverifiedMember.findOne({
92     where: {
93     guild_id: member.guild.id,
94     user_id: member.id,
95     status: 'pending'
96     }
97     });
98    
99     if (verificationData) {
100     await verificationData.set('status', 'canceled');
101     await verificationData.save();
102     }
103 rakin 227
104     await client.automute.onMemberLeave(member);
105 rakin 51 }
106     }

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26