easybot
Version:
Le meilleur module pour créer un bot français multifonction spécialement conçu pour votre serveur en un rien de temps...
180 lines (165 loc) • 7.05 kB
JavaScript
const Package = require('../package.json');
const Discord = require('discord.js');
const fetch = require('node-fetch');
const chalk = require('chalk');
const fs = require('fs');
const colors = require('hexacolors');
const db = require('quick.db');
const { help, makeID } = require('../config');
class EasyModeration {
/**
* @typedef {object} Options
* @property {string} discordClient - Le Discord.Client();
* @property {string} clientPrefix - Le préfix de votre bot
* @property {object} config - Configuration du bot
*/
/**
* @param {Options} options
*/
constructor (options) {
this.err = chalk.red(`[Discord Moderation] Erreur: `);
this.warning = chalk.yellow(`[Discord Moderation] Avertissement: `);
if(!help.map(h => h.category).includes("🚔 ❱ Modération")) {
help.push({
category: "🚔 ❱ Modération",
commands: [{
name: "warn",
desc: "Averti le membre mentionné."
},{
name: 'unwarn',
desc: "Retire un avertissement au membre mentionné."
},{
name: "warnings",
desc: "Affiche la liste des avertissements du membre mentionné."
},{
name: "kick",
desc: "Expulse le membre mentionné du serveur."
},{
name: "ban",
desc: "Banni le membre mentionné du serveur."
},{
name: "unban",
desc: "Débanni l'utilisateur du serveur."
},{
name: "tempban",
desc: "Banni temporairement le membre mentionné du serveur."
},{
name: "mute",
desc: "Rend muet le membre mentionné (l'empêche d'envoyer des messages)."
},{
name: "tempmute",
desc: "Rend muet temporairement le membre mentionné (l'empêche d'envoyer des messages)."
},{
name: "unmute",
desc: "Redonne la parole au membre mentionné (Peut de nouveau envoyer des messages)."
}]
});
};
if(!options.discordClient) throw new Error(this.err + chalk.red(`Vous devez fournir l'intégration Discord.Client() !`));
if(!options.clientPrefix) throw new Error(this.err + chalk.red(`Vous devez fourir un prefix !`));
if(!options.config) throw new Error(this.err + chalk.red(`Vous devez configurer le bot !`));
if(!options.config.managerRoles) throw new Error(this.err + chalk.red(`Vous devez ajouter la liste des managers de la banque !`));
this.prefix = options.clientPrefix;
this.client = options.discordClient;
this.config = options.config;
let logs = chalk.blue("╔════════════════════╗\n║ ");
logs += chalk.cyanBright("Discord Moderation");
logs += chalk.blue(" ║\n╠════════════════════╝\n║ ");
logs += chalk.yellow("Prefix: ");
logs += chalk.gray(this.prefix);
logs += chalk.blue("\n╚════════════════════·");
console.log(logs);
};
/**
* @param {Discord.Message} msg
*/
async onMessage (msg) {
if(msg.channel.type === "dm") return msg.channel.send("Vous ne pouvez pas exécuter de commandes en messages privés !").catch(()=>{});
if(msg.author.bot) return;
if(!msg.guild) return;
if(!msg.content.startsWith(this.prefix)) return;
const cmd = msg.content.slice(this.prefix.length).split(" ")[0];
const args = msg.content.slice(this.prefix.length + cmd.length + 1).trim().split(/ +/g);
if(cmd.length === 0) return;
if(cmd == "warn") {
const member = msg.mentions.members.first() || msg.guild.members.cache.get(args[0]);
if(!member) return this.sendError("Aucun membre ne correspond aux informations données.", msg);
const reason = args[1] ? args.slice(1).join(" ") : "Non précisée";
const warnID = this.warn(member.user, msg.author, reason);
if(warnID) {
this.sendDone(`${member.user.toString()} a ressu un avertissement.`, msg);
this.sendWarn(member.user, reason, msg).catch(()=>{});
} else return this.sendError(`Je n'ai pas pu ajouter un avertissement à ${member.user.toString()}.`, msg);
};
};
/**
* @api private
* @param {Discord.User} user
* @param {Discord.User} author
* @param {string} reason
* @returns {"warnID"}
*/
warn(user, author, reason, duration) {
if(!db.has(`moderation.${user.id}`)) {
db.set(`moderation.${user.id}`, {
warnings: [],
mutes: [],
kicks: [],
bans: []
});
};
let ID = makeID(5);
while (db.get(`moderation.${user.id}.warnings`).find(w => w._id == ID)) { ID = makeID(5) };
db.push(`moderation.${user.id}.warnings`, {
_id: ID,
authorID: author.id,
startedAt: new Date(),
endedAt: false,
reason: reason,
duration: duration ? duration : false,
active: true
});
return ID;
};
/**
* @api private
*/
sendError(message, m) {
m.channel.send(
new Discord.MessageEmbed()
.setColor(colors.red)
.setDescription(
`:x: ***${message}***`
)
).catch(()=>{});
};
/**
* @api private
*/
sendDone(message, m) {
m.channel.send(
new Discord.MessageEmbed()
.setColor(colors.green)
.setDescription(
`✅ ***${message}***`
).setFooter(m.author.tag, m.author.displayAvatarURL())
).catch(()=>{});
};
/**
* @api private
* @param {Discord.User} user
* @param {string} reason
* @param {Discord.Message} msg
* @returns {Promise<Discord.Message>}
*/
sendWarn(user, reason, msg) {
const embed = new Discord.MessageEmbed()
.setColor(colors.red)
.setAuthor(msg.author.username, msg.author.displayAvatarURL())
.setFooter(msg.guild.name, msg.guild.iconURL())
.setTitle("Vous avez reçu un avertissement !")
.setDescription(`__**RAISON :**__\n${reason}`)
return user.send(embed);
};
};
module.exports = EasyModeration;