const { MessageEmbed, Permissions } = require('discord.
js');
const fs = require('fs').promises;
const MUTE_FILE = "mute_roles.json";
class Moderation {
constructor(client) {
[Link] = client;
[Link] = new Map();
[Link]();
}
async loadData() {
try {
[Link] = new Map([Link]([Link](await
[Link](MUTE_FILE, 'utf-8'))));
} catch (error) {
[Link]('Error loading mute roles:', error);
}
}
async saveData() {
try {
await [Link](MUTE_FILE,
[Link]([Link]([Link])));
} catch (error) {
[Link]('Error saving mute roles:', error);
}
}
async ban(message, args) {
if () {
return [Link](`${EMOJI_CROSS} You don't have permission to ban
members!`);
}
const member = [Link]();
if (!member) return [Link](`${EMOJI_CROSS} Please mention a member
to ban!`);
const reason = [Link](1).join(' ') || 'No reason provided';
try {
await [Link]({ reason });
const embed = new MessageEmbed()
.setTitle(`${EMOJI_TICK} User Banned`)
.setDescription(`${EMOJI_INFO} **${[Link]}** has been
banned.\n${EMOJI_INFO} **Reason:** ${reason}`)
.setColor('RED');
await [Link]({ embeds: [embed] });
} catch (error) {
[Link](`${EMOJI_CROSS} Failed to ban member: ${[Link]}`);
}
}
async unban(message, args) {
if () {
return [Link](`${EMOJI_CROSS} You don't have permission to unban
members!`);
}
const userId = args[0];
if (!userId) return [Link](`${EMOJI_CROSS} Please provide a user ID
to unban!`);
try {
const user = await [Link](userId);
await [Link](user);
const embed = new MessageEmbed()
.setTitle(`${EMOJI_TICK} User Unbanned`)
.setDescription(`${EMOJI_INFO} **${[Link]}** has been unbanned.`)
.setColor('GREEN');
await [Link]({ embeds: [embed] });
} catch (error) {
[Link](`${EMOJI_CROSS} Failed to unban user: ${[Link]}`);
}
}
async kick(message, args) {
if () {
return [Link](`${EMOJI_CROSS} You don't have permission to kick
members!`);
}
const member = [Link]();
if (!member) return [Link](`${EMOJI_CROSS} Please mention a member
to kick!`);
const reason = [Link](1).join(' ') || 'No reason provided';
try {
await [Link](reason);
const embed = new MessageEmbed()
.setTitle(`${EMOJI_TICK} User Kicked`)
.setDescription(`${EMOJI_INFO} **${[Link]}** has been
kicked.\n${EMOJI_INFO} **Reason:** ${reason}`)
.setColor('ORANGE');
await [Link]({ embeds: [embed] });
} catch (error) {
[Link](`${EMOJI_CROSS} Failed to kick member: $
{[Link]}`);
}
}
async mute(message, args) {
if () {
return [Link](`${EMOJI_CROSS} You don't have permission to mute
members!`);
}
const member = [Link]();
if (!member) return [Link](`${EMOJI_CROSS} Please mention a member
to mute!`);
const duration = parseInt(args[1]) || 0;
const reason = [Link](2).join(' ') || 'No reason provided';
let muteRole = [Link](role => [Link] ===
'Muted');
if (!muteRole) {
try {
muteRole = await [Link]({
name: 'Muted',
reason: 'Created for muting members'
});
[Link](async channel => {
await [Link](muteRole, {
SEND_MESSAGES: false,
ADD_REACTIONS: false
});
});
} catch (error) {
return [Link](`${EMOJI_CROSS} Failed to create mute role: $
{[Link]}`);
}
}
try {
await [Link](muteRole);
const embed = new MessageEmbed()
.setTitle(`${EMOJI_TIMER} User Muted`)
.setDescription(
`${EMOJI_INFO} **${[Link]}** has been muted.\n` +
`${EMOJI_INFO} **Reason:** ${reason}\n` +
`${EMOJI_TIMER} **Duration:** ${duration === 0 ? 'Permanent' :
`${duration} seconds`}`
)
.setColor('GREY');
await [Link]({ embeds: [embed] });
if (duration > 0) {
setTimeout(async () => {
try {
await [Link](muteRole);
[Link](`${EMOJI_TICK} **${[Link]}**
has been unmuted after ${duration} seconds.`);
} catch (error) {
[Link]('Failed to unmute member:', error);
}
}, duration * 1000);
}
} catch (error) {
[Link](`${EMOJI_CROSS} Failed to mute member: $
{[Link]}`);
}
}
async unmute(message, args) {
if () {
return [Link](`${EMOJI_CROSS} You don't have permission to
unmute members!`);
}
const member = [Link]();
if (!member) return [Link](`${EMOJI_CROSS} Please mention a member
to unmute!`);
const muteRole = [Link](role => [Link] ===
'Muted');
if (!muteRole) return [Link](`${EMOJI_CROSS} No mute role found!`);
try {
if ([Link]([Link])) {
await [Link](muteRole);
const embed = new MessageEmbed()
.setTitle(`${EMOJI_TIMER} User Unmuted`)
.setDescription(`${EMOJI_INFO} **${[Link]}** has been
unmuted.`)
.setColor('GREEN');
await [Link]({ embeds: [embed] });
} else {
[Link](`${EMOJI_CROSS} This user is not muted!`);
}
} catch (error) {
[Link](`${EMOJI_CROSS} Failed to unmute member: $
{[Link]}`);
}
}
async purge(message, args) {
if () {
return [Link](`${EMOJI_CROSS} You don't have permission to
delete messages!`);
}
const amount = parseInt(args[0]);
if (!amount || amount < 1) return [Link](`${EMOJI_CROSS} Please
provide a valid number of messages to delete!`);
try {
const deleted = await [Link](amount + 1);
const embed = new MessageEmbed()
.setTitle(`${EMOJI_TICK} Messages Purged`)
.setDescription(`${EMOJI_INFO} **${[Link] - 1}** messages
were deleted.`)
.setColor('BLUE');
const msg = await [Link]({ embeds: [embed] });
setTimeout(() => [Link](), 5000);
} catch (error) {
[Link](`${EMOJI_CROSS} Failed to delete messages: $
{[Link]}`);
}
}
async purgeUser(message, args) {
if () {
return [Link](`${EMOJI_CROSS} You don't have permission to
delete messages!`);
}
const member = [Link]();
if (!member) return [Link](`${EMOJI_CROSS} Please mention a user!`);
const amount = parseInt(args[1]);
if (!amount || amount < 1) return [Link](`${EMOJI_CROSS} Please
provide a valid number of messages to delete!`);
try {
const messages = await [Link]({ limit: 100 });
const userMessages = [Link](m => [Link] ===
[Link]).first(amount);
await [Link](userMessages);
const embed = new MessageEmbed()
.setTitle(`${EMOJI_TICK} User Messages Purged`)
.setDescription(`${EMOJI_INFO} **${[Link]}** messages
from **${[Link]}** were deleted.`)
.setColor('PURPLE');
const msg = await [Link]({ embeds: [embed] });
setTimeout(() => [Link](), 5000);
} catch (error) {
[Link](`${EMOJI_CROSS} Failed to delete messages: $
{[Link]}`);
}
}
async purgeBots(message) {
if () {
return [Link](`${EMOJI_CROSS} You don't have permission to
delete messages!`);
}
try {
const messages = await [Link]({ limit: 100 });
const botMessages = [Link](m => [Link]);
await [Link](botMessages);
const embed = new MessageEmbed()
.setTitle(`${EMOJI_TICK} Bot Messages Purged`)
.setDescription(`${EMOJI_INFO} **${[Link]}** bot messages
were deleted.`)
.setColor('DARK_RED');
const msg = await [Link]({ embeds: [embed] });
setTimeout(() => [Link](), 5000);
} catch (error) {
[Link](`${EMOJI_CROSS} Failed to delete messages: $
{[Link]}`);
}
}
}
[Link] = Moderation;