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

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

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26