0% found this document useful (0 votes)
2 views5 pages

Moderation Py

The document defines a Moderation class for a Discord bot that manages user permissions and actions such as banning, unbanning, kicking, muting, unmuting, and purging messages. It includes methods for loading and saving mute roles from a JSON file, handling permissions, and providing feedback through embedded messages. The class ensures that only users with the appropriate permissions can execute moderation commands and provides error handling for various operations.

Uploaded by

arpitranjan4958
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
2 views5 pages

Moderation Py

The document defines a Moderation class for a Discord bot that manages user permissions and actions such as banning, unbanning, kicking, muting, unmuting, and purging messages. It includes methods for loading and saving mute roles from a JSON file, handling permissions, and providing feedback through embedded messages. The class ensures that only users with the appropriate permissions can execute moderation commands and provides error handling for various operations.

Uploaded by

arpitranjan4958
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
You are on page 1/ 5

const { MessageEmbed, Permissions } = require('discord.

js');
const fs = require('fs').promises;

const MUTE_FILE = "mute_roles.json";

class Moderation {
constructor(client) {
this.client = client;
this.muteRoles = new Map();
this.loadData();
}

async loadData() {
try {
this.muteRoles = new Map(Object.entries(JSON.parse(await
fs.readFile(MUTE_FILE, 'utf-8'))));
} catch (error) {
console.error('Error loading mute roles:', error);
}
}

async saveData() {
try {
await fs.writeFile(MUTE_FILE,
JSON.stringify(Object.fromEntries(this.muteRoles)));
} catch (error) {
console.error('Error saving mute roles:', error);
}
}

async ban(message, args) {


if (!message.member.permissions.has(Permissions.FLAGS.BAN_MEMBERS)) {
return message.reply(`${EMOJI_CROSS} You don't have permission to ban
members!`);
}

const member = message.mentions.members.first();


if (!member) return message.reply(`${EMOJI_CROSS} Please mention a member
to ban!`);

const reason = args.slice(1).join(' ') || 'No reason provided';

try {
await member.ban({ reason });
const embed = new MessageEmbed()
.setTitle(`${EMOJI_TICK} User Banned`)
.setDescription(`${EMOJI_INFO} **${member.user.tag}** has been
banned.\n${EMOJI_INFO} **Reason:** ${reason}`)
.setColor('RED');
await message.channel.send({ embeds: [embed] });
} catch (error) {
message.reply(`${EMOJI_CROSS} Failed to ban member: ${error.message}`);
}
}

async unban(message, args) {


if (!message.member.permissions.has(Permissions.FLAGS.BAN_MEMBERS)) {
return message.reply(`${EMOJI_CROSS} You don't have permission to unban
members!`);
}

const userId = args[0];


if (!userId) return message.reply(`${EMOJI_CROSS} Please provide a user ID
to unban!`);

try {
const user = await this.client.users.fetch(userId);
await message.guild.members.unban(user);
const embed = new MessageEmbed()
.setTitle(`${EMOJI_TICK} User Unbanned`)
.setDescription(`${EMOJI_INFO} **${user.tag}** has been unbanned.`)
.setColor('GREEN');
await message.channel.send({ embeds: [embed] });
} catch (error) {
message.reply(`${EMOJI_CROSS} Failed to unban user: ${error.message}`);
}
}

async kick(message, args) {


if (!message.member.permissions.has(Permissions.FLAGS.KICK_MEMBERS)) {
return message.reply(`${EMOJI_CROSS} You don't have permission to kick
members!`);
}

const member = message.mentions.members.first();


if (!member) return message.reply(`${EMOJI_CROSS} Please mention a member
to kick!`);

const reason = args.slice(1).join(' ') || 'No reason provided';

try {
await member.kick(reason);
const embed = new MessageEmbed()
.setTitle(`${EMOJI_TICK} User Kicked`)
.setDescription(`${EMOJI_INFO} **${member.user.tag}** has been
kicked.\n${EMOJI_INFO} **Reason:** ${reason}`)
.setColor('ORANGE');
await message.channel.send({ embeds: [embed] });
} catch (error) {
message.reply(`${EMOJI_CROSS} Failed to kick member: $
{error.message}`);
}
}

async mute(message, args) {


if (!message.member.permissions.has(Permissions.FLAGS.MANAGE_ROLES)) {
return message.reply(`${EMOJI_CROSS} You don't have permission to mute
members!`);
}

const member = message.mentions.members.first();


if (!member) return message.reply(`${EMOJI_CROSS} Please mention a member
to mute!`);

const duration = parseInt(args[1]) || 0;


const reason = args.slice(2).join(' ') || 'No reason provided';

let muteRole = message.guild.roles.cache.find(role => role.name ===


'Muted');
if (!muteRole) {
try {
muteRole = await message.guild.roles.create({
name: 'Muted',
reason: 'Created for muting members'
});

message.guild.channels.cache.forEach(async channel => {


await channel.permissionOverwrites.create(muteRole, {
SEND_MESSAGES: false,
ADD_REACTIONS: false
});
});
} catch (error) {
return message.reply(`${EMOJI_CROSS} Failed to create mute role: $
{error.message}`);
}
}

try {
await member.roles.add(muteRole);
const embed = new MessageEmbed()
.setTitle(`${EMOJI_TIMER} User Muted`)
.setDescription(
`${EMOJI_INFO} **${member.user.tag}** has been muted.\n` +
`${EMOJI_INFO} **Reason:** ${reason}\n` +
`${EMOJI_TIMER} **Duration:** ${duration === 0 ? 'Permanent' :
`${duration} seconds`}`
)
.setColor('GREY');
await message.channel.send({ embeds: [embed] });

if (duration > 0) {
setTimeout(async () => {
try {
await member.roles.remove(muteRole);
message.channel.send(`${EMOJI_TICK} **${member.user.tag}**
has been unmuted after ${duration} seconds.`);
} catch (error) {
console.error('Failed to unmute member:', error);
}
}, duration * 1000);
}
} catch (error) {
message.reply(`${EMOJI_CROSS} Failed to mute member: $
{error.message}`);
}
}

async unmute(message, args) {


if (!message.member.permissions.has(Permissions.FLAGS.MANAGE_ROLES)) {
return message.reply(`${EMOJI_CROSS} You don't have permission to
unmute members!`);
}

const member = message.mentions.members.first();


if (!member) return message.reply(`${EMOJI_CROSS} Please mention a member
to unmute!`);
const muteRole = message.guild.roles.cache.find(role => role.name ===
'Muted');
if (!muteRole) return message.reply(`${EMOJI_CROSS} No mute role found!`);

try {
if (member.roles.cache.has(muteRole.id)) {
await member.roles.remove(muteRole);
const embed = new MessageEmbed()
.setTitle(`${EMOJI_TIMER} User Unmuted`)
.setDescription(`${EMOJI_INFO} **${member.user.tag}** has been
unmuted.`)
.setColor('GREEN');
await message.channel.send({ embeds: [embed] });
} else {
message.reply(`${EMOJI_CROSS} This user is not muted!`);
}
} catch (error) {
message.reply(`${EMOJI_CROSS} Failed to unmute member: $
{error.message}`);
}
}

async purge(message, args) {


if (!message.member.permissions.has(Permissions.FLAGS.MANAGE_MESSAGES)) {
return message.reply(`${EMOJI_CROSS} You don't have permission to
delete messages!`);
}

const amount = parseInt(args[0]);


if (!amount || amount < 1) return message.reply(`${EMOJI_CROSS} Please
provide a valid number of messages to delete!`);

try {
const deleted = await message.channel.bulkDelete(amount + 1);
const embed = new MessageEmbed()
.setTitle(`${EMOJI_TICK} Messages Purged`)
.setDescription(`${EMOJI_INFO} **${deleted.size - 1}** messages
were deleted.`)
.setColor('BLUE');
const msg = await message.channel.send({ embeds: [embed] });
setTimeout(() => msg.delete(), 5000);
} catch (error) {
message.reply(`${EMOJI_CROSS} Failed to delete messages: $
{error.message}`);
}
}

async purgeUser(message, args) {


if (!message.member.permissions.has(Permissions.FLAGS.MANAGE_MESSAGES)) {
return message.reply(`${EMOJI_CROSS} You don't have permission to
delete messages!`);
}

const member = message.mentions.members.first();


if (!member) return message.reply(`${EMOJI_CROSS} Please mention a user!`);

const amount = parseInt(args[1]);


if (!amount || amount < 1) return message.reply(`${EMOJI_CROSS} Please
provide a valid number of messages to delete!`);

try {
const messages = await message.channel.messages.fetch({ limit: 100 });
const userMessages = messages.filter(m => m.author.id ===
member.id).first(amount);
await message.channel.bulkDelete(userMessages);

const embed = new MessageEmbed()


.setTitle(`${EMOJI_TICK} User Messages Purged`)
.setDescription(`${EMOJI_INFO} **${userMessages.length}** messages
from **${member.user.tag}** were deleted.`)
.setColor('PURPLE');
const msg = await message.channel.send({ embeds: [embed] });
setTimeout(() => msg.delete(), 5000);
} catch (error) {
message.reply(`${EMOJI_CROSS} Failed to delete messages: $
{error.message}`);
}
}

async purgeBots(message) {
if (!message.member.permissions.has(Permissions.FLAGS.MANAGE_MESSAGES)) {
return message.reply(`${EMOJI_CROSS} You don't have permission to
delete messages!`);
}

try {
const messages = await message.channel.messages.fetch({ limit: 100 });
const botMessages = messages.filter(m => m.author.bot);
await message.channel.bulkDelete(botMessages);

const embed = new MessageEmbed()


.setTitle(`${EMOJI_TICK} Bot Messages Purged`)
.setDescription(`${EMOJI_INFO} **${botMessages.size}** bot messages
were deleted.`)
.setColor('DARK_RED');
const msg = await message.channel.send({ embeds: [embed] });
setTimeout(() => msg.delete(), 5000);
} catch (error) {
message.reply(`${EMOJI_CROSS} Failed to delete messages: $
{error.message}`);
}
}
}

module.exports = Moderation;

You might also like