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

Annotation of /trunk/src/commands/moderation/UnmuteCommand.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: 6606 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 344 import { CommandInteraction, GuildMember, Message, Permissions, User } from 'discord.js';
21 rakin 51 import BaseCommand from '../../utils/structures/BaseCommand';
22     import DiscordClient from '../../client/Client';
23     import CommandOptions from '../../types/CommandOptions';
24     import InteractionOptions from '../../types/InteractionOptions';
25     import MessageEmbed from '../../client/MessageEmbed';
26     import getMember from '../../utils/getMember';
27    
28 rakin 86 import PunishmentType from '../../types/PunishmentType';
29    
30 rakin 102 export async function unmute(client: DiscordClient, user: GuildMember, d: User) {
31 rakin 51 try {
32 rakin 106 const role = await user.guild!.roles.fetch(client.config.props[user.guild.id].mute_role);
33 rakin 235 try {
34     await user.roles.remove(role!, 'Unmuting user');
35     }
36     catch (e) {
37     console.log(e);
38     }
39 rakin 51
40 rakin 86 const { default: Punishment } = await import('../../models/Punishment');
41    
42 rakin 102 const { getTimeouts, clearTimeoutv2 } = await import('../../utils/setTimeout');
43    
44 rakin 124 const { default: Hardmute } = await import("../../models/Hardmute");
45 rakin 227 const { default: MuteRecord } = await import("../../models/MuteRecord");
46 rakin 124
47     const hardmute = await Hardmute.findOne({
48 rakin 333 user_id: user.id,
49     guild_id: user.guild.id
50 rakin 124 });
51    
52     if (hardmute) {
53 rakin 333 for await (const roleID of hardmute.roles) {
54 rakin 124 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 rakin 333 await hardmute.delete();
67 rakin 124 }
68    
69 rakin 102 const timeouts = getTimeouts();
70    
71     for (const timeout of timeouts.values()) {
72     if (timeout.row.params) {
73     try {
74     const json = JSON.parse(timeout.row.params);
75    
76     if (json) {
77 rakin 106 if (json[1] === user.id && timeout.row.filePath.endsWith('unmute-job')) {
78 rakin 102 await clearTimeoutv2(timeout);
79     }
80     }
81     }
82     catch (e) {
83     console.log(e);
84     }
85     }
86     }
87    
88 rakin 86 await Punishment.create({
89     type: PunishmentType.UNMUTE,
90     user_id: user.id,
91 rakin 102 guild_id: user.guild!.id,
92 rakin 86 mod_id: d.id,
93     mod_tag: d.tag,
94 rakin 336 createdAt: new Date()
95 rakin 86 });
96    
97 rakin 227 const muteRecord = await MuteRecord.findOne({
98 rakin 335 user_id: user.user.id,
99     guild_id: user.guild.id
100 rakin 227 });
101    
102     if (muteRecord) {
103 rakin 335 await muteRecord.delete();
104 rakin 227 }
105    
106 rakin 159 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 rakin 51
121     await client.logger.logUnmute(user, d);
122     }
123     catch (e) {
124     console.log(e);
125     }
126     }
127    
128     export default class UnmuteCommand extends BaseCommand {
129     supportsInteractions: boolean = true;
130 rakin 203 permissions = [Permissions.FLAGS.MODERATE_MEMBERS];
131 rakin 51
132     constructor() {
133     super('unmute', 'moderation', []);
134     }
135    
136     async run(client: DiscordClient, msg: Message | CommandInteraction, options: CommandOptions | InteractionOptions) {
137     if (!options.isInteraction && typeof options.args[0] === 'undefined') {
138     await msg.reply({
139     embeds: [
140     new MessageEmbed()
141     .setColor('#f14a60')
142     .setDescription(`This command requires at least one argument.`)
143     ]
144     });
145    
146     return;
147     }
148    
149 rakin 124 if (msg instanceof CommandInteraction)
150     await msg.deferReply();
151    
152 rakin 51 let user: GuildMember;
153    
154     if (options.isInteraction) {
155     user = await <GuildMember> options.options.getMember('member');
156    
157     if (!user) {
158 rakin 124 await this.deferReply(msg, {
159 rakin 51 embeds: [
160     new MessageEmbed()
161     .setColor('#f14a60')
162     .setDescription("Invalid user given.")
163     ]
164     });
165    
166     return;
167     }
168     }
169     else {
170     try {
171     const user2 = await getMember((msg as Message), options);
172    
173     if (!user2) {
174     throw new Error('Invalid user');
175     }
176    
177     user = user2;
178     }
179     catch (e) {
180 rakin 124 await this.deferReply(msg, {
181 rakin 51 embeds: [
182     new MessageEmbed()
183     .setColor('#f14a60')
184     .setDescription(`Invalid user given.`)
185     ]
186     });
187    
188     return;
189     }
190    
191     console.log(user);
192     }
193    
194 rakin 102 await unmute(client, user, msg.member!.user as User);
195 rakin 51
196 rakin 124 await this.deferReply(msg, {
197 rakin 51 embeds: [
198     new MessageEmbed()
199     .setAuthor({
200     name: user.user.tag,
201     iconURL: user.user.displayAvatarURL(),
202     })
203     .setDescription(user.user.tag + " has been unmuted.")
204     .addFields([
205     {
206     name: "Unmuted by",
207     value: (msg.member!.user as User).tag
208     },
209     ])
210     ]
211     });
212     }
213 rakin 159 }

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26