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