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

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

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 65 by rakin, Mon Jul 29 17:28:27 2024 UTC revision 393 by rakin, Mon Jul 29 17:29:59 2024 UTC
# Line 1  Line 1 
1    /**
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  import BaseEvent from '../../utils/structures/BaseEvent';  import BaseEvent from '../../utils/structures/BaseEvent';
21  import DiscordClient from '../../client/Client';  import DiscordClient from '../../client/Client';
22  import { GuildMember } from 'discord.js';  import { GuildMember } from 'discord.js';
23    import UnverifiedMember from '../../models/UnverifiedMember';
24    import Punishment from '../../models/Punishment';
25    import PunishmentType from '../../types/PunishmentType';
26    import MessageEmbed from '../../client/MessageEmbed';
27    
28  export default class GuildMemberRemoveEvent extends BaseEvent {  export default class GuildMemberRemoveEvent extends BaseEvent {
29      constructor() {      constructor() {
# Line 8  export default class GuildMemberRemoveEv Line 31  export default class GuildMemberRemoveEv
31      }      }
32            
33      async run(client: DiscordClient, member: GuildMember) {      async run(client: DiscordClient, member: GuildMember) {
34            if (member.user.id === client.user!.id)
35                return;
36    
37          await client.logger.logLeft(member);          await client.logger.logLeft(member);
38    
39            if (member.user.bot)
40                return;
41    
42            const logs = (await member.guild.fetchAuditLogs({
43                limit: 1,
44                type: 'MEMBER_KICK',
45            })).entries.first();
46    
47            if (logs && logs.target?.id === member.id && logs.createdAt >= (member.joinedAt ?? 0)) {
48                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            
89          await client.autoClear.start(member, member.guild);          await client.autoClear.start(member, member.guild);
90    
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            
104            await client.automute.onMemberLeave(member);
105      }      }
106  }  }

Legend:
Removed from v.65  
changed lines
  Added in v.393

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26