mirror of
https://github.com/ION606/selmerBot.git
synced 2026-05-15 05:36:54 +00:00
Added moderation commands
This commit is contained in:
@@ -0,0 +1,137 @@
|
||||
//@ts-check
|
||||
const { log, SEVCODES } = require('../log.js');
|
||||
const { checkRole } = require('./verify.js');
|
||||
|
||||
|
||||
function kick(guild, user) {
|
||||
guild.members.kick(user);
|
||||
}
|
||||
|
||||
|
||||
async function toggle_ban(guild, message, args, ban, reason) {
|
||||
var user = args[0];
|
||||
let i = 0;
|
||||
while (user.indexOf('#') == -1) {
|
||||
user += args[i];
|
||||
i++
|
||||
}
|
||||
|
||||
if (ban) {
|
||||
guild.members.ban(user);
|
||||
} else {
|
||||
return new Promise((resolve, reject) => {
|
||||
message.guild.bans.fetch().then((users) => {
|
||||
const userObj = users.filter((u) => {
|
||||
return (`${u.user.username}#${u.user.discriminator}` == user);
|
||||
}).first();
|
||||
|
||||
if (userObj && userObj.user) {
|
||||
guild.members.unban(userObj.user.id, reason).then(() => {
|
||||
resolve(userObj.user);
|
||||
});
|
||||
} else {
|
||||
reject("This user is not in the server!");
|
||||
}
|
||||
})
|
||||
});
|
||||
|
||||
// //Check if the user is banned or not
|
||||
// message.guild.invites.fetch().then((invites) => {
|
||||
// const u = guild.members.cache.get(id);
|
||||
// u.send(`You have been unbanned from ${guild.name}, you can rejoin using the following link!\nhttps://discord.gg/${invites.first().code}`);
|
||||
// });
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
function toggle_mute(bot, guild, command, message, user, reason, mute) {
|
||||
const mutedRole = guild.roles.cache.find((role) => role.name.toLowerCase() === 'muted');
|
||||
const guser = guild.members.cache.get(user.id);
|
||||
// if there is no `Muted` role, send an error
|
||||
if (!mutedRole) { return message.channel.send('There is no "muted" role on this server. Please create one then try again'); }
|
||||
|
||||
if (mute) {
|
||||
if (guser.roles.cache.get(mutedRole.id) == undefined) {
|
||||
guser.roles.add(mutedRole);
|
||||
log(bot, message, command, user, reason, SEVCODES.low);
|
||||
} else { message.reply("This user is already muted!"); }
|
||||
} else {
|
||||
if (guser.roles.cache.get(mutedRole.id) != undefined) {
|
||||
guser.roles.remove(mutedRole);
|
||||
log(bot, message, command, user, reason, SEVCODES.none);
|
||||
} else { message.reply("This user is not muted!"); }
|
||||
}
|
||||
|
||||
/*
|
||||
NOTE: use the following function for a "time out" type thing?
|
||||
setTimeout(() => {
|
||||
target.roles.remove(mutedRole); // remove the role
|
||||
}, <time>)
|
||||
*/
|
||||
}
|
||||
|
||||
|
||||
function timeOut(bot, user, message, args, command, reason) {
|
||||
|
||||
let num = Number(args[1]);
|
||||
if (!args[1] && !Number.isSafeInteger(num)) { return message.reply(`Please use the following format ${bot.repfix}timeout <user> <amount of time> [*hours* **or** *minutes (default)*]`)}
|
||||
let ms = num * 60 * 1000;
|
||||
let timeAsSt = '';
|
||||
|
||||
if (args[2] == 'hours') { ms *= 60; timeAsSt = `${args[1]} hours`; }
|
||||
else { timeAsSt = `${args[2]} minutes`; }
|
||||
|
||||
user.timeout(ms, reason);
|
||||
|
||||
log(bot, message, command, user, reason, timeAsSt);
|
||||
}
|
||||
|
||||
|
||||
function moderation_handler(bot, message, args, command) {
|
||||
const guild = message.guild;
|
||||
|
||||
//Verify
|
||||
if (!checkRole(bot, guild, message.author.id)) { return message.reply('Insufficient Permission!'); }
|
||||
|
||||
let mentioned = message.mentions.users.first();
|
||||
if (mentioned && mentioned.id == message.author.id) { return message.reply(`You can't ${command} yourself!`); }
|
||||
|
||||
const reason = args.slice(1).join(' ');
|
||||
|
||||
if (message.mentions.members.first() && (message.mentions.members.first().roles.highest.position > message.guild.members.resolve(bot.user).roles.highest.position)) {
|
||||
return message.reply("I'm not high enough in the role hierarchy to do that!\n_To raise my place, go to **Server Settings -> Roles** then drag me up!_");
|
||||
}
|
||||
|
||||
if (command != 'unban' && !mentioned || !reason) { return message.channel.send(`Please use the following format: _!<command> <user> <reason>`); }
|
||||
if (command == 'unban' && !args[0] && !reason) { return message.channel.send("Please use the following format: _!unban <user_tag>#<user_discriminator> <reason>\nExample: _!unban John#1122_"); }
|
||||
// if (command == 'ban' && guild.members.cache.get(mentioned.id).bannable) { message.reply("This user is not bannable!"); } //Broken
|
||||
// if (command == 'ban' && !message.guild.members.cache.get(mentioned.id)) { message.reply("This user is not in the server"); }
|
||||
|
||||
switch (command) {
|
||||
case 'kick': kick(guild, mentioned);
|
||||
log(bot, message, command, mentioned, reason, SEVCODES.medium);
|
||||
break;
|
||||
|
||||
case 'ban': toggle_ban(guild, message, mentioned, true, reason);
|
||||
log(bot, message, command, mentioned, reason, SEVCODES.high);
|
||||
break;
|
||||
|
||||
//Leave the then() catch() thing, it needs to be async
|
||||
case 'unban': toggle_ban(guild, message, args, false, reason).then((user) => { log(bot, message, command, user, reason, SEVCODES.none)}).catch((note) => { message.reply(note); });
|
||||
break;
|
||||
|
||||
case 'mute': toggle_mute(bot, guild, command, message, mentioned, reason, true);
|
||||
break;
|
||||
|
||||
case 'unmute': toggle_mute(bot, guild, command, message, mentioned, reason, true);
|
||||
break;
|
||||
|
||||
// case 'timeout': timeOut(bot, mentioned, message, args, command, reason);
|
||||
// shouldIlog = false;
|
||||
// break;
|
||||
|
||||
default: console.log(`ERROR! Moderation Command "${command}" has somehow been used!`);
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = { moderation_handler }
|
||||
Reference in New Issue
Block a user