diff --git a/commands/jobs/braquage.js b/commands/jobs/braquage.js new file mode 100644 index 0000000..99b05c9 --- /dev/null +++ b/commands/jobs/braquage.js @@ -0,0 +1,165 @@ +const { EmbedBuilder, ButtonStyle, ButtonBuilder, ActionRowBuilder } = require('discord.js'); +const embedColor = require('../../fonctions/embedColor.js'); +const db = require('../../fonctions/database.js'); + +module.exports = { + aliases: ['braquage'], + description: 'Tente un braquage. (cout : 5coins)', + emote: '🔐', + utilisation: '<@membre>', + permission: 0, + + async execute(message, args, client) { + + /////////////////////////////// Calcule des donnĂ©es de la cible //////////////////////////////////////////////// + + const cible = message.mentions.users.first(); + if (!cible) { + const embed = new EmbedBuilder() + .setTitle('Erreur') + .setDescription('❌ Vous devez mentionner un membre.') + .setColor(await embedColor(message.author.id, message.guild.id)) + .setTimestamp() + .setFooter({ text: `DemandĂ© par ${message.author.tag}`, iconURL: message.author.displayAvatarURL() }); + + return message.reply({ embeds: [embed], allowedMentions: { repliedUser: false } }); + } + const cibleBD = await new Promise((resolve, reject) => { + db.get(`SELECT * FROM users WHERE guildId = ? AND userId = ?`, [message.guild.id, cible.id], (err, row) => { + if (err) reject(err); + resolve(row); + }); + }); + if (cibleBD.bank <= 100) { + return message.reply('votre cible n\'a pas suffisament de coins en bank pour etre voler.') + } + + /////////////////////////////// Calcule des donnĂ©es du message.author ///////////////////////////////////////// + + const 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); + }); + }); + const usercoinsEnBank = user.bank + if (usercoinsEnBank < 8) { + const embed = new EmbedBuilder() + .setTitle('Braquage Impossible') + .setDescription(`❌ Vous n'avez pas assez de reputation. Il faut \`8\` reputation mais vous n'avez que \`${usercoinsEnBank}\`reputation`) + .setColor(await embedColor(message.author.id, message.guild.id)) + .setTimestamp() + .setFooter({ text: `DemandĂ© par ${message.author.tag}`, iconURL: message.author.displayAvatarURL() }); + + return message.reply({ embeds: [embed], allowedMentions: { repliedUser: false } }); + } + const lastBraquage = user.lastBraquage + if (lastBraquage > Date.now() - 7200000) { + const embed = new EmbedBuilder() + .setTitle('Braquage Impossible') + .setDescription(`❌ Vous avez dĂ©jĂ  braquage rĂ©cemment. Veuillez attendre ${Math.floor((lastBraquage + 7200000 - Date.now()) / 60000)} minutes avant de pouvoir braquer Ă  nouveau.`) + .setColor(await embedColor(message.author.id, message.guild.id)) + .setTimestamp() + .setFooter({ text: `DemandĂ© par ${message.author.tag}`, iconURL: message.author.displayAvatarURL() }); + + return message.reply({ embeds: [embed], allowedMentions: { repliedUser: false } }); + } + + ///////////////////////////////// Payage + MaJ du braquage ///////////////////////////////////////////////////// + + db.run(`UPDATE users SET reputation = reputation - 5 WHERE guildId =? AND userId =?`, [message.guild.id, message.author.id], (err) => { + if (err) { + console.log(`${err}`.red) + } + }); + db.run(`UPDATE users SET lastBraquage =? WHERE guildId =? AND userId =?`, [Date.now(), message.guild.id, message.author.id], (err) => { + if (err) { + console.log(`${err}`.red) + } + }); + + /////////////////////////////////// Affichage du 1er msg /////////////////////////////////////////////////////// + + embedColor(message.author.id, message.guild.id).then(color => { + const embed = new EmbedBuilder() + .setTitle('🔐 Braquage') + .setImage('https://images-ext-1.discordapp.net/external/Zz7GmmFoFdFRB7GCjiJGaDHDjJi8noOLY8zasCmUOGQ/https/media.giphy.com/media/26uflBhaGt5lQsaCA/giphy.gif') + .setDescription(`Vous braquer la banque de ${cible}. La porte du coffre s'ouvre...\nRĂ©sultat dans 5 secondes...`) + .setColor(color) + .setTimestamp() + .setFooter({ text: `DemandĂ© par ${message.author.tag}`, iconURL: message.author.displayAvatarURL() }) + + return message.reply({ embeds: [embed], allowedMentions: { repliedUser: false } }) + }); + await new Promise(resolve => setTimeout(resolve, 5000)); + + /////////////////////////////////// Calcule des resultats /////////////////////////////////////////////////////// + + const result = Math.floor(Math.random() * 4); + let gain = 0; + let coinsEnBank = 0; + if (result === 0) { + gain = 1; + coinsEnBank = Math.floor(Math.random() * (cibleBD.bank / 2)); + + await new Promise((resolve, reject) => { + db.run(`UPDATE users SET bank = bank - ? WHERE userId = ? AND guildId = ?`, [coinsEnBank, message.author.id, message.guild.id], (err) => { + if (err) { + reject(err); + } else { + resolve(); + } + }); + }); + await new Promise((resolve, reject) => { + db.run(`UPDATE users SET bank = bank + ? WHERE userId = ? AND guildId = ?`, [coinsEnBank, cible.id, message.guild.id], (err) => { + if (err) { + reject(err); + } else { + resolve(); + } + }); + }); + } else { + gain = 0; + coinsEnBank = 0 + await new Promise((resolve, reject) => { + db.run(`UPDATE users SET bank = bank - 3 WHERE userId = ? AND guildId = ?`, [cible.id, message.guild.id], (err) => { + if (err) { + reject(err); + } else { + resolve(); + } + }); + }); + } + + //////////////////////////////////// Affichage de la reponse /////////////////////////////////////////////////// + + if (gain == 1) { + embedColor(message.author.id, message.guild.id).then(color => { + const embed = new EmbedBuilder() + .setTitle('🔐 Braquage') + .setDescription(`Vous avez braquer <@${cible.id}> et vous n'etes pas tomber sur un agent de securitĂ©. Vous avez gagnĂ© \`${coinsEnBank}\`coins !`) + .setColor(color) + .setTimestamp() + .setFooter({ text: `DemandĂ© par ${message.author.tag}`, iconURL: message.author.displayAvatarURL() }) + + message.reply({ embeds: [embed], allowedMentions: { repliedUser: false } }) + }); + return + } else { + embedColor(message.author.id, message.guild.id).then(color => { + const embed = new EmbedBuilder() + .setTitle('🔐 Braquage') + .setDescription(`Vous avez braquer ${args[0]} mais vous etes tomber sur un policier. Vous avez non seulement perdu votre gain mais le policier vous a obliger a payer \`3\`reputation de dedommagement`) + .setColor(color) + .setTimestamp() + .setFooter({ text: `DemandĂ© par ${message.author.tag}`, iconURL: message.author.displayAvatarURL() }) + + message.reply({ embeds: [embed], allowedMentions: { repliedUser: false } }) + }); + return + } + } +}; \ No newline at end of file diff --git a/fonctions/database.js b/fonctions/database.js index f30b704..93e90e0 100644 --- a/fonctions/database.js +++ b/fonctions/database.js @@ -29,6 +29,7 @@ db.run(`CREATE TABLE IF NOT EXISTS users ( lastTrep INTERGER DEFAULT 0, lastHack INTERGER DEFAULT 0, lastKill INTERGER DEFAULT 0, + lastBraquage INTERGER DEFAULT 0, job TEXT, teamId TEXT, teamRole TEXT,