/[sudobot]/trunk/src/commands/moderation/UnmuteCommand.ts
ViewVC logotype

Diff of /trunk/src/commands/moderation/UnmuteCommand.ts

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

revision 86 by rakin, Mon Jul 29 17:28:32 2024 UTC revision 400 by rakin, Mon Jul 29 17:30:02 2024 UTC
# Line 1  Line 1 
1  import { BanOptions, CommandInteraction, Guild, GuildMember, Interaction, Message, User } from 'discord.js';  /**
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 { CommandInteraction, GuildMember, Message, Permissions, User } from 'discord.js';
21  import BaseCommand from '../../utils/structures/BaseCommand';  import BaseCommand from '../../utils/structures/BaseCommand';
22  import DiscordClient from '../../client/Client';  import DiscordClient from '../../client/Client';
23  import CommandOptions from '../../types/CommandOptions';  import CommandOptions from '../../types/CommandOptions';
24  import InteractionOptions from '../../types/InteractionOptions';  import InteractionOptions from '../../types/InteractionOptions';
25  import MessageEmbed from '../../client/MessageEmbed';  import MessageEmbed from '../../client/MessageEmbed';
 import getUser from '../../utils/getUser';  
 import History from '../../automod/History';  
26  import getMember from '../../utils/getMember';  import getMember from '../../utils/getMember';
 import ms from 'ms';  
27    
28  import PunishmentType from '../../types/PunishmentType';  import PunishmentType from '../../types/PunishmentType';
29    
30  export async function unmute(client: DiscordClient, user: GuildMember, msg: Message | CommandInteraction, d: User) {  export async function unmute(client: DiscordClient, user: GuildMember, d: User) {
31      try {                  try {            
32          await History.create(user.id, msg.guild!, 'unmute', msg.member!.user.id, null);          const role = await user.guild!.roles.fetch(client.config.props[user.guild.id].mute_role);
33            try {
34          const role = await msg.guild!.roles.fetch(client.config.get('mute_role'));              await user.roles.remove(role!, 'Unmuting user');
35          await user.roles.remove(role!);              console.log("did that");
36            }
37            catch (e) {
38                console.log(e);
39            }
40    
41          const { default: Punishment } = await import('../../models/Punishment');          const { default: Punishment } = await import('../../models/Punishment');
42    
43            const { getTimeouts, clearTimeoutv2 } = await import('../../utils/setTimeout');
44    
45            const { default: Hardmute } = await import("../../models/Hardmute");
46            const { default: MuteRecord } = await import("../../models/MuteRecord");
47    
48            const hardmute = await Hardmute.findOne({
49                user_id: user.id,
50                guild_id: user.guild.id
51            });
52    
53            if (hardmute) {
54                for await (const roleID of hardmute.roles) {
55                    try {
56                        const role = await user.guild.roles.fetch(roleID);
57    
58                        if (role) {
59                            await user.roles.add(role, 'Adding the roles which were removed due to hardmute');
60                        }
61                    }
62                    catch (e) {
63                        console.log(e);                    
64                    }
65                }
66    
67                await hardmute.delete();
68            }
69    
70            const timeouts = getTimeouts();
71            
72            for (const timeout of timeouts.values()) {
73                if (timeout.row.params) {
74                    try {
75                        const json = JSON.parse(timeout.row.params);
76    
77                        if (json) {
78                            if (json[1] === user.id && timeout.row.filePath.endsWith('unmute-job')) {
79                                await clearTimeoutv2(timeout);
80                            }
81                        }
82                    }
83                    catch (e) {
84                        console.log(e);                    
85                    }
86                }
87            }
88    
89          await Punishment.create({          await Punishment.create({
90              type: PunishmentType.UNMUTE,              type: PunishmentType.UNMUTE,
91              user_id: user.id,              user_id: user.id,
92              guild_id: msg.guild!.id,              guild_id: user.guild!.id,
93              mod_id: d.id,              mod_id: d.id,
94              mod_tag: d.tag,              mod_tag: d.tag,
95                createdAt: new Date()
96          });          });
97    
98          await user.send({          const muteRecord = await MuteRecord.findOne({
99              embeds: [              user_id: user.user.id,
100                  new MessageEmbed()              guild_id: user.guild.id
                 .setAuthor({  
                     iconURL: <string> msg.guild!.iconURL(),  
                     name: `\tYou have been unmuted in ${msg.guild!.name}`  
                 })  
             ]  
101          });          });
102    
103            if (muteRecord) {
104                await muteRecord.delete();
105            }
106    
107            try {
108                await user.send({
109                    embeds: [
110                        new MessageEmbed()
111                        .setAuthor({
112                            iconURL: <string> user.guild!.iconURL(),
113                            name: `\tYou have been unmuted in ${user.guild!.name}`
114                        })
115                    ]
116                });
117            }
118            catch (e) {
119                console.log(e);
120            }
121    
122          await client.logger.logUnmute(user, d);          await client.logger.logUnmute(user, d);
123      }      }
124      catch (e) {      catch (e) {
# Line 47  export async function unmute(client: Dis Line 128  export async function unmute(client: Dis
128    
129  export default class UnmuteCommand extends BaseCommand {  export default class UnmuteCommand extends BaseCommand {
130      supportsInteractions: boolean = true;      supportsInteractions: boolean = true;
131        permissions = [Permissions.FLAGS.MODERATE_MEMBERS];
132    
133      constructor() {      constructor() {
134          super('unmute', 'moderation', []);          super('unmute', 'moderation', []);
# Line 65  export default class UnmuteCommand exten Line 147  export default class UnmuteCommand exten
147              return;              return;
148          }          }
149    
150            if (msg instanceof CommandInteraction)  
151                await msg.deferReply();
152    
153          let user: GuildMember;          let user: GuildMember;
154    
155          if (options.isInteraction) {          if (options.isInteraction) {
156              user = await <GuildMember> options.options.getMember('member');              user = await <GuildMember> options.options.getMember('member');
157    
158              if (!user) {              if (!user) {
159                  await msg.reply({                  await this.deferReply(msg, {
160                      embeds: [                      embeds: [
161                          new MessageEmbed()                          new MessageEmbed()
162                          .setColor('#f14a60')                          .setColor('#f14a60')
# Line 93  export default class UnmuteCommand exten Line 178  export default class UnmuteCommand exten
178                  user = user2;                  user = user2;
179              }              }
180              catch (e) {              catch (e) {
181                  await msg.reply({                  await this.deferReply(msg, {
182                      embeds: [                      embeds: [
183                          new MessageEmbed()                          new MessageEmbed()
184                          .setColor('#f14a60')                          .setColor('#f14a60')
# Line 107  export default class UnmuteCommand exten Line 192  export default class UnmuteCommand exten
192              console.log(user);              console.log(user);
193          }          }
194    
195          await unmute(client, user, msg, msg.member!.user as User);          await unmute(client, user, msg.member!.user as User);
196    
197          await msg.reply({          await this.deferReply(msg, {
198              embeds: [              embeds: [
199                  new MessageEmbed()                  new MessageEmbed()
200                  .setAuthor({                  .setAuthor({
# Line 126  export default class UnmuteCommand exten Line 211  export default class UnmuteCommand exten
211              ]              ]
212          });          });
213      }      }
 }  
214    }

Legend:
Removed from v.86  
changed lines
  Added in v.400

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26