/[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 400 - (hide annotations)
Mon Jul 29 17:30:02 2024 UTC (8 months, 2 weeks ago) by rakin
File MIME type: application/typescript
File size: 6643 byte(s)
feat(automod): add profile filter
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 rakin 400 console.log("did that");
36 rakin 235 }
37     catch (e) {
38     console.log(e);
39     }
40 rakin 51
41 rakin 86 const { default: Punishment } = await import('../../models/Punishment');
42    
43 rakin 102 const { getTimeouts, clearTimeoutv2 } = await import('../../utils/setTimeout');
44    
45 rakin 124 const { default: Hardmute } = await import("../../models/Hardmute");
46 rakin 227 const { default: MuteRecord } = await import("../../models/MuteRecord");
47 rakin 124
48     const hardmute = await Hardmute.findOne({
49 rakin 333 user_id: user.id,
50     guild_id: user.guild.id
51 rakin 124 });
52    
53     if (hardmute) {
54 rakin 333 for await (const roleID of hardmute.roles) {
55 rakin 124 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 rakin 333 await hardmute.delete();
68 rakin 124 }
69    
70 rakin 102 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 rakin 106 if (json[1] === user.id && timeout.row.filePath.endsWith('unmute-job')) {
79 rakin 102 await clearTimeoutv2(timeout);
80     }
81     }
82     }
83     catch (e) {
84     console.log(e);
85     }
86     }
87     }
88    
89 rakin 86 await Punishment.create({
90     type: PunishmentType.UNMUTE,
91     user_id: user.id,
92 rakin 102 guild_id: user.guild!.id,
93 rakin 86 mod_id: d.id,
94     mod_tag: d.tag,
95 rakin 336 createdAt: new Date()
96 rakin 86 });
97    
98 rakin 227 const muteRecord = await MuteRecord.findOne({
99 rakin 335 user_id: user.user.id,
100     guild_id: user.guild.id
101 rakin 227 });
102    
103     if (muteRecord) {
104 rakin 335 await muteRecord.delete();
105 rakin 227 }
106    
107 rakin 159 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 rakin 51
122     await client.logger.logUnmute(user, d);
123     }
124     catch (e) {
125     console.log(e);
126     }
127     }
128    
129     export default class UnmuteCommand extends BaseCommand {
130     supportsInteractions: boolean = true;
131 rakin 203 permissions = [Permissions.FLAGS.MODERATE_MEMBERS];
132 rakin 51
133     constructor() {
134     super('unmute', 'moderation', []);
135     }
136    
137     async run(client: DiscordClient, msg: Message | CommandInteraction, options: CommandOptions | InteractionOptions) {
138     if (!options.isInteraction && typeof options.args[0] === 'undefined') {
139     await msg.reply({
140     embeds: [
141     new MessageEmbed()
142     .setColor('#f14a60')
143     .setDescription(`This command requires at least one argument.`)
144     ]
145     });
146    
147     return;
148     }
149    
150 rakin 124 if (msg instanceof CommandInteraction)
151     await msg.deferReply();
152    
153 rakin 51 let user: GuildMember;
154    
155     if (options.isInteraction) {
156     user = await <GuildMember> options.options.getMember('member');
157    
158     if (!user) {
159 rakin 124 await this.deferReply(msg, {
160 rakin 51 embeds: [
161     new MessageEmbed()
162     .setColor('#f14a60')
163     .setDescription("Invalid user given.")
164     ]
165     });
166    
167     return;
168     }
169     }
170     else {
171     try {
172     const user2 = await getMember((msg as Message), options);
173    
174     if (!user2) {
175     throw new Error('Invalid user');
176     }
177    
178     user = user2;
179     }
180     catch (e) {
181 rakin 124 await this.deferReply(msg, {
182 rakin 51 embeds: [
183     new MessageEmbed()
184     .setColor('#f14a60')
185     .setDescription(`Invalid user given.`)
186     ]
187     });
188    
189     return;
190     }
191    
192     console.log(user);
193     }
194    
195 rakin 102 await unmute(client, user, msg.member!.user as User);
196 rakin 51
197 rakin 124 await this.deferReply(msg, {
198 rakin 51 embeds: [
199     new MessageEmbed()
200     .setAuthor({
201     name: user.user.tag,
202     iconURL: user.user.displayAvatarURL(),
203     })
204     .setDescription(user.user.tag + " has been unmuted.")
205     .addFields([
206     {
207     name: "Unmuted by",
208     value: (msg.member!.user as User).tag
209     },
210     ])
211     ]
212     });
213     }
214 rakin 159 }

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26