UNPKG

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
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;