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

249 lines (218 loc) 12.5 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 } = require('../config'); class EasyEconomy { /** * @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("💰 ❱ Economie")) { help.push({ category: "💰 ❱ Economie", commands: [{ name: "money", desc: "Affiche votre solde d'argent." },{ name: 'add-money', desc: "Ajoute de l'argent à un membre du serveur." },{ name: "remove-money", desc: "Retire le l'argent à un membre du serveur." },{ name: "withdraw", desc: "Retirer de l'argent de votre banque pour les prendre dans votre prote-monnaie." },{ name: "deposit", desc: "Déposez l'argent de votre porte-monnaie dans votre banque." }] }); }; 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 !`)); if(!options.config.startsWith || isNaN(options.config.startsWith)) throw new Error(this.err + chalk.red(`Vous devez préciser avec combien d'argent les nouveau membres commencent la partie !`)); if(!options.config.cashParMessage || isNaN(options.config.cashParMessage)) throw new Error(this.err + chalk.red(`Vous devez préciser combien les membres gagnent d'argent par message !`)); if(!options.config.moneySymbole) options.config.moneySymbole = "💵"; this.prefix = options.clientPrefix; this.client = options.discordClient; this.config = options.config; let logs = chalk.blue("╔════════════════════╗\n║ "); logs += chalk.cyanBright("Discord Economy"); logs += chalk.blue(" ║\n╠════════════════════╝\n║ "); logs += chalk.yellow("Prefix: "); logs += chalk.gray(this.prefix); logs += chalk.blue("\n╚════════════════════·"); console.log(logs); }; /** * @api public */ async onMessage (msg) { if(msg.channel.type === "dm") return msg.channel.send("Vous ne pouvez pas exécuter de commandes en messages privés, ni gagner d'argent !").catch(()=>{}); if(msg.author.bot) return; if(!msg.guild) return; this.autoAddMoney(msg.author.id); 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 == "balance" || cmd == "bal" || cmd == "money") { var member = args[0] ? msg.mentions.members.first() || msg.members.cache.get(args[0]) : msg.member; if(!member) return this.sendError("Aucun membre du serveur ne correspond aux informations fournies !", msg); if(member.user.bot) return this.sendError("Vous ne pouvez pas voir le profile d'un bot !", msg); var embed = new Discord.MessageEmbed() .setColor("#2F3136") .setAuthor(member.user.username, member.user.displayAvatarURL()) .setDescription( `${member.user.toString()} a **${this.money(member.user.id).cash + this.money(member.user.id).bank}** ${this.config.moneySymbole} !` ).addField( `💰 ❱ Cash`, `${this.money(member.user.id).cash} ${this.config.moneySymbole}`, true ).addField("\u200b", "\u200b", true).addField( `🏦 ❱ Banque`, `${this.money(member.user.id).bank} ${this.config.moneySymbole}`, true ) msg.channel.send(embed).catch(()=>{}); } else if(cmd == "add-money") { var perm = false; this.config.managerRoles.forEach(rID => { if(msg.members.roles.cache.map(r => r.id).includes(rID)) perm = true; }); if(!msg.member.hasPermission("MANAGE_GUILD") && !perm) return this.sendError("Vous n'avez pas la permission d'utiliser cette commande !", msg); var member = msg.mentions.members.first() || msg.members.cache.get(args[0]); if(!member) return this.sendError("Aucun membre du serveur ne correspond aux informations fournies !", msg); if(member.user.bot) return this.sendError("Vous ne pouvez pas voir le profile d'un bot !", msg); var place = args[1]; if(!place || !["cash", "bank"].includes(place)) return this.sendError("Vous devez fournir un emplacement où envoyer l'argent (cash/bank) !", msg); var amount = parseInt(args[2]); if(!amount || isNaN(amount) || amount <= 0) return this.sendError("Vous devez fournir un montant suppérieur à 0 !", msg); this.addMoney(member.user.id, place, amount); this.sendDone(`\`\`${amount}\`\` ${this.config.moneySymbole} ${amount > 1 ? "ont été" : "a été"} donné${amount > 1 ? "s" : ""} ${place == "cash" ? "au porte-monnaie" : "à la banque"} de ${member.user.toString()} !`, msg); } else if(cmd == "remove-money") { var perm = false; this.config.managerRoles.forEach(rID => { if(msg.members.roles.cache.map(r => r.id).includes(rID)) perm = true; }); if(!msg.member.hasPermission("MANAGE_GUILD") && !perm) return this.sendError("Vous n'avez pas la permission d'utiliser cette commande !", msg); var member = msg.mentions.members.first() || msg.members.cache.get(args[0]); if(!member) return this.sendError("Aucun membre du serveur ne correspond aux informations fournies !", msg); if(member.user.bot) return this.sendError("Vous ne pouvez pas voir le profile d'un bot !", msg); var place = args[1]; if(!place || !["cash", "bank"].includes(place)) return this.sendError("Vous devez fournir un emplacement où retirer l'argent (cash/bank) !", msg); var amount = parseInt(args[2]); if(!amount || isNaN(amount) || amount <= 0) return this.sendError("Vous devez fournir un montant suppérieur à 0 !", msg); this.removeMoney(member.user.id, place, amount); this.sendDone(`\`\`${amount}\`\` ${this.config.moneySymbole} ${amount > 1 ? "ont été" : "a été"} retiré${amount > 1 ? "s" : ""} ${place == "cash" ? "du porte-monnaie" : "de la banque"} de ${member.user.toString()} !`, msg); } else if(cmd == "withdraw" || cmd == "with") { var amount = args[0] == "all" ? this.money(msg.author.id).bank : parseInt(args[2]); if(!amount || isNaN(amount) || amount <= 0) return this.sendError("Vous devez fournir un montant à retirer de votre banque suppérieur à 0 !", msg); if(amount > this.money(msg.author.id).bank) return this.sendError("Vous ne pouvez pas retirer de votre banque plus d'argent que vous n'avez dedans !", msg); this.removeMoney(msg.author.id, "bank", amount); this.addMoney(msg.author.id, "cash", amount); this.sendDone(`\`\`${amount}\`\` ${this.config.moneySymbole} ${amount > 1 ? "ont" : "a"} été retiré${amount > 1 ? "s" : ""} de votre banque et déposé dans votre porte monnaie.`, msg); } else if(cmd == "deposit" || cmd == "dep") { var amount = args[0] == "all" ? this.money(msg.author.id).cash : parseInt(args[2]); if(!amount || isNaN(amount) || amount <= 0) return this.sendError("Vous devez fournir un montant à retirer de votre banque suppérieur à 0 !", msg); if(amount > this.money(msg.author.id).cash) return this.sendError("Vous ne pouvez pas déposer dans votre banque plus d'argent que vous n'avez dans votre porte-monnaie !", msg); this.removeMoney(msg.author.id, "cash", amount); this.addMoney(msg.author.id, "bank", amount); this.sendDone(`\`\`${amount}\`\` ${this.config.moneySymbole} ${amount > 1 ? "ont" : "a"} été retiré${amount > 1 ? "s" : ""} de votre porte-monnaie et déposé${amount > 1 ? "s" : ""} dans votre banque.`, msg); } else if((cmd == "help" || cmd == "h") && this.config.helpCommand) { var embed = new Discord.MessageEmbed() .setColor(colors.blue) .setFooter(msg.author.tag, msg.author.displayAvatarURL()) help.forEach(h => { embed.addField( h.category, h.commands.map(c => `\`\`${c.name}\`\``).join(", ") ) }); msg.channel.send(embed).catch(()=>{}); }; }; /** * @api private */ autoAddMoney(userID) { if(!db.has(`economy.${userID}`)) { db.set(`economy.${userID}.cash`, this.config.startsWith); db.set(`economy.${userID}.bank`, 0); db.set(`economy.${userID}.managed`, 0); }; db.add(`economy.${userID}.cash`, Math.floor(Math.random() * this.config.cashParMessage)); }; /** * @api private */ addMoney(userID, place, amount) { if(!db.has(`economy.${userID}`)) { db.set(`economy.${userID}.cash`, this.config.startsWith); db.set(`economy.${userID}.bank`, 0); db.set(`economy.${userID}.managed`, 0); }; db.add(`economy.${userID}.${place}`, amount); }; /** * @api private */ removeMoney(userID, place, amount) { if(!db.has(`economy.${userID}`)) { db.set(`economy.${userID}.cash`, this.config.startsWith); db.set(`economy.${userID}.bank`, 0); db.set(`economy.${userID}.managed`, 0); }; db.subtract(`economy.${userID}.${place}`, amount); }; /** * @api private */ money(userID) { if(!db.has(`economy.${userID}`)) { db.set(`economy.${userID}.cash`, this.config.startsWith); db.set(`economy.${userID}.bank`, 0); db.set(`economy.${userID}.managed`, 0); }; return db.get(`economy.${userID}`); }; /** * @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(()=>{}); }; }; module.exports = EasyEconomy;