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, Message, 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'; |
26 |
import getUser from '../../utils/getUser'; |
import getUser from '../../utils/getUser'; |
|
import History from '../../automod/History'; |
|
|
import getMember from '../../utils/getMember'; |
|
|
import ms from 'ms'; |
|
27 |
import Punishment from '../../models/Punishment'; |
import Punishment from '../../models/Punishment'; |
28 |
import { fetchEmoji } from '../../utils/Emoji'; |
import { fetchEmoji } from '../../utils/Emoji'; |
29 |
import PunishmentType from '../../types/PunishmentType'; |
import PunishmentType from '../../types/PunishmentType'; |
68 |
return; |
return; |
69 |
} |
} |
70 |
|
|
71 |
const warnings = await Punishment.findAll({ |
const warnings = await Punishment.find({ |
72 |
where: { |
guild_id: msg.guild!.id, |
73 |
guild_id: msg.guild!.id, |
user_id: user.id, |
74 |
user_id: user.id, |
type: PunishmentType.WARNING |
75 |
type: PunishmentType.WARNING |
}).sort({ createdAt: -1 }); |
|
}, |
|
|
}); |
|
76 |
|
|
77 |
if (warnings.length < 1) { |
if (warnings.length < 1) { |
78 |
await msg.reply({ |
await msg.reply({ |
89 |
let str = ''; |
let str = ''; |
90 |
|
|
91 |
for await (const warning of warnings) { |
for await (const warning of warnings) { |
92 |
str += `ID: ${warning.get().id}\n`; |
str += `ID: ${warning.id}\n`; |
93 |
str += `Reason: ${warning.get().reason ?? '*No reason provided*'}\n`; |
str += `Reason: ${warning.reason ?? '*No reason provided*'}\n`; |
94 |
|
|
95 |
try { |
try { |
96 |
str += `Warned by: ${(await client.users.fetch(warning.get().mod_id)).tag}\n`; |
str += `Warned by: ${(await client.users.fetch(warning.mod_id)).tag}\n`; |
97 |
} |
} |
98 |
catch (e) { |
catch (e) { |
99 |
str += `Warned by: ${warning.get().mod_id}\n`; |
str += `Warned by: ${warning.mod_id}\n`; |
100 |
} |
} |
101 |
|
|
102 |
str += `Date: ${warning.get().createdAt}\n\n`; |
str += `Date: ${warning.createdAt}\n\n`; |
103 |
} |
} |
104 |
|
|
105 |
await msg.reply({ |
await msg.reply({ |
147 |
return; |
return; |
148 |
} |
} |
149 |
|
|
150 |
const warning = await Punishment.destroy({ |
const warning = await Punishment.deleteOne({ |
151 |
where: { |
guild_id: msg.guild!.id, |
152 |
guild_id: msg.guild!.id, |
user_id: user.id, |
153 |
user_id: user.id, |
type: PunishmentType.WARNING |
|
type: PunishmentType.WARNING |
|
|
}, |
|
154 |
}); |
}); |
155 |
|
|
156 |
if (warning < 1) { |
if (warning.deletedCount < 1) { |
157 |
await msg.reply({ |
await msg.reply({ |
158 |
embeds: [ |
embeds: [ |
159 |
new MessageEmbed() |
new MessageEmbed() |
187 |
return; |
return; |
188 |
} |
} |
189 |
|
|
190 |
const id = options.isInteraction ? options.options.getNumber('id') : parseInt(options.args[0]); |
const id = options.isInteraction ? options.options.getString('id') : parseInt(options.args[0]); |
191 |
|
|
192 |
const warning = await Punishment.findOne({ |
const warning = await Punishment.findOne({ |
193 |
where: { |
id, |
194 |
id, |
guild_id: msg.guild!.id, |
195 |
guild_id: msg.guild!.id, |
type: PunishmentType.WARNING |
|
type: PunishmentType.WARNING |
|
|
}, |
|
|
order: [ |
|
|
['id', 'DESC'] |
|
|
], |
|
196 |
}); |
}); |
197 |
|
|
198 |
if (!warning) { |
if (!warning) { |
207 |
return; |
return; |
208 |
} |
} |
209 |
|
|
210 |
await warning.destroy(); |
await warning.delete(); |
211 |
|
|
212 |
await msg.reply({ |
await msg.reply({ |
213 |
embeds: [ |
embeds: [ |
231 |
return; |
return; |
232 |
} |
} |
233 |
|
|
234 |
const id = options.isInteraction ? options.options.getNumber('id') : parseInt(options.args[0]); |
const id = options.isInteraction ? options.options.getString('id') : parseInt(options.args[0]); |
235 |
|
|
236 |
const warning = await Punishment.findOne({ |
const warning = await Punishment.findOne({ |
237 |
where: { |
id, |
238 |
id, |
guild_id: msg.guild!.id, |
239 |
guild_id: msg.guild!.id, |
type: PunishmentType.WARNING |
|
type: PunishmentType.WARNING |
|
|
}, |
|
|
order: [ |
|
|
['id', 'DESC'] |
|
|
], |
|
240 |
}); |
}); |
241 |
|
|
242 |
if (!warning) { |
if (!warning) { |