diff --git a/commands/help.js b/commands/help.js index f6668a8..95f1b19 100644 --- a/commands/help.js +++ b/commands/help.js @@ -74,7 +74,7 @@ module.exports = addCommand( const welcomeEmbed = new EmbedBuilder() .setTitle("📚・Accueil") .setDescription( - `Voici le panel d'aide du bot. Pour plus d'informations sur une commande, utilisez \`${prefix}help \``, + `Voici le panel d'aide du bot. Pour plus d'informations sur une commande, utilisez ${prefix}help \n\n> **🎙️ Récompenses vocales :**\n> Vous gagnez \`100\` coins toutes les \`15\`minutes lorsque vous êtes en vocal (**NON MUTE** sinon c'est \`50\`coins).\n \n> **📺 Récompenses de streaming :**\n> Activer un stream vous fera gagner \`200\`.\n \n> **📷 Récompenses de caméra :**\n> Activer votre caméra vous fera gagner \`200\`.\n\n> Le coins est une monnaie fictive.`, ) .setColor("#0099FF") .setTimestamp() diff --git a/commands/💰・Casino/deposit.js b/commands/💰・Casino/deposit.js new file mode 100644 index 0000000..e06a27b --- /dev/null +++ b/commands/💰・Casino/deposit.js @@ -0,0 +1,172 @@ +const addCommand = require("../../fonctions/addCommand"); +const { SlashCommandBuilder, EmbedBuilder } = require("discord.js"); +const db = require("../../fonctions/setDatabase"); +const createAccount = require("../../fonctions/createAccount"); +const getEmbedColor = require("../../fonctions/getEmbedColor"); + +module.exports = addCommand( + (this.name = "deposit"), + (this.description = "Dépose vos coins dans votre compte en banque."), + (this.aliases = ["dep", "depot"]), + (this.permissions = []), + (this.botOwnerOnly = false), + (this.dm = false), + (this.executePrefix = async (client, message, args) => { + let user = await new Promise((resolve, reject) => { + db.get( + `SELECT * FROM users WHERE guildId = ? AND userId = ?`, + [message.guild.id, message.author.id], + (err, row) => { + if (err) { + reject(err); + } + resolve(row); + } + ); + }); + + if (!user) { + user = await createAccount(message.guild.id, message.author.id); + } + + const embedColor = await getEmbedColor(message.guild.id, message.author.id); + + function createErrorEmbed(message, description) { + return new EmbedBuilder() + .setTitle("Erreur") + .setDescription(description) + .setColor(embedColor) + .setTimestamp() + .setFooter({ + text: `Demandé par ${message.author.tag}`, + iconURL: message.author.displayAvatarURL(), + }); + } + + function isValidAmount(amount, userPocket) { + if (isNaN(amount) || amount <= 0) { + return "Le montant doit être un nombre supérieur à 0."; + } else if (amount > userPocket) { + return "Vous n'avez pas assez de coins."; + } + return null; + } + + let amount = args.join("").toLowerCase(); + const suffixMultiplier = { k: 1000, m: 1000000, b: 1000000000 }; + const suffix = amount.slice(-1); + + if (amount === "all") { + amount = user.pocket; + } else { + let multiplier = 1; + if (suffix in suffixMultiplier) { + multiplier = suffixMultiplier[suffix]; + amount = amount.slice(0, -1); + } + const errorMessage = isValidAmount(amount, user.pocket); + amount = parseFloat(amount) * multiplier; + if (errorMessage) { + const embed = createErrorEmbed(message, errorMessage); + return message.reply({ embeds: [embed] }); + } + } + + db.run( + `UPDATE users SET pocket = pocket - ?, bank = bank + ? WHERE guildId = ? AND userId = ?`, + [amount, amount, message.guild.id, message.author.id], + (err) => { + if (err) { + console.error(err.message); + return; + } + const embed = new EmbedBuilder() + .setTitle("Dépôt") + .setDescription(`Vous avez déposé ${amount} coins dans votre compte en banque.`) + .setColor(embedColor) + .setTimestamp() + .setFooter({ + text: `Demandé par ${message.author.tag}`, + iconURL: message.author.displayAvatarURL(), + }); + message.reply({ embeds: [embed] }); + } + ); + }), + (this.executeSlash = async (client, interaction) => { + const user = await new Promise((resolve, reject) => { + db.get( + `SELECT * FROM users WHERE guildId = ? AND userId = ?`, + [interaction.guild.id, interaction.user.id], + (err, row) => { + if (err) { + reject(err); + } + resolve(row); + } + ); + }); + + if (!user) { + user = await createAccount(interaction.guild.id, interaction.user.id); + } + + const embedColor = await getEmbedColor(interaction.guild.id, interaction.user.id); + + function createErrorEmbed(description) { + return new EmbedBuilder() + .setTitle("Erreur") + .setDescription(description) + .setColor(embedColor) + .setTimestamp() + .setFooter({ + text: `Demandé par ${interaction.user.tag}`, + iconURL: interaction.user.displayAvatarURL(), + }); + } + + function isValidAmount(amount, userPocket) { + if (isNaN(amount) || amount <= 0) { + return "Le montant doit être un nombre supérieur à 0."; + } else if (amount > userPocket) { + return "Vous n'avez pas assez de coins."; + } + return null; + } + + const amount = interaction.options.getInteger("montant"); + const errorMessage = isValidAmount(amount, user.pocket); + if (errorMessage) { + const embed = createErrorEmbed(errorMessage); + return interaction.reply({ embeds: [embed] }); + } + + db.run( + `UPDATE users SET pocket = pocket - ?, bank = bank + ? WHERE guildId = ? AND userId = ?`, + [amount, amount, interaction.guild.id, interaction.user.id], + (err) => { + if (err) { + console.error(err.message); + return; + } + const embed = new EmbedBuilder() + .setTitle("Dépôt") + .setDescription(`Vous avez déposé ${amount} coins dans votre compte en banque.`) + .setColor(embedColor) + .setTimestamp() + .setFooter({ + text: `Demandé par ${interaction.user.tag}`, + iconURL: interaction.user.displayAvatarURL(), + }); + interaction.reply({ embeds: [embed] }); + } + ); + }), + (this.slashOptions = new SlashCommandBuilder() + .addIntegerOption((option) => + option + .setName("montant") + .setDescription("Le montant à déposer.") + .setRequired(true) + )), +); diff --git a/commands/💰・Casino/me.js b/commands/💰・Casino/me.js index 1178614..e54d2c7 100644 --- a/commands/💰・Casino/me.js +++ b/commands/💰・Casino/me.js @@ -29,6 +29,20 @@ module.exports = addCommand( const member = message.mentions.members.first() || message.guild.members.cache.get(args[0]) || message.member; const embedColor = await getEmbedColor(message.guild.id, message.author.id); + if (member.user.bot) { + const embed = new EmbedBuilder() + .setTitle("Erreur") + .setDescription("Vous ne pouvez pas afficher les informations d'un bot.") + .setColor(embedColor) + .setTimestamp() + .setFooter({ + text: `Demandé par ${message.author.tag}`, + iconURL: message.author.displayAvatarURL(), + }); + + return message.reply({ embeds: [embed] }); + } + let user = await new Promise((resolve, reject) => { db.get( `SELECT * FROM users WHERE guildId = ? AND userId = ?`, @@ -74,6 +88,20 @@ module.exports = addCommand( const member = interaction.options.getMember("membre") || interaction.member; const embedColor = await getEmbedColor(interaction.guild.id, interaction.user.id); + if (member.user.bot) { + const embed = new EmbedBuilder() + .setTitle("Erreur") + .setDescription("Vous ne pouvez pas afficher les informations d'un bot.") + .setColor(embedColor) + .setTimestamp() + .setFooter({ + text: `Demandé par ${interaction.user.tag}`, + iconURL: interaction.user.displayAvatarURL(), + }); + + return interaction.reply({ embeds: [embed] }); + } + let user = await new Promise((resolve, reject) => { db.get( `SELECT * FROM users WHERE guildId = ? AND userId = ?`, @@ -119,6 +147,6 @@ module.exports = addCommand( .addUserOption((option) => option .setName("membre") .setDescription("Membre à afficher.") - .setRequired(false), + .setRequired(false) )), ); diff --git a/commands/💰・Casino/pay.js b/commands/💰・Casino/pay.js new file mode 100644 index 0000000..6ace6e0 --- /dev/null +++ b/commands/💰・Casino/pay.js @@ -0,0 +1,285 @@ +const addCommand = require("../../fonctions/addCommand"); +const { SlashCommandBuilder, EmbedBuilder } = require("discord.js"); +const db = require("../../fonctions/setDatabase"); +const createAccount = require("../../fonctions/createAccount"); +const getEmbedColor = require("../../fonctions/getEmbedColor"); +const getPrefix = require("../../fonctions/getPrefix"); + +module.exports = addCommand( + (this.name = "pay"), + (this.description = "Paye un membre de votre serveur."), + (this.aliases = []), + (this.permissions = []), + (this.botOwnerOnly = false), + (this.dm = false), + (this.executePrefix = async (client, message, args) => { + const prefix = await getPrefix(message.guild.id); + const embedColor = await getEmbedColor(message.guild.id, message.author.id); + const user = message.mentions.members.first() || message.guild.members.cache.get(args[0]) || message.member; + + if (user.user.bot) { + const embed = new EmbedBuilder() + .setTitle("Erreur") + .setDescription("Vous ne pouvez pas payer un bot.") + .setColor(embedColor) + .setTimestamp() + .setFooter({ + text: `Demandé par ${message.author.tag}`, + iconURL: message.author.displayAvatarURL(), + }); + return message.reply({ embeds: [embed] }); + } + + if (!args[0]) { + const embed = new EmbedBuilder() + .setTitle("Erreur") + .setDescription(`Vous devez mentionner un membre à payer. Exemple: \`${prefix}pay @membre 100\`.`) + .setColor(embedColor) + .setTimestamp() + .setFooter({ + text: `Demandé par ${message.author.tag}`, + iconURL: message.author.displayAvatarURL(), + }); + return message.reply({ embeds: [embed] }); + } else if (!args[1]) { + const embed = new EmbedBuilder() + .setTitle("Erreur") + .setDescription(`Vous devez spécifier un montant à payer. Exemple: \`${prefix}pay @membre 100\``) + .setColor(embedColor) + .setTimestamp() + .setFooter({ + text: `Demandé par ${message.author.tag}`, + iconURL: message.author.displayAvatarURL(), + }); + return message.reply({ embeds: [embed] }); + } + + let author = await new Promise((resolve, reject) => { + db.get( + `SELECT * FROM users WHERE guildId = ? AND userId = ?`, + [message.guild.id, message.author.id], + (err, row) => { + if (err) { + reject(err); + } + resolve(row); + } + ); + }); + + if (!author) { + author = await createAccount(message.guild.id, message.author.id); + } + + let userData = await new Promise((resolve, reject) => { + db.get( + `SELECT * FROM users WHERE guildId = ? AND userId = ?`, + [message.guild.id, user.id], + (err, row) => { + if (err) { + reject(err); + } + resolve(row); + } + ); + }); + + if (!userData) { + userData = await createAccount(message.guild.id, user.id); + } + + function createErrorEmbed(message, description) { + return new EmbedBuilder() + .setTitle("Erreur") + .setDescription(description) + .setColor(embedColor) + .setTimestamp() + .setFooter({ + text: `Demandé par ${message.author.tag}`, + iconURL: message.author.displayAvatarURL(), + }); + } + + function isValidAmount(amount, userPocket) { + if (isNaN(amount) || amount <= 0) { + return `Le montant doit être un nombre supérieur à 0. Exemple: \`${prefix}pay @membre 100\``; + } else if (amount > userPocket) { + return "Vous n'avez pas assez de coins."; + } + return null; + } + + let amount = args.slice(1).join("").toLowerCase(); + const suffixMultiplier = { k: 1000, m: 1000000, b: 1000000000 }; + const suffix = amount.slice(-1); + + if (amount === "all") { + amount = author.pocket; + } else { + let multiplier = 1; + if (suffix in suffixMultiplier) { + multiplier = suffixMultiplier[suffix]; + amount = amount.slice(0, -1); + } + const errorMessage = isValidAmount(amount, author.pocket); + amount = parseFloat(amount) * multiplier; + if (errorMessage) { + const embed = createErrorEmbed(message, errorMessage); + return message.reply({ embeds: [embed] }); + } + } + + db.run( + `UPDATE users SET pocket = pocket - ? WHERE guildId = ? AND userId = ?`, + [amount, message.guild.id, message.author.id], + (err) => { + if (err) { + return console.error(err); + } + db.run( + `UPDATE users SET pocket = pocket + ? WHERE guildId = ? AND userId = ?`, + [amount, message.guild.id, user.id], + (err) => { + if (err) { + return console.error(err); + } + const embed = new EmbedBuilder() + .setTitle("Paiement effectué") + .setDescription(`Vous avez payé ${user} ${amount} coins.`) + .setColor(embedColor) + .setTimestamp() + .setFooter({ + text: `Demandé par ${message.author.tag}`, + iconURL: message.author.displayAvatarURL(), + }); + message.reply({ embeds: [embed] }); + } + ); + } + ); + }), + (this.executeSlash = async (client, interaction) => { + const embedColor = await getEmbedColor(interaction.guild.id, interaction.user.id); + + const user = interaction.options.getUser("membre"); + if (user.bot) { + const embed = new EmbedBuilder() + .setTitle("Erreur") + .setDescription("Vous ne pouvez pas payer un bot.") + .setColor(embedColor) + .setTimestamp() + .setFooter({ + text: `Demandé par ${interaction.user.tag}`, + iconURL: interaction.user.displayAvatarURL(), + }); + return interaction.reply({ embeds: [embed] }); + } + + const amount = interaction.options.getInteger("montant"); + + let author = await new Promise((resolve, reject) => { + db.get( + `SELECT * FROM users WHERE guildId = ? AND userId = ?`, + [interaction.guild.id, interaction.user.id], + (err, row) => { + if (err) { + reject(err); + } + resolve(row); + } + ); + }); + + if (!author) { + author = await createAccount(interaction.guild.id, interaction.user.id); + } + + let userData = await new Promise((resolve, reject) => { + db.get( + `SELECT * FROM users WHERE guildId = ? AND userId = ?`, + [interaction.guild.id, user.id], + (err, row) => { + if (err) { + reject(err); + } + resolve(row); + } + ); + }); + + if (!userData) { + userData = await createAccount(interaction.guild.id, user.id); + } + + function createErrorEmbed(message, description) { + return new EmbedBuilder() + .setTitle("Erreur") + .setDescription(description) + .setColor(embedColor) + .setTimestamp() + .setFooter({ + text: `Demandé par ${interaction.user.tag}`, + iconURL: interaction.user.displayAvatarURL(), + }); + } + + function isValidAmount(amount, userPocket) { + if (isNaN(amount) || amount <= 0) { + return "Le montant doit être un nombre supérieur à 0."; + } else if (amount > userPocket) { + return "Vous n'avez pas assez de coins."; + } + return null; + } + + const errorMessage = isValidAmount(amount, author.pocket); + if (errorMessage) { + const embed = createErrorEmbed(interaction, errorMessage); + return interaction.reply({ embeds: [embed] }); + } + + db.run( + `UPDATE users SET pocket = pocket - ? WHERE guildId = ? AND userId = ?`, + [amount, interaction.guild.id, interaction.user.id], + (err) => { + if (err) { + return console.error(err); + } + db.run( + `UPDATE users SET pocket = pocket + ? WHERE guildId = ? AND userId = ?`, + [amount, interaction.guild.id, user.id], + (err) => { + if (err) { + return console.error(err); + } + const embed = new EmbedBuilder() + .setTitle("Paiement effectué") + .setDescription(`Vous avez payé ${user} ${amount} coins.`) + .setColor(embedColor) + .setTimestamp() + .setFooter({ + text: `Demandé par ${interaction.user.tag}`, + iconURL: interaction.user.displayAvatarURL(), + }); + interaction.reply({ embeds: [embed] }); + } + ); + } + ); + }), + (this.slashOptions = new SlashCommandBuilder() + .addUserOption((option) => + option + .setName("membre") + .setDescription("Membre à payer.") + .setRequired(true) + ) + .addIntegerOption((option) => + option + .setName("montant") + .setDescription("Le montant à payer.") + .setRequired(true) + .setMinValue(0) + ) + ) +);