diff --git a/index.js b/index.js index 684890b19..b4dcd2200 100644 --- a/index.js +++ b/index.js @@ -4,8 +4,7 @@ require('core/MessageError'); require('core/Tools'); const Draftbot = require('core/DraftBot'); -(async Drafbot => { - +(async (Drafbot) => { await Drafbot.init(); /** @@ -19,21 +18,21 @@ const Draftbot = require('core/DraftBot'); }); await client.guilds.cache.get(JsonReader.app.MAIN_SERVER_ID) - .channels - .cache - .get(JsonReader.app.CONSOLE_CHANNEL_ID) - .send(JsonReader.bot.startStatus + JsonReader.package.version) - .catch(console.error); + .channels + .cache + .get(JsonReader.app.CONSOLE_CHANNEL_ID) + .send(JsonReader.bot.startStatus + JsonReader.package.version) + .catch(console.error); await client.user - .setActivity(JsonReader.bot.activity) - .catch(console.error); + .setActivity(JsonReader.bot.activity) + .catch(console.error); }; /** * Will be executed each time the bot join a new server */ - const onDiscordGuildCreate = async guilde => { + const onDiscordGuildCreate = async (guilde) => { // let string = ""; // let serverManager = new ServerManager(); // let { validation, nbMembres, nbBot, ratio } = serverManager.getValidationInfos(guilde); @@ -49,7 +48,7 @@ const Draftbot = require('core/DraftBot'); /** * Will be executed each time the bot leave a server */ - const onDiscordGuildDelete = async guilde => { + const onDiscordGuildDelete = async (guilde) => { // let string = ""; // let serverManager = new ServerManager(); // let { validation, nbMembres, nbBot, ratio } = serverManager.getValidationInfos(guilde); @@ -63,12 +62,13 @@ const Draftbot = require('core/DraftBot'); * @param {module:"discord.js".Message} message * @return {Promise} */ - const onDiscordMessage = async message => { + const onDiscordMessage = async (message) => { if (message.author.bot) return; - if (message.channel.type === 'dm') + if (message.channel.type === 'dm') { await handlePrivateMessage(message); - else + } else { await handleMessage(message); + } }; /** @@ -76,8 +76,8 @@ const Draftbot = require('core/DraftBot'); * @param {module:"discord.js".MessageReaction} reaction * @return {Promise} */ - const onDiscordMessageReactionAdd = async reaction => { - //check if the user is a bot before doing anything + const onDiscordMessageReactionAdd = async (reaction) => { + // check if the user is a bot before doing anything // if (reaction.users.last().bot) return; // // let Text = await chargeText(reaction); @@ -97,7 +97,6 @@ const Draftbot = require('core/DraftBot'); client.on('messageReactionAdd', onDiscordMessageReactionAdd); await client.login(JsonReader.app.DISCORD_CLIENT_TOKEN); - })(Draftbot); // /** @@ -203,4 +202,4 @@ const Draftbot = require('core/DraftBot'); // */ // function sendLeavingMessage(guilde) { // guilde.owner.send(Console.departurMessage); -// } \ No newline at end of file +// } diff --git a/package.json b/package.json index a079f0ff9..6c857a922 100644 --- a/package.json +++ b/package.json @@ -15,11 +15,8 @@ "config": "./config", "core": "./src/core", "commands": "./src/commands", - "entities": "./src/core/entities", - "repositories": "./src/core/repositories", "models": "./src/core/models", - "ressources": "./ressources", - "data": "./data" + "ressources": "./ressources" }, "dependencies": { "chai": "^4.2.0", @@ -31,5 +28,9 @@ "sequelize": "^5.21.7", "sqlite": "^4.0.7", "sqlite3": "^4.1.1" + }, + "devDependencies": { + "eslint": "^7.4.0", + "eslint-config-google": "^0.14.0" } } diff --git a/src/commands/admin/ChangeLanguageCommand.js b/src/commands/admin/ChangeLanguageCommand.js index 196807f51..cd65ee16c 100644 --- a/src/commands/admin/ChangeLanguageCommand.js +++ b/src/commands/admin/ChangeLanguageCommand.js @@ -5,12 +5,12 @@ * @param {String[]} args=[] - Additional arguments sent with the command */ -const changeLanguageCommand = async function (language, message, args) { +const changeLanguageCommand = async function(language, message, args) { if ((await canPerformCommand(message, language, - PERMISSION.ROLE.ADMINISTRATOR)) !== true) { + PERMISSION.ROLE.ADMINISTRATOR)) !== true) { return; } - let embed = new discord.MessageEmbed(); + const embed = new discord.MessageEmbed(); let server; [server] = await Servers.getOrRegister(message.guild.id); @@ -20,12 +20,12 @@ const changeLanguageCommand = async function (language, message, args) { server.language = LANGUAGE.FRENCH; } embed.setColor(JsonReader.bot.embed.default) - .setAuthor(format( - JsonReader.commands.changeLanguage.getTranslation(language).title, - { pseudo: message.author.username }), + .setAuthor(format( + JsonReader.commands.changeLanguage.getTranslation(language).title, + {pseudo: message.author.username}), message.author.displayAvatarURL()) - .setDescription(format( - JsonReader.commands.changeLanguage.getTranslation(language).desc)); + .setDescription(format( + JsonReader.commands.changeLanguage.getTranslation(language).desc)); message.channel.send(embed); await server.save(); }; @@ -35,4 +35,3 @@ module.exports = { }; - diff --git a/src/commands/admin/ChangePointsCommand.js b/src/commands/admin/ChangePointsCommand.js index c52078f6f..581d5e84a 100644 --- a/src/commands/admin/ChangePointsCommand.js +++ b/src/commands/admin/ChangePointsCommand.js @@ -10,9 +10,9 @@ const ChangePointsCommand = async function(language, message, args) { return; } - let embed = new discord.MessageEmbed(); + const embed = new discord.MessageEmbed(); let entity; - let playerId = message.mentions.users.last().id; + const playerId = message.mentions.users.last().id; [entity] = await Entities.getOrRegister(playerId); await entity.Player.setPoints(args[1]); await entity.Player.save(); diff --git a/src/commands/admin/ChangePointsWeekCommand.js b/src/commands/admin/ChangePointsWeekCommand.js index 8bea394eb..3e4b036cd 100644 --- a/src/commands/admin/ChangePointsWeekCommand.js +++ b/src/commands/admin/ChangePointsWeekCommand.js @@ -10,9 +10,9 @@ const ChangePointsWeekCommand = async function(language, message, args) { return; } - let embed = new discord.MessageEmbed(); + const embed = new discord.MessageEmbed(); let entity; - let playerId = message.mentions.users.last().id; + const playerId = message.mentions.users.last().id; [entity] = await Entities.getOrRegister(playerId); await entity.Player.setPointsWeek(args[1]); await entity.Player.save(); diff --git a/src/commands/admin/ChangePrefixCommand.js b/src/commands/admin/ChangePrefixCommand.js index e46731f49..f9fe6e2e8 100644 --- a/src/commands/admin/ChangePrefixCommand.js +++ b/src/commands/admin/ChangePrefixCommand.js @@ -6,34 +6,32 @@ * @param {String[]} args=[] - Additional arguments sent with the command */ -const ChangePrefixCommand = async function (language, message, args) { - - if ((await canPerformCommand(message,language, - PERMISSION.ROLE.ADMINISTRATOR)) !== true) { - return; - } - - let embed = new discord.MessageEmbed(); - let newPrefix = args[0]; - if( newPrefix == undefined){ - embed.setColor(JsonReader.bot.embed.error) - .setAuthor(format(JsonReader.commands.changePrefix.getTranslation(language).error, { pseudo: message.author.username }), message.author.displayAvatarURL()) +const ChangePrefixCommand = async function(language, message, args) { + if ((await canPerformCommand(message, language, + PERMISSION.ROLE.ADMINISTRATOR)) !== true) { + return; + } + + const embed = new discord.MessageEmbed(); + const newPrefix = args[0]; + if ( newPrefix == undefined) { + embed.setColor(JsonReader.bot.embed.error) + .setAuthor(format(JsonReader.commands.changePrefix.getTranslation(language).error, {pseudo: message.author.username}), message.author.displayAvatarURL()) .setDescription(JsonReader.commands.changePrefix.getTranslation(language).descError); - return await message.channel.send(embed); - } - let server; - [server] = await Servers.getOrRegister(message.guild.id); - server.prefix = newPrefix; - await server.save(); - embed.setColor(JsonReader.bot.embed.default) - .setAuthor(format(JsonReader.commands.changePrefix.getTranslation(language).ok, { pseudo: message.author.username }), message.author.displayAvatarURL()) - .setDescription(format(JsonReader.commands.changePrefix.getTranslation(language).descOk, {newPrefix: newPrefix })); return await message.channel.send(embed); + } + let server; + [server] = await Servers.getOrRegister(message.guild.id); + server.prefix = newPrefix; + await server.save(); + embed.setColor(JsonReader.bot.embed.default) + .setAuthor(format(JsonReader.commands.changePrefix.getTranslation(language).ok, {pseudo: message.author.username}), message.author.displayAvatarURL()) + .setDescription(format(JsonReader.commands.changePrefix.getTranslation(language).descOk, {newPrefix: newPrefix})); + return await message.channel.send(embed); }; module.exports = { - 'prefix': ChangePrefixCommand, - }; - + 'prefix': ChangePrefixCommand, +}; diff --git a/src/commands/admin/GiveBadgeCommand.js b/src/commands/admin/GiveBadgeCommand.js index d6613f1aa..6406a5a0b 100644 --- a/src/commands/admin/GiveBadgeCommand.js +++ b/src/commands/admin/GiveBadgeCommand.js @@ -4,21 +4,21 @@ * @param {module:"discord.js".Message} message - Message from the discord server * @param {String[]} args=[] - Additional arguments sent with the command */ -const giveBadgeCommand = async function (language, message, args) { +const giveBadgeCommand = async function(language, message, args) { if ((await canPerformCommand(message, language, PERMISSION.ROLE.BADGEMANAGER)) !== true) { return; } - let embed = new discord.MessageEmbed(); + const embed = new discord.MessageEmbed(); // the author of the command is the author of the bot - let playerId = message.mentions.users.last().id; + const playerId = message.mentions.users.last().id; [entity] = await Entities.getOrRegister(playerId); await entity.Player.addBadge(args[0]); await entity.Player.save(); embed.setColor(JsonReader.bot.embed.default) - .setAuthor(format(JsonReader.commands.giveBadgeCommand.getTranslation(language).giveSuccess, { pseudo: message.author.username }), message.author.displayAvatarURL()) - .setDescription(format(JsonReader.commands.giveBadgeCommand.getTranslation(language).descGive, { badge: args[0], player: message.mentions.users.last() })); + .setAuthor(format(JsonReader.commands.giveBadgeCommand.getTranslation(language).giveSuccess, {pseudo: message.author.username}), message.author.displayAvatarURL()) + .setDescription(format(JsonReader.commands.giveBadgeCommand.getTranslation(language).descGive, {badge: args[0], player: message.mentions.users.last()})); return await message.channel.send(embed); }; diff --git a/src/commands/admin/GiveCommand.js b/src/commands/admin/GiveCommand.js index 158d99431..6a3818dda 100644 --- a/src/commands/admin/GiveCommand.js +++ b/src/commands/admin/GiveCommand.js @@ -5,42 +5,41 @@ * @param {String[]} args=[] - Additional arguments sent with the command */ -const GiveCommand = async function (language, message, args) { - if ((await canPerformCommand(message, language, - PERMISSION.ROLE.BOTOWNER)) !== true) { - return; - } - let embed = new discord.MessageEmbed(); - let entity; - let player = getUserFromMention(args[0]); - [entity] = await Entities.getOrRegister(player.id); - let itemType = args[1]; - let itemId = args[2]; - await entity.Player.Inventory.giveObject(itemId, itemType); - await entity.Player.Inventory.save(); - embed.setColor(JsonReader.bot.embed.default) - .setAuthor(format(JsonReader.commands.giveCommand.getTranslation(language).giveSuccess, { pseudo: message.author.username }), message.author.displayAvatarURL()) - .setDescription(format(JsonReader.commands.giveCommand.getTranslation(language).descGive, { type: itemType, id: itemId, player: player })); - return await message.channel.send(embed); +const GiveCommand = async function(language, message, args) { + if ((await canPerformCommand(message, language, + PERMISSION.ROLE.BOTOWNER)) !== true) { + return; + } + const embed = new discord.MessageEmbed(); + let entity; + const player = getUserFromMention(args[0]); + [entity] = await Entities.getOrRegister(player.id); + const itemType = args[1]; + const itemId = args[2]; + await entity.Player.Inventory.giveObject(itemId, itemType); + await entity.Player.Inventory.save(); + embed.setColor(JsonReader.bot.embed.default) + .setAuthor(format(JsonReader.commands.giveCommand.getTranslation(language).giveSuccess, {pseudo: message.author.username}), message.author.displayAvatarURL()) + .setDescription(format(JsonReader.commands.giveCommand.getTranslation(language).descGive, {type: itemType, id: itemId, player: player})); + return await message.channel.send(embed); }; function getUserFromMention(mention) { - if (!mention) return; + if (!mention) return; - if (mention.startsWith('<@') && mention.endsWith('>')) { - mention = mention.slice(2, -1); + if (mention.startsWith('<@') && mention.endsWith('>')) { + mention = mention.slice(2, -1); - if (mention.startsWith('!')) { - mention = mention.slice(1); - } + if (mention.startsWith('!')) { + mention = mention.slice(1); + } - return client.users.cache.get(mention); - } + return client.users.cache.get(mention); + } } module.exports = { - 'give': GiveCommand, - }; - + 'give': GiveCommand, +}; diff --git a/src/commands/admin/ListItemsCommand.js b/src/commands/admin/ListItemsCommand.js index b66ddf007..0a1112a0b 100644 --- a/src/commands/admin/ListItemsCommand.js +++ b/src/commands/admin/ListItemsCommand.js @@ -5,150 +5,150 @@ * @param {String[]} args=[] - Additional arguments sent with the command */ -const listItemsCommand = async function (language, message, args) { - if ((await canPerformCommand(message, language, PERMISSION.ROLE.BOTOWNER)) !== true) { - return; - } - let fs = require('fs'); - let embed = new discord.MessageEmbed(); - embed.setColor(JsonReader.bot.embed.default) - .setAuthor(format(JsonReader.commands.listItems.getTranslation(language).title, { pseudo: message.author.username }), message.author.displayAvatarURL()); - await message.channel.send(embed); +const listItemsCommand = async function(language, message, args) { + if ((await canPerformCommand(message, language, PERMISSION.ROLE.BOTOWNER)) !== true) { + return; + } + const fs = require('fs'); + const embed = new discord.MessageEmbed(); + embed.setColor(JsonReader.bot.embed.default) + .setAuthor(format(JsonReader.commands.listItems.getTranslation(language).title, {pseudo: message.author.username}), message.author.displayAvatarURL()); + await message.channel.send(embed); - //Delete all old list - try { - fs.statSync('allArmors.txt'); - fs.unlinkSync('allArmors.txt'); - } catch (err) { } - try { - fs.statSync('allWeapons.txt'); - fs.unlinkSync('allWeapons.txt'); - } catch (err) { } - try { - fs.statSync('allPotions.txt'); - fs.unlinkSync('allPotions.txt'); - } catch (err) { } - try { - fs.statSync('allItems.txt'); - fs.unlinkSync('allItems.txt'); - } catch (err) { } - try { - fs.statSync('allObjects.txt'); - fs.unlinkSync('allObjects.txt'); - } catch (err) { } + // Delete all old list + try { + fs.statSync('allArmors.txt'); + fs.unlinkSync('allArmors.txt'); + } catch (err) { } + try { + fs.statSync('allWeapons.txt'); + fs.unlinkSync('allWeapons.txt'); + } catch (err) { } + try { + fs.statSync('allPotions.txt'); + fs.unlinkSync('allPotions.txt'); + } catch (err) { } + try { + fs.statSync('allItems.txt'); + fs.unlinkSync('allItems.txt'); + } catch (err) { } + try { + fs.statSync('allObjects.txt'); + fs.unlinkSync('allObjects.txt'); + } catch (err) { } - //List armors - files = fs.readdirSync("ressources/text/armors"); - fs.appendFileSync('allItems.txt', "ALL ARMORS :\n"); - files.forEach(function (file) { - if (file != "0.json") { - let data = fs.readFileSync("ressources/text/armors/" + file); - let armor = JSON.parse(data); - let string; - if (language === LANGUAGE.FRENCH) { - string = armor.translations[language] + ' - Rareté: ' + armor.rarity + ' - Défense brute: ' + armor.rawDefense; - } - if (language === LANGUAGE.ENGLISH) { - string = armor.translations[language] + ' - Rarity: ' + armor.rarity + ' - Raw defense: ' + armor.rawDefense; - } - fs.appendFileSync('allArmors.txt', string + "\n"); - fs.appendFileSync('allItems.txt', string + "\n"); - } - }); - fs.appendFileSync('allItems.txt', "\n"); - message.channel.send({ - files: [{ - attachment: 'allArmors.txt', - name: 'allArmors.txt', - }], - }); + // List armors + files = fs.readdirSync('ressources/text/armors'); + fs.appendFileSync('allItems.txt', 'ALL ARMORS :\n'); + files.forEach(function(file) { + if (file != '0.json') { + const data = fs.readFileSync('ressources/text/armors/' + file); + const armor = JSON.parse(data); + let string; + if (language === LANGUAGE.FRENCH) { + string = armor.translations[language] + ' - Rareté: ' + armor.rarity + ' - Défense brute: ' + armor.rawDefense; + } + if (language === LANGUAGE.ENGLISH) { + string = armor.translations[language] + ' - Rarity: ' + armor.rarity + ' - Raw defense: ' + armor.rawDefense; + } + fs.appendFileSync('allArmors.txt', string + '\n'); + fs.appendFileSync('allItems.txt', string + '\n'); + } + }); + fs.appendFileSync('allItems.txt', '\n'); + message.channel.send({ + files: [{ + attachment: 'allArmors.txt', + name: 'allArmors.txt', + }], + }); - //List weapons - files = fs.readdirSync("ressources/text/weapons"); - fs.appendFileSync('allItems.txt', "ALL WEAPONS :\n"); - files.forEach(function (file) { - if (file != "0.json") { - let data = fs.readFileSync("ressources/text/weapons/" + file); - let weapons = JSON.parse(data); - let string; - if (language == LANGUAGE.FRENCH) { - string = weapons.translations[language] + ' - Rareté: ' + weapons.rarity + ' - Attaque brute: ' + weapons.rawAttack; - } - if (language == LANGUAGE.ENGLISH) { - string = weapons.translations[language] + ' - Rarity: ' + weapons.rarity + ' - Raw attack: ' + weapons.rawAttack; - } - fs.appendFileSync('allWeapons.txt', string + "\n"); - fs.appendFileSync('allItems.txt', string + "\n"); - } - }); - fs.appendFileSync('allItems.txt', "\n"); - message.channel.send({ - files: [{ - attachment: 'allWeapons.txt', - name: 'allWeapon.txt', - }], - }); + // List weapons + files = fs.readdirSync('ressources/text/weapons'); + fs.appendFileSync('allItems.txt', 'ALL WEAPONS :\n'); + files.forEach(function(file) { + if (file != '0.json') { + const data = fs.readFileSync('ressources/text/weapons/' + file); + const weapons = JSON.parse(data); + let string; + if (language == LANGUAGE.FRENCH) { + string = weapons.translations[language] + ' - Rareté: ' + weapons.rarity + ' - Attaque brute: ' + weapons.rawAttack; + } + if (language == LANGUAGE.ENGLISH) { + string = weapons.translations[language] + ' - Rarity: ' + weapons.rarity + ' - Raw attack: ' + weapons.rawAttack; + } + fs.appendFileSync('allWeapons.txt', string + '\n'); + fs.appendFileSync('allItems.txt', string + '\n'); + } + }); + fs.appendFileSync('allItems.txt', '\n'); + message.channel.send({ + files: [{ + attachment: 'allWeapons.txt', + name: 'allWeapon.txt', + }], + }); - //List potions - files = fs.readdirSync("ressources/text/potions"); - fs.appendFileSync('allItems.txt', "ALL POTIONS :\n"); - files.forEach(function (file) { - if (file != "0.json") { - let data = fs.readFileSync("ressources/text/potions/" + file); - let Potions = JSON.parse(data); - let string; - if (language == LANGUAGE.FRENCH) { - string = Potions.translations[language] + ' - Rareté: ' + Potions.rarity + ' - Pouvoir: ' + Potions.power + ' - Nature: ' + Potions.nature; - } - if (language == LANGUAGE.ENGLISH) { - string = Potions.translations[language] + ' - Rarity: ' + Potions.rarity + ' - Power: ' + Potions.power + ' - Nature: ' + Potions.nature; - } - fs.appendFileSync('allPotions.txt', string + "\n"); - fs.appendFileSync('allItems.txt', string + "\n"); - } - }); - fs.appendFileSync('allItems.txt', "\n"); - message.channel.send({ - files: [{ - attachment: 'allPotions.txt', - name: 'allPotions.txt', - }], - }); + // List potions + files = fs.readdirSync('ressources/text/potions'); + fs.appendFileSync('allItems.txt', 'ALL POTIONS :\n'); + files.forEach(function(file) { + if (file != '0.json') { + const data = fs.readFileSync('ressources/text/potions/' + file); + const Potions = JSON.parse(data); + let string; + if (language == LANGUAGE.FRENCH) { + string = Potions.translations[language] + ' - Rareté: ' + Potions.rarity + ' - Pouvoir: ' + Potions.power + ' - Nature: ' + Potions.nature; + } + if (language == LANGUAGE.ENGLISH) { + string = Potions.translations[language] + ' - Rarity: ' + Potions.rarity + ' - Power: ' + Potions.power + ' - Nature: ' + Potions.nature; + } + fs.appendFileSync('allPotions.txt', string + '\n'); + fs.appendFileSync('allItems.txt', string + '\n'); + } + }); + fs.appendFileSync('allItems.txt', '\n'); + message.channel.send({ + files: [{ + attachment: 'allPotions.txt', + name: 'allPotions.txt', + }], + }); - //List Objects - files = fs.readdirSync("ressources/text/objects"); - fs.appendFileSync('allItems.txt', "ALL OBJECTS :\n"); - files.forEach(function (file) { - if (file != "0.json") { - let data = fs.readFileSync("ressources/text/objects/" + file); - let Objects = JSON.parse(data); - let string; - if (language == LANGUAGE.FRENCH) { - string = Objects.translations[language] + ' - Rareté: ' + Objects.rarity + ' - Pouvoir: ' + Objects.power + ' - Nature: ' + Objects.nature; - } - if (language == LANGUAGE.ENGLISH) { - string = Objects.translations[language] + ' - Rarity: ' + Objects.rarity + ' - Power: ' + Objects.power + ' - Nature: ' + Objects.nature; - } - fs.appendFileSync('allObjects.txt', string + "\n"); - fs.appendFileSync('allItems.txt', string + "\n"); - } - }); - fs.appendFileSync('allItems.txt', "\n"); - message.channel.send({ - files: [{ - attachment: 'allObjects.txt', - name: 'allObjects.txt', - }], - }); + // List Objects + files = fs.readdirSync('ressources/text/objects'); + fs.appendFileSync('allItems.txt', 'ALL OBJECTS :\n'); + files.forEach(function(file) { + if (file != '0.json') { + const data = fs.readFileSync('ressources/text/objects/' + file); + const Objects = JSON.parse(data); + let string; + if (language == LANGUAGE.FRENCH) { + string = Objects.translations[language] + ' - Rareté: ' + Objects.rarity + ' - Pouvoir: ' + Objects.power + ' - Nature: ' + Objects.nature; + } + if (language == LANGUAGE.ENGLISH) { + string = Objects.translations[language] + ' - Rarity: ' + Objects.rarity + ' - Power: ' + Objects.power + ' - Nature: ' + Objects.nature; + } + fs.appendFileSync('allObjects.txt', string + '\n'); + fs.appendFileSync('allItems.txt', string + '\n'); + } + }); + fs.appendFileSync('allItems.txt', '\n'); + message.channel.send({ + files: [{ + attachment: 'allObjects.txt', + name: 'allObjects.txt', + }], + }); - message.channel.send({ - files: [{ - attachment: 'allItems.txt', - name: 'allItems.txt', - }], - }); + message.channel.send({ + files: [{ + attachment: 'allItems.txt', + name: 'allItems.txt', + }], + }); }; module.exports = { - 'list': listItemsCommand, -}; \ No newline at end of file + 'list': listItemsCommand, +}; diff --git a/src/commands/admin/SendDataCommand.js b/src/commands/admin/SendDataCommand.js index a2bfc0af9..0799c144f 100644 --- a/src/commands/admin/SendDataCommand.js +++ b/src/commands/admin/SendDataCommand.js @@ -5,9 +5,8 @@ * @param {String[]} args=[] - Additional arguments sent with the command */ const SendDataCommand = async (language, message, args) => { - if ((await canPerformCommand(message, language, - PERMISSION.ROLE.BOTOWNER)) !== true) { + PERMISSION.ROLE.BOTOWNER)) !== true) { return; } @@ -17,7 +16,6 @@ const SendDataCommand = async (language, message, args) => { name: 'database.sqlite', }], }); - }; module.exports = { diff --git a/src/commands/admin/SendPrivateMessage.js b/src/commands/admin/SendPrivateMessage.js index fbab6a7c8..5799d9043 100644 --- a/src/commands/admin/SendPrivateMessage.js +++ b/src/commands/admin/SendPrivateMessage.js @@ -5,34 +5,34 @@ * @param {String[]} args=[] - Additional arguments sent with the command */ -const SendPrivateMessage = async function (language, message, args) { - - if ((await canPerformCommand(message, language, - PERMISSION.ROLE.SUPPORT)) !== true) { - return; - } - - var userId = args[0]; - var messageToSend = args.join(' ').replace(userId, '') + +const SendPrivateMessage = async function(language, message, args) { + if ((await canPerformCommand(message, language, + PERMISSION.ROLE.SUPPORT)) !== true) { + return; + } + + const userId = args[0]; + const messageToSend = args.join(' ').replace(userId, '') + format(JsonReader.commands.sendPrivateMessage.getTranslation(language).signature, { - username: message.author.username + username: message.author.username, }); - if (userId === undefined || args[1] === undefined) - return await sendErrorMessage(message, language); - - const user = client.users.cache.get(userId); - let embed = new discord.MessageEmbed(); - embed.setColor(JsonReader.bot.embed.default) - .setTitle(format(JsonReader.commands.sendPrivateMessage.getTranslation(language).title, { - username: user.username - })) - .setDescription(JsonReader.commands.sendPrivateMessage.getTranslation(language).ok + messageToSend) - .setImage(message.attachments.size > 0 ? [...message.attachments.values()][0].url : ''); - - user.send(messageToSend); - sendMessageAttachments(message, user); - return await message.channel.send(embed); + if (userId === undefined || args[1] === undefined) { + return await sendErrorMessage(message, language); + } + + const user = client.users.cache.get(userId); + const embed = new discord.MessageEmbed(); + embed.setColor(JsonReader.bot.embed.default) + .setTitle(format(JsonReader.commands.sendPrivateMessage.getTranslation(language).title, { + username: user.username, + })) + .setDescription(JsonReader.commands.sendPrivateMessage.getTranslation(language).ok + messageToSend) + .setImage(message.attachments.size > 0 ? [...message.attachments.values()][0].url : ''); + + user.send(messageToSend); + sendMessageAttachments(message, user); + return await message.channel.send(embed); }; /** @@ -40,14 +40,13 @@ const SendPrivateMessage = async function (language, message, args) { * @param {module:"discord.js".Message} message - Message from the discord server */ async function sendErrorMessage(message, language) { - return await message.channel.send(new discord.MessageEmbed().setColor(JsonReader.bot.embed.error) - .setAuthor(format(JsonReader.commands.sendPrivateMessage.getTranslation(language).error, { - pseudo: message.author.username - }), message.author.displayAvatarURL()) - .setDescription(JsonReader.commands.sendPrivateMessage.getTranslation(language).descError)); - + return await message.channel.send(new discord.MessageEmbed().setColor(JsonReader.bot.embed.error) + .setAuthor(format(JsonReader.commands.sendPrivateMessage.getTranslation(language).error, { + pseudo: message.author.username, + }), message.author.displayAvatarURL()) + .setDescription(JsonReader.commands.sendPrivateMessage.getTranslation(language).descError)); } module.exports = { - 'dm': SendPrivateMessage, -}; \ No newline at end of file + 'dm': SendPrivateMessage, +}; diff --git a/src/commands/admin/TestCommand.js b/src/commands/admin/TestCommand.js index 941e65749..02116aff3 100644 --- a/src/commands/admin/TestCommand.js +++ b/src/commands/admin/TestCommand.js @@ -5,237 +5,235 @@ * @param {String[]} args=[] - Additional arguments sent with the command */ const TestCommand = async (language, message, args) => { + let authorized = false; - let authorized = false; + if (JsonReader.app.TEST_MODE !== true) { + return; + } else { + authorized = true; + } - if (JsonReader.app.TEST_MODE !== true) { - return; - } - else { - authorized = true; - } + if (!authorized) { // Additional security in case of error + return; + } - if (!authorized) { //Additional security in case of error - return; - } - - if (args.length === 0) { - await message.channel.send(":x: | Pas assez d'arguments"); - return; - } + if (args.length === 0) { + await message.channel.send(':x: | Pas assez d\'arguments'); + return; + } - let author; - [author] = await Entities.getOrRegister(message.author.id); - try { - switch (args[0].toLowerCase()) { - case "lvl": - case "level": - if (args.length === 2) { - author.Player.level = parseInt(args[1]); - author.Player.save(); - } else { - await message.channel.send("Usage correct: test level "); - return; - } - break; - case "score": - if (args.length === 2) { - author.Player.score = parseInt(args[1]); - author.Player.save(); - } else { - await message.channel.send("Usage correct: test score "); - return; - } - break; - case "weeklyscore": - if (args.length === 2) { - author.Player.weeklyScore = parseInt(args[1]); - author.Player.save(); - } else { - await message.channel.send("Usage correct: test weeklyscore "); - return; - } - break; - case "xp": - case "experience": - if (args.length === 2) { - author.Player.experience = parseInt(args[1]); - author.Player.save(); - } else { - await message.channel.send("Usage correct: test experience "); - return; - } - break; - case "money": - if (args.length === 2) { - author.Player.money = parseInt(args[1]); - author.Player.save(); - } else { - await message.channel.send("Usage correct: test experience "); - return; - } - break; - case "givebadge": - if (args.length === 2) { - author.Player.giveBadge(args[1]); - author.Player.save(); - } else { - await message.channel.send("Usage correct: test givebadge "); - return; - } - break; - case "clearbadges": - if (args.length === 1) { - author.Player.badges = ""; - author.Player.save(); - } else { - await message.channel.send("Usage correct: test clearbadges"); - return; - } - break; - case "resetreport": - case "rr": - if (args.length === 1) { - author.Player.lastReportAt = new Date(1980, 0); - author.Player.save(); - } else { - await message.channel.send("Usage correct: test resetreport"); - return; - } - break; - case "maxhealth": - if (args.length === 2) { - author.maxHealth = parseInt(args[1]); - author.save(); - } else { - await message.channel.send("Usage correct: test maxhealth "); - return; - } - break; - case "health": - if (args.length === 2) { - author.health = parseInt(args[1]); - author.save(); - } else { - await message.channel.send("Usage correct: test health "); - return; - } - break; - case "attack": - if (args.length === 2) { - author.attack = parseInt(args[1]); - author.save(); - } else { - await message.channel.send("Usage correct: test attack "); - return; - } - break; - case "defense": - if (args.length === 2) { - author.defense = parseInt(args[1]); - author.save(); - } else { - await message.channel.send("Usage correct: test defense "); - return; - } - break; - case "speed": - if (args.length === 2) { - author.speed = parseInt(args[1]); - author.save(); - } else { - await message.channel.send("Usage correct: test speed "); - return; - } - break; - case "effect": - if (args.length === 2) { - author.effect = ":" + args[1] + ":"; - author.save(); - } else { - await message.channel.send("Usage correct: test effect "); - return; - } - break; - case "weaponid": - if (args.length === 2) { - author.Player.Inventory.weapon_id = parseInt(args[1]); - author.Player.Inventory.save(); - } else { - await message.channel.send("Usage correct: test weaponId "); - return; - } - break; - case "armorid": - if (args.length === 2) { - author.Player.Inventory.armor_id = parseInt(args[1]); - author.Player.Inventory.save(); - } else { - await message.channel.send("Usage correct: test armorId "); - return; - } - break; - case "potionid": - if (args.length === 2) { - author.Player.Inventory.potion_id = parseInt(args[1]); - author.Player.Inventory.save(); - } else { - await message.channel.send("Usage correct: test potionId "); - return; - } - break; - case "objectid": - if (args.length === 2) { - author.Player.Inventory.object_id = parseInt(args[1]); - author.Player.Inventory.save(); - } else { - await message.channel.send("Usage correct: test objectId "); - return; - } - break; - case "backupid": - if (args.length === 2) { - author.Player.Inventory.backup_id = parseInt(args[1]); - author.Player.Inventory.save(); - } else { - await message.channel.send("Usage correct: test backupId "); - return; - } - break; - case "init": - author.Player.level = 1; - author.Player.score = 2000; - author.Player.weeklyScore = 0; - author.Player.experience = 0; - author.Player.money = 0; - author.Player.badges = ""; - author.Player.lastReportAt = new Date(1980, 0); - author.Player.save(); + let author; + [author] = await Entities.getOrRegister(message.author.id); + try { + switch (args[0].toLowerCase()) { + case 'lvl': + case 'level': + if (args.length === 2) { + author.Player.level = parseInt(args[1]); + author.Player.save(); + } else { + await message.channel.send('Usage correct: test level '); + return; + } + break; + case 'score': + if (args.length === 2) { + author.Player.score = parseInt(args[1]); + author.Player.save(); + } else { + await message.channel.send('Usage correct: test score '); + return; + } + break; + case 'weeklyscore': + if (args.length === 2) { + author.Player.weeklyScore = parseInt(args[1]); + author.Player.save(); + } else { + await message.channel.send('Usage correct: test weeklyscore '); + return; + } + break; + case 'xp': + case 'experience': + if (args.length === 2) { + author.Player.experience = parseInt(args[1]); + author.Player.save(); + } else { + await message.channel.send('Usage correct: test experience '); + return; + } + break; + case 'money': + if (args.length === 2) { + author.Player.money = parseInt(args[1]); + author.Player.save(); + } else { + await message.channel.send('Usage correct: test experience '); + return; + } + break; + case 'givebadge': + if (args.length === 2) { + author.Player.giveBadge(args[1]); + author.Player.save(); + } else { + await message.channel.send('Usage correct: test givebadge '); + return; + } + break; + case 'clearbadges': + if (args.length === 1) { + author.Player.badges = ''; + author.Player.save(); + } else { + await message.channel.send('Usage correct: test clearbadges'); + return; + } + break; + case 'resetreport': + case 'rr': + if (args.length === 1) { + author.Player.lastReportAt = new Date(1980, 0); + author.Player.save(); + } else { + await message.channel.send('Usage correct: test resetreport'); + return; + } + break; + case 'maxhealth': + if (args.length === 2) { + author.maxHealth = parseInt(args[1]); + author.save(); + } else { + await message.channel.send('Usage correct: test maxhealth '); + return; + } + break; + case 'health': + if (args.length === 2) { + author.health = parseInt(args[1]); + author.save(); + } else { + await message.channel.send('Usage correct: test health '); + return; + } + break; + case 'attack': + if (args.length === 2) { + author.attack = parseInt(args[1]); + author.save(); + } else { + await message.channel.send('Usage correct: test attack '); + return; + } + break; + case 'defense': + if (args.length === 2) { + author.defense = parseInt(args[1]); + author.save(); + } else { + await message.channel.send('Usage correct: test defense '); + return; + } + break; + case 'speed': + if (args.length === 2) { + author.speed = parseInt(args[1]); + author.save(); + } else { + await message.channel.send('Usage correct: test speed '); + return; + } + break; + case 'effect': + if (args.length === 2) { + author.effect = ':' + args[1] + ':'; + author.save(); + } else { + await message.channel.send('Usage correct: test effect '); + return; + } + break; + case 'weaponid': + if (args.length === 2) { + author.Player.Inventory.weapon_id = parseInt(args[1]); + author.Player.Inventory.save(); + } else { + await message.channel.send('Usage correct: test weaponId '); + return; + } + break; + case 'armorid': + if (args.length === 2) { + author.Player.Inventory.armor_id = parseInt(args[1]); + author.Player.Inventory.save(); + } else { + await message.channel.send('Usage correct: test armorId '); + return; + } + break; + case 'potionid': + if (args.length === 2) { + author.Player.Inventory.potion_id = parseInt(args[1]); + author.Player.Inventory.save(); + } else { + await message.channel.send('Usage correct: test potionId '); + return; + } + break; + case 'objectid': + if (args.length === 2) { + author.Player.Inventory.object_id = parseInt(args[1]); + author.Player.Inventory.save(); + } else { + await message.channel.send('Usage correct: test objectId '); + return; + } + break; + case 'backupid': + if (args.length === 2) { + author.Player.Inventory.backup_id = parseInt(args[1]); + author.Player.Inventory.save(); + } else { + await message.channel.send('Usage correct: test backupId '); + return; + } + break; + case 'init': + author.Player.level = 1; + author.Player.score = 2000; + author.Player.weeklyScore = 0; + author.Player.experience = 0; + author.Player.money = 0; + author.Player.badges = ''; + author.Player.lastReportAt = new Date(1980, 0); + author.Player.save(); - author.effect = ":smiley:"; - author.maxHealth = 100; - author.health = 100; - author.attack = 50; - author.defense = 20; - author.speed = 10; - author.save(); + author.effect = ':smiley:'; + author.maxHealth = 100; + author.health = 100; + author.attack = 50; + author.defense = 20; + author.speed = 10; + author.save(); - author.Player.Inventory.weapon_id = 0; - author.Player.Inventory.armor_id = 0; - author.Player.Inventory.object_id = 0; - author.Player.Inventory.backup_id = 0; - author.Player.Inventory.save(); - break; - default: - await message.channel.send("Argument inconnu !"); - return; - } - } catch(error) { - await message.channel.send(":x: | Une erreur est survenue pendant la commande !"); + author.Player.Inventory.weapon_id = 0; + author.Player.Inventory.armor_id = 0; + author.Player.Inventory.object_id = 0; + author.Player.Inventory.backup_id = 0; + author.Player.Inventory.save(); + break; + default: + await message.channel.send('Argument inconnu !'); + return; } - await message.channel.send(":man_mage: | Commande test reconnue et appliquée !"); + } catch (error) { + await message.channel.send(':x: | Une erreur est survenue pendant la commande !'); + } + await message.channel.send(':man_mage: | Commande test reconnue et appliquée !'); }; module.exports = { - 'test': TestCommand, + 'test': TestCommand, }; diff --git a/src/commands/guild/GuildAddCommand.js b/src/commands/guild/GuildAddCommand.js index 1557f1c05..61bb1baa6 100644 --- a/src/commands/guild/GuildAddCommand.js +++ b/src/commands/guild/GuildAddCommand.js @@ -5,135 +5,132 @@ * @param {String[]} args=[] - Additional arguments sent with the command */ const GuildAddCommand = async (language, message, args) => { - - let entity, invitedEntity, guild, invitedGuild; - let embed = new discord.MessageEmbed(); - - [entity] = await Entities.getOrRegister(message.author.id); - - try { - invitedEntity = await Entities.getByArgs(args, message); - } catch (error) { - invitedEntity = null; - } - - if (invitedEntity == null) { //no user provided - return sendErrorMessage( - message.author, - message.channel, - language, - JsonReader.commands.guildAdd.getTranslation(language).cannotGetInvitedUser); - } - - // search for a user's guild - try { - guild = await Guilds.getById(entity.Player.guild_id); - } catch (error) { - guild = null; - } - - if (guild == null) { // not in a guild - return sendErrorMessage( - message.author, - message.channel, - language, - JsonReader.commands.guildAdd.getTranslation(language).notInAguild); - } - - if (guild.chief_id != entity.id) { - return sendErrorMessage( - message.author, - message.channel, - language, - JsonReader.commands.guildAdd.getTranslation(language).notChiefError); + let entity; let invitedEntity; let guild; let invitedGuild; + let embed = new discord.MessageEmbed(); + + [entity] = await Entities.getOrRegister(message.author.id); + + try { + invitedEntity = await Entities.getByArgs(args, message); + } catch (error) { + invitedEntity = null; + } + + if (invitedEntity == null) { // no user provided + return sendErrorMessage( + message.author, + message.channel, + language, + JsonReader.commands.guildAdd.getTranslation(language).cannotGetInvitedUser); + } + + // search for a user's guild + try { + guild = await Guilds.getById(entity.Player.guild_id); + } catch (error) { + guild = null; + } + + if (guild == null) { // not in a guild + return sendErrorMessage( + message.author, + message.channel, + language, + JsonReader.commands.guildAdd.getTranslation(language).notInAguild); + } + + if (guild.chief_id != entity.id) { + return sendErrorMessage( + message.author, + message.channel, + language, + JsonReader.commands.guildAdd.getTranslation(language).notChiefError); + } + + // search for a user's guild + try { + invitedGuild = await Guilds.getById(invitedEntity.Player.guild_id); + } catch (error) { + invitedGuild = null; + } + + if (invitedGuild != null) { // already in a guild + return sendErrorMessage( + message.author, + message.channel, + language, + JsonReader.commands.guildAdd.getTranslation(language).alreadyInAGuild); + } + + const members = await Entities.getByGuild(guild.id); + + if (members.length === GUILD.MAX_GUILD_MEMBER) { + return sendErrorMessage( + message.author, + message.channel, + language, + JsonReader.commands.guildAdd.getTranslation(language).guildFull); + } + + + embed.setAuthor(format(JsonReader.commands.guildAdd.getTranslation(language).invitationTitle, { + pseudo: message.mentions.users.last().username, + }), message.mentions.users.last().displayAvatarURL()); + embed.setDescription(format(JsonReader.commands.guildAdd.getTranslation(language).invitation, { + guildName: guild.name, + })); + + const msg = await message.channel.send(embed); + + embed = new discord.MessageEmbed(); + const filterConfirm = (reaction, user) => { + return ((reaction.emoji.name == MENU_REACTION.ACCEPT || reaction.emoji.name == MENU_REACTION.DENY) && user.id === message.mentions.users.last().id); + }; + + const collector = msg.createReactionCollector(filterConfirm, { + time: 120000, + max: 1, + }); + + collector.on('end', async (reaction) => { + if (reaction.first()) { // a reaction exist + if (reaction.first().emoji.name == MENU_REACTION.ACCEPT) { + invitedEntity.Player.guild_id = guild.id; + // TODO : update lastDaily + + await Promise.all([ + invitedEntity.save(), + invitedEntity.Player.save(), + ]); + + embed.setAuthor(format(JsonReader.commands.guildAdd.getTranslation(language).successTitle, { + pseudo: message.mentions.users.last().username, + guildName: guild.name, + }), message.mentions.users.last().displayAvatarURL()); + embed.setDescription(JsonReader.commands.guildAdd.getTranslation(language).invitationSuccess); + return message.channel.send(embed); + } } - // search for a user's guild - try { - invitedGuild = await Guilds.getById(invitedEntity.Player.guild_id); - } catch (error) { - invitedGuild = null; - } - - if (invitedGuild != null) { // already in a guild - return sendErrorMessage( - message.author, - message.channel, - language, - JsonReader.commands.guildAdd.getTranslation(language).alreadyInAGuild); - } - - let members = await Entities.getByGuild(guild.id); - - if (members.length === GUILD.MAX_GUILD_MEMBER) { - return sendErrorMessage( - message.author, - message.channel, - language, - JsonReader.commands.guildAdd.getTranslation(language).guildFull); - } - - - embed.setAuthor(format(JsonReader.commands.guildAdd.getTranslation(language).invitationTitle, { - pseudo: message.mentions.users.last().username - }), message.mentions.users.last().displayAvatarURL()); - embed.setDescription(format(JsonReader.commands.guildAdd.getTranslation(language).invitation, { - guildName: guild.name - })); - - let msg = await message.channel.send(embed); - - embed = new discord.MessageEmbed(); - const filterConfirm = (reaction, user) => { - return ((reaction.emoji.name == MENU_REACTION.ACCEPT || reaction.emoji.name == MENU_REACTION.DENY) && user.id === message.mentions.users.last().id); - }; - - const collector = msg.createReactionCollector(filterConfirm, { - time: 120000, - max: 1 - }); - - collector.on('end', async (reaction) => { - if (reaction.first()) { // a reaction exist - if (reaction.first().emoji.name == MENU_REACTION.ACCEPT) { - - invitedEntity.Player.guild_id = guild.id; - //TODO : update lastDaily - - await Promise.all([ - invitedEntity.save(), - invitedEntity.Player.save() - ]); - - embed.setAuthor(format(JsonReader.commands.guildAdd.getTranslation(language).successTitle, { - pseudo: message.mentions.users.last().username, - guildName: guild.name - }), message.mentions.users.last().displayAvatarURL()); - embed.setDescription(JsonReader.commands.guildAdd.getTranslation(language).invitationSuccess); - return message.channel.send(embed); - } - } - - //Cancel the creation - return sendErrorMessage( - message.mentions.users.last(), - message.channel, - language, - format(JsonReader.commands.guildAdd.getTranslation(language).invitationCancelled, { - guildName: guild.name - })); - }); - - await Promise.all([ + // Cancel the creation + return sendErrorMessage( + message.mentions.users.last(), + message.channel, + language, + format(JsonReader.commands.guildAdd.getTranslation(language).invitationCancelled, { + guildName: guild.name, + })); + }); + + await Promise.all([ msg.react(MENU_REACTION.ACCEPT), - msg.react(MENU_REACTION.DENY) + msg.react(MENU_REACTION.DENY), ]); - }; module.exports = { - "guildadd": GuildAddCommand, - "gadd": GuildAddCommand, - "ga": GuildAddCommand -}; \ No newline at end of file + 'guildadd': GuildAddCommand, + 'gadd': GuildAddCommand, + 'ga': GuildAddCommand, +}; diff --git a/src/commands/guild/GuildCommand.js b/src/commands/guild/GuildCommand.js index d5f9ddac4..4c3916af7 100644 --- a/src/commands/guild/GuildCommand.js +++ b/src/commands/guild/GuildCommand.js @@ -5,80 +5,78 @@ * @param {String[]} args=[] - Additional arguments sent with the command */ const GuildCommand = async (language, message, args) => { + let entity; let guild; - let entity, guild; + try { + entity = await Entities.getByArgs(args, message); + } catch (error) { + [entity] = await Entities.getOrRegister(message.author.id); + } + if (args.length > 0 && message.mentions.users.last() === undefined) { + // args is the name of a guild try { - entity = await Entities.getByArgs(args, message); + guild = await Guilds.getByName(args.join(' ')); } catch (error) { - [entity] = await Entities.getOrRegister(message.author.id); + guild = null; } - - if (args.length > 0 && message.mentions.users.last() === undefined) { - // args is the name of a guild - try { - guild = await Guilds.getByName(args.join(" ")); - } catch (error) { - guild = null; - } - - } else { - // search for a user's guild - try { - guild = await Guilds.getById(entity.Player.guild_id); - } catch (error) { - guild = null; - } + } else { + // search for a user's guild + try { + guild = await Guilds.getById(entity.Player.guild_id); + } catch (error) { + guild = null; } + } - let embed = new discord.MessageEmbed(); + const embed = new discord.MessageEmbed(); - if (guild === null) { - return sendErrorMessage( - message.author, - message.channel, - language, - JsonReader.commands.guild.getTranslation(language).noGuildException); - } - let members = await Entities.getByGuild(guild.id); + if (guild === null) { + return sendErrorMessage( + message.author, + message.channel, + language, + JsonReader.commands.guild.getTranslation(language).noGuildException); + } + const members = await Entities.getByGuild(guild.id); - let membersInfos = ""; - for (const member of members) { - membersInfos += format(JsonReader.commands.guild.getTranslation(language).memberinfos, - { - pseudo: client.users.cache.get(member.discordUser_id).toString(), - ranking: (await Players.getById(member.Player.id))[0].rank, - score: member.Player.score - }); - } + let membersInfos = ''; + for (const member of members) { + membersInfos += format(JsonReader.commands.guild.getTranslation(language).memberinfos, + { + pseudo: client.users.cache.get(member.discordUser_id).toString(), + ranking: (await Players.getById(member.Player.id))[0].rank, + score: member.Player.score, + }); + } - let chief = await Entities.getById(guild.chief_id); + const chief = await Entities.getById(guild.chief_id); - embed.setThumbnail(JsonReader.commands.guild.icon); + embed.setThumbnail(JsonReader.commands.guild.icon); - embed.setTitle(format(JsonReader.commands.guild.getTranslation(language).title, { - guildName: guild.name - })); - embed.setDescription(format(JsonReader.commands.guild.getTranslation(language).chief, { - pseudo: client.users.cache.get(chief.discordUser_id).toString() - })); - embed.addField(format(JsonReader.commands.guild.getTranslation(language).members, { - memberCount: members.length, - maxGuildMembers: GUILD.MAX_GUILD_MEMBER - }), membersInfos); - embed.addField(format(JsonReader.commands.guild.getTranslation(language).experience, { - xp: guild.experience, - xpToLevelUp: guild.getExperienceNeededToLevelUp(), - level: guild.level - }), progressBar(guild.experience, guild.getExperienceNeededToLevelUp())); + embed.setTitle(format(JsonReader.commands.guild.getTranslation(language).title, { + guildName: guild.name, + })); + embed.setDescription(format(JsonReader.commands.guild.getTranslation(language).chief, { + pseudo: client.users.cache.get(chief.discordUser_id).toString(), + })); + embed.addField(format(JsonReader.commands.guild.getTranslation(language).members, { + memberCount: members.length, + maxGuildMembers: GUILD.MAX_GUILD_MEMBER, + }), membersInfos); + embed.addField(format(JsonReader.commands.guild.getTranslation(language).experience, { + xp: guild.experience, + xpToLevelUp: guild.getExperienceNeededToLevelUp(), + level: guild.level, + }), progressBar(guild.experience, guild.getExperienceNeededToLevelUp())); - //embed.addField(Text.commands.guild.star + experience + Text.commands.guild.expSeparator + experienceToLevelUp - // + Text.commands.guild.guildLevel + level, Text.commands.guild.style + progressBar.createBar() + Text.commands.guild.style); + // embed.addField(Text.commands.guild.star + experience + Text.commands.guild.expSeparator + experienceToLevelUp + // + Text.commands.guild.guildLevel + level, Text.commands.guild.style + progressBar.createBar() + Text.commands.guild.style); - message.channel.send(embed); + message.channel.send(embed); }; module.exports = { - "guild": GuildCommand, - "g": GuildCommand + 'guild': GuildCommand, + 'g': GuildCommand, }; diff --git a/src/commands/guild/GuildCreateCommand.js b/src/commands/guild/GuildCreateCommand.js index 0f31e67b5..bb521c338 100644 --- a/src/commands/guild/GuildCreateCommand.js +++ b/src/commands/guild/GuildCreateCommand.js @@ -5,140 +5,135 @@ * @param {String[]} args=[] - Additional arguments sent with the command */ const GuildCreateCommand = async (language, message, args) => { + let entity; let guild; + let embed = new discord.MessageEmbed(); + + [entity] = await Entities.getOrRegister(message.author.id); + + // search for a user's guild + try { + guild = await Guilds.getById(entity.Player.guild_id); + } catch (error) { + guild = null; + } + + if (guild !== null) { // already in a guild + return sendErrorMessage( + message.author, + message.channel, + language, + JsonReader.commands.guildCreate.getTranslation(language).alreadyInAGuild); + } + + const askedName = args.join(' '); + + if (askedName.length < 1) { // no name provided + return sendErrorMessage( + message.author, + message.channel, + language, + JsonReader.commands.guildCreate.getTranslation(language).noNameProvided); + } + + const regexAllowed = RegExp(/^[A-Za-z0-9 ÇçÜüÉéÂâÄäÀàÊêËëÈèÏïÎîÔôÖöÛû]+$/); + const regexSpecialCases = RegExp(/^[0-9 ]+$|( {2})+/); + if (!(regexAllowed.test(askedName) && !regexSpecialCases.test(askedName) && askedName.length >= GUILD.MIN_GUILDNAME_SIZE && askedName.length <= GUILD.MAX_GUILDNAME_SIZE)) { + return sendErrorMessage( + message.author, + message.channel, + language, + format(JsonReader.commands.guildCreate.getTranslation(language).invalidName, { + min: GUILD.MIN_GUILDNAME_SIZE, + max: GUILD.MAX_GUILDNAME_SIZE, + })); + } + + try { + guild = await Guilds.getByName(args.join(' ')); + } catch (error) { + guild = null; + } + + if (guild !== null) { // the name is already used + return sendErrorMessage( + message.author, + message.channel, + language, + JsonReader.commands.guildCreate.getTranslation(language).nameAlreadyUsed); + } + + embed.setAuthor(format(JsonReader.commands.guildCreate.getTranslation(language).buyTitle, { + pseudo: message.author.username, + }), message.author.displayAvatarURL()); + embed.setDescription(format(JsonReader.commands.guildCreate.getTranslation(language).buyConfirm, { + guildName: askedName, + price: JsonReader.commands.guildCreate.guildCreationPrice, + })); + embed.setFooter(JsonReader.commands.guildCreate.getTranslation(language).buyFooter, null); + + const msg = await message.channel.send(embed); + embed = new discord.MessageEmbed(); + const filterConfirm = (reaction, user) => { + return ((reaction.emoji.name === MENU_REACTION.ACCEPT || reaction.emoji.name === MENU_REACTION.DENY) && user.id === message.author.id); + }; + + const collector = msg.createReactionCollector(filterConfirm, { + time: 120000, + max: 1, + }); + + collector.on('end', async (reaction) => { + if (reaction.first()) { // a reaction exist + if (reaction.first().emoji.name == MENU_REACTION.ACCEPT) { + if (entity.Player.money > JsonReader.commands.guildCreate.guildCreationPrice) { + embed.setColor(JsonReader.bot.embed.error) + .setAuthor(format(JsonReader.commands.guildCreate.getTranslation(language).errorTitle, { + pseudo: message.author.username, + }), message.author.displayAvatarURL()) + .setDescription(JsonReader.commands.guildCreate.getTranslation(language).notEnoughMoney); + return message.channel.send(embed); + } - let entity, guild; - let embed = new discord.MessageEmbed(); - - [entity] = await Entities.getOrRegister(message.author.id); - - // search for a user's guild - try { - guild = await Guilds.getById(entity.Player.guild_id); - } catch (error) { - guild = null; - } - - if (guild !== null) { // already in a guild - return sendErrorMessage( - message.author, - message.channel, - language, - JsonReader.commands.guildCreate.getTranslation(language).alreadyInAGuild); - } - - let askedName = args.join(" "); - - if (askedName.length < 1) { // no name provided - return sendErrorMessage( - message.author, - message.channel, - language, - JsonReader.commands.guildCreate.getTranslation(language).noNameProvided); - } - - const regexAllowed = RegExp(/^[A-Za-z0-9 ÇçÜüÉéÂâÄäÀàÊêËëÈèÏïÎîÔôÖöÛû]+$/); - const regexSpecialCases = RegExp(/^[0-9 ]+$|( {2})+/); - if (!(regexAllowed.test(askedName) && !regexSpecialCases.test(askedName) && askedName.length >= GUILD.MIN_GUILDNAME_SIZE && askedName.length <= GUILD.MAX_GUILDNAME_SIZE)) { - - return sendErrorMessage( - message.author, - message.channel, - language, - format(JsonReader.commands.guildCreate.getTranslation(language).invalidName, { - min: GUILD.MIN_GUILDNAME_SIZE, - max: GUILD.MAX_GUILDNAME_SIZE - })); + const newGuild = await Guilds.create({ + name: askedName, + chief_id: entity.id, + }); + + entity.Player.guild_id = newGuild.id; + entity.Player.addMoney(-JsonReader.commands.guildCreate.guildCreationPrice); + + await Promise.all([ + entity.save(), + entity.Player.save(), + ]); + + embed.setAuthor(format(JsonReader.commands.guildCreate.getTranslation(language).createTitle, { + pseudo: message.author.username, + }), message.author.displayAvatarURL()); + embed.setDescription(format(JsonReader.commands.guildCreate.getTranslation(language).createSuccess, { + guildName: askedName, + })); + return message.channel.send(embed); + } } - try { - guild = await Guilds.getByName(args.join(" ")); - } catch (error) { - guild = null; - } + // Cancel the creation + return sendErrorMessage( + message.author, + message.channel, + language, + JsonReader.commands.guildCreate.getTranslation(language).creationCancelled); + }); - if (guild !== null) { // the name is already used - return sendErrorMessage( - message.author, - message.channel, - language, - JsonReader.commands.guildCreate.getTranslation(language).nameAlreadyUsed); - } - - embed.setAuthor(format(JsonReader.commands.guildCreate.getTranslation(language).buyTitle, { - pseudo: message.author.username - }), message.author.displayAvatarURL()); - embed.setDescription(format(JsonReader.commands.guildCreate.getTranslation(language).buyConfirm, { - guildName: askedName, - price: JsonReader.commands.guildCreate.guildCreationPrice, - })); - embed.setFooter(JsonReader.commands.guildCreate.getTranslation(language).buyFooter, null); - - let msg = await message.channel.send(embed); - embed = new discord.MessageEmbed(); - const filterConfirm = (reaction, user) => { - return ((reaction.emoji.name === MENU_REACTION.ACCEPT || reaction.emoji.name === MENU_REACTION.DENY) && user.id === message.author.id); - }; - - const collector = msg.createReactionCollector(filterConfirm, { - time: 120000, - max: 1 - }); - - collector.on('end', async (reaction) => { - - if (reaction.first()) { // a reaction exist - if (reaction.first().emoji.name == MENU_REACTION.ACCEPT) { - - if (entity.Player.money > JsonReader.commands.guildCreate.guildCreationPrice) { - embed.setColor(JsonReader.bot.embed.error) - .setAuthor(format(JsonReader.commands.guildCreate.getTranslation(language).errorTitle, { - pseudo: message.author.username - }), message.author.displayAvatarURL()) - .setDescription(JsonReader.commands.guildCreate.getTranslation(language).notEnoughMoney); - return message.channel.send(embed); - } - - const newGuild = await Guilds.create({ - name: askedName, - chief_id: entity.id - }); - - entity.Player.guild_id = newGuild.id; - entity.Player.addMoney(-JsonReader.commands.guildCreate.guildCreationPrice); - - await Promise.all([ - entity.save(), - entity.Player.save() - ]); - - embed.setAuthor(format(JsonReader.commands.guildCreate.getTranslation(language).createTitle, { - pseudo: message.author.username - }), message.author.displayAvatarURL()); - embed.setDescription(format(JsonReader.commands.guildCreate.getTranslation(language).createSuccess, { - guildName: askedName - })); - return message.channel.send(embed); - } - } - - //Cancel the creation - return sendErrorMessage( - message.author, - message.channel, - language, - JsonReader.commands.guildCreate.getTranslation(language).creationCancelled); - }); - - await Promise.all([ + await Promise.all([ msg.react(MENU_REACTION.ACCEPT), - msg.react(MENU_REACTION.DENY) + msg.react(MENU_REACTION.DENY), ]); - }; module.exports = { - "guildcreate": GuildCreateCommand, - "gcreate": GuildCreateCommand, - "gc": GuildCreateCommand -}; \ No newline at end of file + 'guildcreate': GuildCreateCommand, + 'gcreate': GuildCreateCommand, + 'gc': GuildCreateCommand, +}; diff --git a/src/commands/guild/GuildDailyCommand.js b/src/commands/guild/GuildDailyCommand.js index 3c998b4eb..d8d32d3ee 100644 --- a/src/commands/guild/GuildDailyCommand.js +++ b/src/commands/guild/GuildDailyCommand.js @@ -5,143 +5,140 @@ * @param {String[]} args=[] - Additional arguments sent with the command */ const GuildDailyCommand = async (language, message, args) => { - - - let entity, guild; - let embed = new discord.MessageEmbed(); - - [entity] = await Entities.getOrRegister(message.author.id); - - // search for a user's guild - try { - guild = await Guilds.getById(entity.Player.guild_id); - } catch (error) { - guild = null; - } - - if (guild === null) { // not in a guild - return sendErrorMessage( - message.author, - message.channel, - language, - JsonReader.commands.guildDaily.getTranslation(language).notInAGuild); - } - - // if (message.createdTimestamp - guild.lastInvocation < 79200000) { - // message.channel.send(generateTooQuickException(message.author, 79200000 - message.createdTimestamp + guild.lastInvocation)); - // return; - // } - // updateLastInvocation(guild, message); - - let members = await Entities.getByGuild(guild.id); - let rewardType = generateRandomProperty(guild); - - embed.setTitle(format(JsonReader.commands.guildDaily.getTranslation(language).rewardTitle, { - guildName: guild.name + let entity; let guild; + const embed = new discord.MessageEmbed(); + + [entity] = await Entities.getOrRegister(message.author.id); + + // search for a user's guild + try { + guild = await Guilds.getById(entity.Player.guild_id); + } catch (error) { + guild = null; + } + + if (guild === null) { // not in a guild + return sendErrorMessage( + message.author, + message.channel, + language, + JsonReader.commands.guildDaily.getTranslation(language).notInAGuild); + } + + // if (message.createdTimestamp - guild.lastInvocation < 79200000) { + // message.channel.send(generateTooQuickException(message.author, 79200000 - message.createdTimestamp + guild.lastInvocation)); + // return; + // } + // updateLastInvocation(guild, message); + + const members = await Entities.getByGuild(guild.id); + let rewardType = generateRandomProperty(guild); + + embed.setTitle(format(JsonReader.commands.guildDaily.getTranslation(language).rewardTitle, { + guildName: guild.name, + })); + + if (rewardType === REWARD_TYPES.PERSONNAL_XP) { + const xpGuildWon = randInt( + JsonReader.commands.guildDaily.minimalXp + guild.level, + JsonReader.commands.guildDaily.maximalXp + guild.level * 2); + // TODO : give xp to players + embed.setDescription(format(JsonReader.commands.guildDaily.getTranslation(language).personalXP, { + xp: xpGuildWon, })); + } + + if (rewardType === REWARD_TYPES.GUILD_XP) { + const xpGuildWon = randInt( + JsonReader.commands.guildDaily.minimalXp + guild.level, + JsonReader.commands.guildDaily.maximalXp + guild.level * 2); + // TODO : give guildxp + embed.setDescription(format(JsonReader.commands.guildDaily.getTranslation(language).guildXP, { + xp: xpGuildWon, + })); + } + + if (rewardType === REWARD_TYPES.MONEY) { + const moneyWon = randInt( + JsonReader.commands.guildDaily.minimalMoney + guild.level, + JsonReader.commands.guildDaily.maximalMoney + guild.level * 4); + // TODO : give money + embed.setDescription(format(JsonReader.commands.guildDaily.getTranslation(language).money, { + money: moneyWon, + })); + } - if (rewardType === REWARD_TYPES.PERSONNAL_XP) { - let xpGuildWon = randInt( - JsonReader.commands.guildDaily.minimalXp + guild.level, - JsonReader.commands.guildDaily.maximalXp + guild.level * 2); - //TODO : give xp to players - embed.setDescription(format(JsonReader.commands.guildDaily.getTranslation(language).personalXP, { - xp: xpGuildWon - })); - } - - if (rewardType === REWARD_TYPES.GUILD_XP) { - let xpGuildWon = randInt( - JsonReader.commands.guildDaily.minimalXp + guild.level, - JsonReader.commands.guildDaily.maximalXp + guild.level * 2); - //TODO : give guildxp - embed.setDescription(format(JsonReader.commands.guildDaily.getTranslation(language).guildXP, { - xp: xpGuildWon - })); - } - - if (rewardType === REWARD_TYPES.MONEY) { - let moneyWon = randInt( - JsonReader.commands.guildDaily.minimalMoney + guild.level, - JsonReader.commands.guildDaily.maximalMoney + guild.level * 4); - //TODO : give money - embed.setDescription(format(JsonReader.commands.guildDaily.getTranslation(language).money, { - money: moneyWon - })); - } - - if (rewardType === REWARD_TYPES.RANDOM_ITEM) { - //TODO remove this reward and replace with a fixed 400 gold reward - embed.setDescription(format(JsonReader.commands.guildDaily.getTranslation(language).randomItem, { - money: moneyWon - })); + if (rewardType === REWARD_TYPES.RANDOM_ITEM) { + // TODO remove this reward and replace with a fixed 400 gold reward + embed.setDescription(format(JsonReader.commands.guildDaily.getTranslation(language).randomItem, { + money: moneyWon, + })); + } + + if (rewardType === REWARD_TYPES.BADGE) { + let membersThatOwnTheBadge = 0; + for (const i in members) { + if (members[i].Player.badges.includes('💎')) { + membersThatOwnTheBadge++; + } else { + members[i].Player.addBadge('💎'); + } + await members[i].Player.save(); } - - if (rewardType === REWARD_TYPES.BADGE) { - let membersThatOwnTheBadge = 0; - for (let i in members) { - if (members[i].Player.badges.includes("💎")) { - membersThatOwnTheBadge++; - } else { - members[i].Player.addBadge("💎"); - } - await members[i].Player.save(); - } - if (membersThatOwnTheBadge != members.length) { - embed.setDescription(JsonReader.commands.guildDaily.getTranslation(language).badge); - } else { - //everybody already have the badge, give something else instead - rewardType = REWARD_TYPES.PARTIAL_HEAL; - } + if (membersThatOwnTheBadge != members.length) { + embed.setDescription(JsonReader.commands.guildDaily.getTranslation(language).badge); + } else { + // everybody already have the badge, give something else instead + rewardType = REWARD_TYPES.PARTIAL_HEAL; } - - if (rewardType === REWARD_TYPES.FULL_HEAL) { - for (let i in members) { - if (members[i].effect != EFFECT.DEAD) { - members[i].addHealth(members[i].maxHealth); - } - await members[i].save(); - } - embed.setDescription(JsonReader.commands.guildDaily.getTranslation(language).fullHeal); + } + + if (rewardType === REWARD_TYPES.FULL_HEAL) { + for (const i in members) { + if (members[i].effect != EFFECT.DEAD) { + members[i].addHealth(members[i].maxHealth); + } + await members[i].save(); } - - if (rewardType === REWARD_TYPES.PARTIAL_HEAL) { - for (let i in members) { - if (members[i].effect != EFFECT.DEAD) { - members[i].addHealth(Math.round(guild.level / JsonReader.commands.guildDaily.levelMultiplayer)); - } - await members[i].save(); - } - embed.setDescription(format(JsonReader.commands.guildDaily.getTranslation(language).partialHeal, { - healthWon: Math.round(guild.level / JsonReader.commands.guildDaily.levelMultiplayer) - })); + embed.setDescription(JsonReader.commands.guildDaily.getTranslation(language).fullHeal); + } + + if (rewardType === REWARD_TYPES.PARTIAL_HEAL) { + for (const i in members) { + if (members[i].effect != EFFECT.DEAD) { + members[i].addHealth(Math.round(guild.level / JsonReader.commands.guildDaily.levelMultiplayer)); + } + await members[i].save(); } - - if (rewardType === REWARD_TYPES.ALTERATION) { - for (let i in members) { - if (members[i].effect != EFFECT.SMILEY) { - members[i].addHealth(Math.round(guild.level / JsonReader.commands.guildDaily.levelMultiplayer)); - } - if (members[i].effect != EFFECT.DEAD && members[i].effect != EFFECT.LOCKED) { - members[i].effect = EFFECT.SMILEY; - //TODO: update last seen - - } - await members[i].save(); - } - embed.setDescription(format(JsonReader.commands.guildDaily.getTranslation(language).alterationHeal, { - healthWon: Math.round(guild.level / JsonReader.commands.guildDaily.levelMultiplayer) - })); + embed.setDescription(format(JsonReader.commands.guildDaily.getTranslation(language).partialHeal, { + healthWon: Math.round(guild.level / JsonReader.commands.guildDaily.levelMultiplayer), + })); + } + + if (rewardType === REWARD_TYPES.ALTERATION) { + for (const i in members) { + if (members[i].effect != EFFECT.SMILEY) { + members[i].addHealth(Math.round(guild.level / JsonReader.commands.guildDaily.levelMultiplayer)); + } + if (members[i].effect != EFFECT.DEAD && members[i].effect != EFFECT.LOCKED) { + members[i].effect = EFFECT.SMILEY; + // TODO: update last seen + } + await members[i].save(); } + embed.setDescription(format(JsonReader.commands.guildDaily.getTranslation(language).alterationHeal, { + healthWon: Math.round(guild.level / JsonReader.commands.guildDaily.levelMultiplayer), + })); + } - message.channel.send(embed); - return; + message.channel.send(embed); + return; }; module.exports = { - "guilddaily": GuildDailyCommand, - "gdaily": GuildDailyCommand, - "gd": GuildDailyCommand + 'guilddaily': GuildDailyCommand, + 'gdaily': GuildDailyCommand, + 'gd': GuildDailyCommand, }; @@ -151,20 +148,19 @@ module.exports = { * @param {*} message */ function updateLastInvocation(guild, message) { - guild.lastInvocation = message.createdTimestamp; + guild.lastInvocation = message.createdTimestamp; } function generateRandomProperty(guild) { - let resultNumber = randInt(0, 1000); - let rewardLevel = Math.floor(guild.level / 10); - let recompenses = JsonReader.commands.guildDaily.guildChances[rewardLevel]; - for (const property in recompenses) { - if (recompenses[property] < resultNumber) { - resultNumber -= recompenses[property]; - } - else { - return property; - } + let resultNumber = randInt(0, 1000); + const rewardLevel = Math.floor(guild.level / 10); + const recompenses = JsonReader.commands.guildDaily.guildChances[rewardLevel]; + for (const property in recompenses) { + if (recompenses[property] < resultNumber) { + resultNumber -= recompenses[property]; + } else { + return property; } + } } diff --git a/src/commands/guild/GuildKickCommand.js b/src/commands/guild/GuildKickCommand.js index ac94f93e7..e9b2d8746 100644 --- a/src/commands/guild/GuildKickCommand.js +++ b/src/commands/guild/GuildKickCommand.js @@ -5,132 +5,130 @@ * @param {String[]} args=[] - Additional arguments sent with the command */ const GuildKickCommand = async (language, message, args) => { - - let entity, kickedEntity, guild, kickedGuild; - let embed = new discord.MessageEmbed(); - - [entity] = await Entities.getOrRegister(message.author.id); - - try { - kickedEntity = await Entities.getByArgs(args, message); - } catch (error) { - kickedEntity = null; - } - - if (kickedEntity === null) { //no user provided - return sendErrorMessage( - message.author, - message.channel, - language, - JsonReader.commands.guildKick.getTranslation(language).cannotGetKickedUser); + let entity; let kickedEntity; let guild; let kickedGuild; + let embed = new discord.MessageEmbed(); + + [entity] = await Entities.getOrRegister(message.author.id); + + try { + kickedEntity = await Entities.getByArgs(args, message); + } catch (error) { + kickedEntity = null; + } + + if (kickedEntity === null) { // no user provided + return sendErrorMessage( + message.author, + message.channel, + language, + JsonReader.commands.guildKick.getTranslation(language).cannotGetKickedUser); + } + + // search for a user's guild + try { + guild = await Guilds.getById(entity.Player.guild_id); + } catch (error) { + guild = null; + } + + if (guild === null) { // not in a guild + return sendErrorMessage( + message.author, + message.channel, + language, + JsonReader.commands.guildKick.getTranslation(language).notInAguild); + } + + if (guild.chief_id != entity.id) { + return sendErrorMessage( + message.author, + message.channel, + language, + JsonReader.commands.guildKick.getTranslation(language).notChiefError); + } + + // search for a user's guild + try { + kickedGuild = await Guilds.getById(kickedEntity.Player.guild_id); + } catch (error) { + kickedGuild = null; + } + + if (kickedGuild === null || kickedGuild.id != guild.id) { // not the same guild + return sendErrorMessage( + message.author, + message.channel, + language, + JsonReader.commands.guildKick.getTranslation(language).notInTheGuild); + } + + if (kickedEntity.id === entity.id) { + return sendErrorMessage( + message.author, + message.channel, + language, + JsonReader.commands.guildKick.getTranslation(language).excludeHimself); + } + + + embed.setAuthor(format(JsonReader.commands.guildKick.getTranslation(language).kickTitle, { + pseudo: message.author.username, + }), message.author.displayAvatarURL()); + embed.setDescription(format(JsonReader.commands.guildKick.getTranslation(language).kick, { + guildName: guild.name, + kickedPseudo: message.mentions.users.last().username, + })); + + const msg = await message.channel.send(embed); + + embed = new discord.MessageEmbed(); + const filterConfirm = (reaction, user) => { + return ((reaction.emoji.name == MENU_REACTION.ACCEPT || reaction.emoji.name == MENU_REACTION.DENY) && user.id === message.author.id); + }; + + const collector = msg.createReactionCollector(filterConfirm, { + time: 120000, + max: 1, + }); + + collector.on('end', async (reaction) => { + if (reaction.first()) { // a reaction exist + if (reaction.first().emoji.name == MENU_REACTION.ACCEPT) { + kickedEntity.Player.guild_id = null; + + await Promise.all([ + kickedEntity.save(), + kickedEntity.Player.save(), + ]); + + embed.setAuthor(format(JsonReader.commands.guildKick.getTranslation(language).successTitle, { + kickedPseudo: message.mentions.users.last().username, + guildName: guild.name, + }), message.mentions.users.last().displayAvatarURL()); + embed.setDescription(JsonReader.commands.guildKick.getTranslation(language).kickSuccess); + return message.channel.send(embed); + } } - // search for a user's guild - try { - guild = await Guilds.getById(entity.Player.guild_id); - } catch (error) { - guild = null; - } - - if (guild === null) { // not in a guild - return sendErrorMessage( - message.author, - message.channel, - language, - JsonReader.commands.guildKick.getTranslation(language).notInAguild); - } - - if (guild.chief_id != entity.id) { - return sendErrorMessage( - message.author, - message.channel, - language, - JsonReader.commands.guildKick.getTranslation(language).notChiefError); - } - - // search for a user's guild - try { - kickedGuild = await Guilds.getById(kickedEntity.Player.guild_id); - } catch (error) { - kickedGuild = null; - } - - if (kickedGuild === null || kickedGuild.id != guild.id) { // not the same guild - return sendErrorMessage( - message.author, - message.channel, - language, - JsonReader.commands.guildKick.getTranslation(language).notInTheGuild); - } - - if (kickedEntity.id === entity.id) { - return sendErrorMessage( - message.author, - message.channel, - language, - JsonReader.commands.guildKick.getTranslation(language).excludeHimself); - } - - - embed.setAuthor(format(JsonReader.commands.guildKick.getTranslation(language).kickTitle, { - pseudo: message.author.username - }), message.author.displayAvatarURL()); - embed.setDescription(format(JsonReader.commands.guildKick.getTranslation(language).kick, { - guildName: guild.name, - kickedPseudo: message.mentions.users.last().username - })); - - let msg = await message.channel.send(embed); - - embed = new discord.MessageEmbed(); - const filterConfirm = (reaction, user) => { - return ((reaction.emoji.name == MENU_REACTION.ACCEPT || reaction.emoji.name == MENU_REACTION.DENY) && user.id === message.author.id); - }; - - const collector = msg.createReactionCollector(filterConfirm, { - time: 120000, - max: 1 - }); - - collector.on('end', async (reaction) => { - if (reaction.first()) { // a reaction exist - if (reaction.first().emoji.name == MENU_REACTION.ACCEPT) { - - kickedEntity.Player.guild_id = null; - - await Promise.all([ - kickedEntity.save(), - kickedEntity.Player.save() - ]); - - embed.setAuthor(format(JsonReader.commands.guildKick.getTranslation(language).successTitle, { - kickedPseudo: message.mentions.users.last().username, - guildName: guild.name - }), message.mentions.users.last().displayAvatarURL()); - embed.setDescription(JsonReader.commands.guildKick.getTranslation(language).kickSuccess); - return message.channel.send(embed); - } - } - - //Cancel the kick - return sendErrorMessage( - message.author, - message.channel, - language, - format(JsonReader.commands.guildKick.getTranslation(language).kickCancelled, { - kickedPseudo: message.mentions.users.last().username - })); - }); - - await Promise.all([ - msg.react(MENU_REACTION.ACCEPT), - msg.react(MENU_REACTION.DENY) - ]); + // Cancel the kick + return sendErrorMessage( + message.author, + message.channel, + language, + format(JsonReader.commands.guildKick.getTranslation(language).kickCancelled, { + kickedPseudo: message.mentions.users.last().username, + })); + }); + + await Promise.all([ + msg.react(MENU_REACTION.ACCEPT), + msg.react(MENU_REACTION.DENY), + ]); }; module.exports = { - "guildkick": GuildKickCommand, - "gkick": GuildKickCommand, - "gk": GuildKickCommand -}; \ No newline at end of file + 'guildkick': GuildKickCommand, + 'gkick': GuildKickCommand, + 'gk': GuildKickCommand, +}; diff --git a/src/commands/guild/GuildLeaveCommand.js b/src/commands/guild/GuildLeaveCommand.js index f41f26329..bdf0a4bd5 100644 --- a/src/commands/guild/GuildLeaveCommand.js +++ b/src/commands/guild/GuildLeaveCommand.js @@ -5,105 +5,103 @@ * @param {String[]} args=[] - Additional arguments sent with the command */ const GuildLeaveCommand = async (language, message, args) => { + let entity; let guild; + let embed = new discord.MessageEmbed(); + + [entity] = await Entities.getOrRegister(message.author.id); + + // search for a user's guild + try { + guild = await Guilds.getById(entity.Player.guild_id); + } catch (error) { + guild = null; + } + + if (guild == null) { // not in a guild + return sendErrorMessage( + message.author, + message.channel, + language, + JsonReader.commands.guildLeave.getTranslation(language).notInAGuild); + } + + // generate confirmation embed + embed.setAuthor(format(JsonReader.commands.guildLeave.getTranslation(language).leaveTitle, { + pseudo: message.author.username, + }), message.author.displayAvatarURL()); + if (guild.chief_id != entity.id) { + embed.setDescription(format(JsonReader.commands.guildLeave.getTranslation(language).leaveDesc, { + guildName: guild.name, + })); + } else { + embed.setDescription(format(JsonReader.commands.guildLeave.getTranslation(language).leaveChiefDesc, { + guildName: guild.name, + })); + } + + const msg = await message.channel.send(embed); + + embed = new discord.MessageEmbed(); + const filterConfirm = (reaction, user) => { + return ((reaction.emoji.name == MENU_REACTION.ACCEPT || reaction.emoji.name == MENU_REACTION.DENY) && user.id === message.author.id); + }; + + const collector = msg.createReactionCollector(filterConfirm, { + time: 120000, + max: 1, + }); + + collector.on('end', async (reaction) => { + if (reaction.first()) { // a reaction exist + if (reaction.first().emoji.name == MENU_REACTION.ACCEPT) { + entity.Player.guild_id = null; + + if (guild.chief_id == entity.id) { + // the chief is leaving : destroy the guild + await Players.update({guild_id: null}, { + where: { + guild_id: guild.id, + }, + }); + await Guilds.destroy({ + where: { + id: guild.id, + }, + }); + } - let entity, guild; - let embed = new discord.MessageEmbed(); - - [entity] = await Entities.getOrRegister(message.author.id); - - // search for a user's guild - try { - guild = await Guilds.getById(entity.Player.guild_id); - } catch (error) { - guild = null; - } - - if (guild == null) { // not in a guild - return sendErrorMessage( - message.author, - message.channel, - language, - JsonReader.commands.guildLeave.getTranslation(language).notInAGuild); + await Promise.all([ + entity.save(), + entity.Player.save(), + ]); + + embed.setAuthor(format(JsonReader.commands.guildLeave.getTranslation(language).successTitle, { + pseudo: message.author.username, + guildName: guild.name, + }), message.author.displayAvatarURL()); + embed.setDescription(JsonReader.commands.guildLeave.getTranslation(language).leavingSuccess); + return message.channel.send(embed); + } } - //generate confirmation embed - embed.setAuthor(format(JsonReader.commands.guildLeave.getTranslation(language).leaveTitle, { - pseudo: message.author.username - }), message.author.displayAvatarURL()); - if (guild.chief_id != entity.id) { - embed.setDescription(format(JsonReader.commands.guildLeave.getTranslation(language).leaveDesc, { - guildName: guild.name + // Cancel leaving + return sendErrorMessage( + message.author, + message.channel, + language, + format(JsonReader.commands.guildLeave.getTranslation(language).leavingCancelled, { + guildName: guild.name, })); - } else { - embed.setDescription(format(JsonReader.commands.guildLeave.getTranslation(language).leaveChiefDesc, { - guildName: guild.name - })); - } - - let msg = await message.channel.send(embed); - - embed = new discord.MessageEmbed(); - const filterConfirm = (reaction, user) => { - return ((reaction.emoji.name == MENU_REACTION.ACCEPT || reaction.emoji.name == MENU_REACTION.DENY) && user.id === message.author.id); - }; + }); - const collector = msg.createReactionCollector(filterConfirm, { - time: 120000, - max: 1 - }); - - collector.on('end', async (reaction) => { - if (reaction.first()) { // a reaction exist - if (reaction.first().emoji.name == MENU_REACTION.ACCEPT) { - entity.Player.guild_id = null; - - if (guild.chief_id == entity.id) { - //the chief is leaving : destroy the guild - await Players.update({ guild_id: null }, { - where: { - guild_id: guild.id - } - }); - await Guilds.destroy({ - where: { - id: guild.id - } - }); - } - - await Promise.all([ - entity.save(), - entity.Player.save() - ]); - - embed.setAuthor(format(JsonReader.commands.guildLeave.getTranslation(language).successTitle, { - pseudo: message.author.username, - guildName: guild.name - }), message.author.displayAvatarURL()); - embed.setDescription(JsonReader.commands.guildLeave.getTranslation(language).leavingSuccess); - return message.channel.send(embed); - } - } - - //Cancel leaving - return sendErrorMessage( - message.author, - message.channel, - language, - format(JsonReader.commands.guildLeave.getTranslation(language).leavingCancelled, { - guildName: guild.name - })); - }); - - await Promise.all([ + await Promise.all([ msg.react(MENU_REACTION.ACCEPT), - msg.react(MENU_REACTION.DENY) + msg.react(MENU_REACTION.DENY), ]); - }; module.exports = { - "guildleave": GuildLeaveCommand, - "gleave": GuildLeaveCommand, - "gl": GuildLeaveCommand + 'guildleave': GuildLeaveCommand, + 'gleave': GuildLeaveCommand, + 'gl': GuildLeaveCommand, }; diff --git a/src/commands/player/DailyCommand.js b/src/commands/player/DailyCommand.js index 44c4066e9..790f0b1ea 100644 --- a/src/commands/player/DailyCommand.js +++ b/src/commands/player/DailyCommand.js @@ -3,63 +3,95 @@ * @param {("fr"|"en")} language - Language to use in the response * @param {module:"discord.js".Message} message - Message from the discord server */ -const DailyCommand = async function (language, message) { - let [entity] = await Entities.getOrRegister(message.author.id); - if ((await canPerformCommand(message, language, PERMISSION.ROLE.ALL, [EFFECT.BABY], entity)) !== true) { +const DailyCommand = async function(language, message) { + const [entity] = await Entities.getOrRegister(message.author.id); + if ((await canPerformCommand(message, language, PERMISSION.ROLE.ALL, + [EFFECT.BABY], entity)) !== true) { return; } - let moment =require('moment'); - let currentDay = new moment().add(JsonReader.commands.daily.numberOfDayToReload, 'd'); - let activeObject = await entity.Player.Inventory.getActiveObject(); - let lastDailyDay = await entity.Player.Inventory.lastDailyAt; + const currentDay = (new (require('moment'))).add( + JsonReader.commands.daily.numberOfDayToReload, 'd'); + const activeObject = await entity.Player.Inventory.getActiveObject(); + const lastDailyDay = await entity.Player.Inventory.lastDailyAt; - let embed = new discord.MessageEmbed(); + const embed = new discord.MessageEmbed(); if (lastDailyDay < currentDay) { embed.setColor(JsonReader.bot.embed.error) - .setAuthor(format(JsonReader.commands.daily.getTranslation(language).noDailyError, { pseudo: message.author.username }), message.author.displayAvatarURL()) - .setDescription(JsonReader.commands.daily.getTranslation(language).alreadyClaimedError); + .setAuthor(format( + JsonReader.commands.daily.getTranslation(language).noDailyError, + {pseudo: message.author.username}), + message.author.displayAvatarURL()) + .setDescription(JsonReader.commands.daily.getTranslation( + language).alreadyClaimedError); return await message.channel.send(embed); } - if (activeObject.nature == NATURE.NONE) { if (activeObject.id != JsonReader.models.inventories.object_id) { - //there is a object that do nothing in the inventory + // there is a object that do nothing in the inventory embed.setColor(JsonReader.bot.embed.error) - .setAuthor(format(JsonReader.commands.daily.getTranslation(language).noDailyError, { pseudo: message.author.username }), message.author.displayAvatarURL()) - .setDescription(JsonReader.commands.daily.getTranslation(language).objectDoNothingError); + .setAuthor(format( + JsonReader.commands.daily.getTranslation(language).noDailyError, + {pseudo: message.author.username}), + message.author.displayAvatarURL()) + .setDescription(JsonReader.commands.daily.getTranslation( + language).objectDoNothingError); } else { - //there is no object in the inventory + // there is no object in the inventory embed.setColor(JsonReader.bot.embed.error) - .setAuthor(format(JsonReader.commands.daily.getTranslation(language).noDailyError, { pseudo: message.author.username }), message.author.displayAvatarURL()) - .setDescription(JsonReader.commands.daily.getTranslation(language).noActiveObjectdescription); + .setAuthor(format( + JsonReader.commands.daily.getTranslation(language).noDailyError, + {pseudo: message.author.username}), + message.author.displayAvatarURL()) + .setDescription(JsonReader.commands.daily.getTranslation( + language).noActiveObjectdescription); } } if (activeObject.nature == NATURE.HEALTH) { embed.setColor(JsonReader.bot.embed.default) - .setAuthor(format(JsonReader.commands.daily.getTranslation(language).dailySuccess, { pseudo: message.author.username }), message.author.displayAvatarURL()) - .setDescription(format(JsonReader.commands.daily.getTranslation(language).healthDaily, { value: activeObject.power })); + .setAuthor(format( + JsonReader.commands.daily.getTranslation(language).dailySuccess, + {pseudo: message.author.username}), + message.author.displayAvatarURL()) + .setDescription(format( + JsonReader.commands.daily.getTranslation(language).healthDaily, + {value: activeObject.power})); entity.addHealth(activeObject.power); entity.Player.Inventory.updateLastDailyAt(); } - if (activeObject.nature == NATURE.SPEED || activeObject.nature == NATURE.DEFENSE || activeObject.nature == NATURE.ATTACK) { //Those objects are active only during fights + if (activeObject.nature == NATURE.SPEED || activeObject.nature == + NATURE.DEFENSE || activeObject.nature == NATURE.ATTACK) { // Those objects are active only during fights embed.setColor(JsonReader.bot.embed.error) - .setAuthor(format(JsonReader.commands.daily.getTranslation(language).noDailyError, { pseudo: message.author.username }), message.author.displayAvatarURL()) - .setDescription(JsonReader.commands.daily.getTranslation(language).objectIsActiveDuringFights); + .setAuthor(format( + JsonReader.commands.daily.getTranslation(language).noDailyError, + {pseudo: message.author.username}), + message.author.displayAvatarURL()) + .setDescription(JsonReader.commands.daily.getTranslation( + language).objectIsActiveDuringFights); } if (activeObject.nature == NATURE.HOSPITAL) { embed.setColor(JsonReader.bot.embed.default) - .setAuthor(format(JsonReader.commands.daily.getTranslation(language).dailySuccess, { pseudo: message.author.username }), message.author.displayAvatarURL()) - .setDescription(format(JsonReader.commands.daily.getTranslation(language).hospitalBonus, { value: activeObject.power })); + .setAuthor(format( + JsonReader.commands.daily.getTranslation(language).dailySuccess, + {pseudo: message.author.username}), + message.author.displayAvatarURL()) + .setDescription(format( + JsonReader.commands.daily.getTranslation(language).hospitalBonus, + {value: activeObject.power})); entity.Player.fastForward(activeObject.power); entity.Player.Inventory.updateLastDailyAt(); } if (activeObject.nature == NATURE.MONEY) { embed.setColor(JsonReader.bot.embed.default) - .setAuthor(format(JsonReader.commands.daily.getTranslation(language).dailySuccess, { pseudo: message.author.username }), message.author.displayAvatarURL()) - .setDescription(format(JsonReader.commands.daily.getTranslation(language).moneyBonus, { value: activeObject.power })); + .setAuthor(format( + JsonReader.commands.daily.getTranslation(language).dailySuccess, + {pseudo: message.author.username}), + message.author.displayAvatarURL()) + .setDescription(format( + JsonReader.commands.daily.getTranslation(language).moneyBonus, + {value: activeObject.power})); entity.Player.addMoney(activeObject.power); entity.Player.Inventory.updateLastDailyAt(); } @@ -67,12 +99,14 @@ const DailyCommand = async function (language, message) { await Promise.all([ entity.save(), entity.Player.save(), - entity.Player.Inventory.save() + entity.Player.Inventory.save(), ]); return await message.channel.send(embed); }; - +/** + * @type {{daily: DailyCommand, da: DailyCommand}} + */ module.exports = { daily: DailyCommand, da: DailyCommand, diff --git a/src/commands/player/DrinkCommand.js b/src/commands/player/DrinkCommand.js index 525221377..652bec98f 100644 --- a/src/commands/player/DrinkCommand.js +++ b/src/commands/player/DrinkCommand.js @@ -3,64 +3,64 @@ * @param {("fr"|"en")} language - Language to use in the response * @param {module:"discord.js".Message} message - Message from the discord server */ -const DrinkCommand = async function (language, message) { - let [entity] = await Entities.getOrRegister(message.author.id); - if ((await canPerformCommand(message, language, PERMISSION.ROLE.ALL, [EFFECT.BABY], entity)) !== true) { - return; - } - let potion = await entity.Player.Inventory.getPotion(); - let embed = new discord.MessageEmbed(); +const DrinkCommand = async function(language, message) { + const [entity] = await Entities.getOrRegister(message.author.id); + if ((await canPerformCommand(message, language, PERMISSION.ROLE.ALL, [EFFECT.BABY], entity)) !== true) { + return; + } + const potion = await entity.Player.Inventory.getPotion(); + const embed = new discord.MessageEmbed(); - if (potion.nature == NATURE.NONE) { - if (potion.id != JsonReader.models.inventories.potion_id) { - //there is a potion that do nothing in the inventory - embed.setColor(JsonReader.bot.embed.error) - .setAuthor(format(JsonReader.commands.drink.getTranslation(language).noDrinkError, { pseudo: message.author.username }), message.author.displayAvatarURL()) - .setDescription(JsonReader.commands.drink.getTranslation(language).objectDoNothingError); - } else { - //there is no potion in the inventory - embed.setColor(JsonReader.bot.embed.error) - .setAuthor(format(JsonReader.commands.drink.getTranslation(language).noDrinkError, { pseudo: message.author.username }), message.author.displayAvatarURL()) - .setDescription(JsonReader.commands.drink.getTranslation(language).noActiveObjectdescription); - } - } - if (potion.nature == NATURE.HEALTH) { - embed.setColor(JsonReader.bot.embed.default) - .setAuthor(format(JsonReader.commands.drink.getTranslation(language).drinkSuccess, { pseudo: message.author.username }), message.author.displayAvatarURL()) - .setDescription(format(JsonReader.commands.drink.getTranslation(language).healthBonus, { value: potion.power })); - entity.addHealth(potion.power); - entity.Player.Inventory.drinkPotion(); - } - if (potion.nature == NATURE.SPEED || potion.nature == NATURE.DEFENSE || potion.nature == NATURE.ATTACK) { //Those objects are active only during fights - embed.setColor(JsonReader.bot.embed.error) - .setAuthor(format(JsonReader.commands.drink.getTranslation(language).noDrinkError, { pseudo: message.author.username }), message.author.displayAvatarURL()) - .setDescription(JsonReader.commands.drink.getTranslation(language).objectIsActiveDuringFights); - } - if (potion.nature == NATURE.HOSPITAL) { - embed.setColor(JsonReader.bot.embed.default) - .setAuthor(format(JsonReader.commands.drink.getTranslation(language).drinkSuccess, { pseudo: message.author.username }), message.author.displayAvatarURL()) - .setDescription(format(JsonReader.commands.drink.getTranslation(language).hospitalBonus, { value: potion.power })); - entity.Player.fastForward(potion.power); - entity.Player.Inventory.drinkPotion(); - } - if (potion.nature == NATURE.MONEY) { - embed.setColor(JsonReader.bot.embed.default) - .setAuthor(format(JsonReader.commands.drink.getTranslation(language).drinkSuccess, { pseudo: message.author.username }), message.author.displayAvatarURL()) - .setDescription(format(JsonReader.commands.drink.getTranslation(language).moneyBonus, { value: potion.power })); - entity.Player.addMoney(potion.power); - entity.Player.Inventory.drinkPotion(); + if (potion.nature == NATURE.NONE) { + if (potion.id != JsonReader.models.inventories.potion_id) { + // there is a potion that do nothing in the inventory + embed.setColor(JsonReader.bot.embed.error) + .setAuthor(format(JsonReader.commands.drink.getTranslation(language).noDrinkError, {pseudo: message.author.username}), message.author.displayAvatarURL()) + .setDescription(JsonReader.commands.drink.getTranslation(language).objectDoNothingError); + } else { + // there is no potion in the inventory + embed.setColor(JsonReader.bot.embed.error) + .setAuthor(format(JsonReader.commands.drink.getTranslation(language).noDrinkError, {pseudo: message.author.username}), message.author.displayAvatarURL()) + .setDescription(JsonReader.commands.drink.getTranslation(language).noActiveObjectdescription); } + } + if (potion.nature == NATURE.HEALTH) { + embed.setColor(JsonReader.bot.embed.default) + .setAuthor(format(JsonReader.commands.drink.getTranslation(language).drinkSuccess, {pseudo: message.author.username}), message.author.displayAvatarURL()) + .setDescription(format(JsonReader.commands.drink.getTranslation(language).healthBonus, {value: potion.power})); + entity.addHealth(potion.power); + entity.Player.Inventory.drinkPotion(); + } + if (potion.nature == NATURE.SPEED || potion.nature == NATURE.DEFENSE || potion.nature == NATURE.ATTACK) { // Those objects are active only during fights + embed.setColor(JsonReader.bot.embed.error) + .setAuthor(format(JsonReader.commands.drink.getTranslation(language).noDrinkError, {pseudo: message.author.username}), message.author.displayAvatarURL()) + .setDescription(JsonReader.commands.drink.getTranslation(language).objectIsActiveDuringFights); + } + if (potion.nature == NATURE.HOSPITAL) { + embed.setColor(JsonReader.bot.embed.default) + .setAuthor(format(JsonReader.commands.drink.getTranslation(language).drinkSuccess, {pseudo: message.author.username}), message.author.displayAvatarURL()) + .setDescription(format(JsonReader.commands.drink.getTranslation(language).hospitalBonus, {value: potion.power})); + entity.Player.fastForward(potion.power); + entity.Player.Inventory.drinkPotion(); + } + if (potion.nature == NATURE.MONEY) { + embed.setColor(JsonReader.bot.embed.default) + .setAuthor(format(JsonReader.commands.drink.getTranslation(language).drinkSuccess, {pseudo: message.author.username}), message.author.displayAvatarURL()) + .setDescription(format(JsonReader.commands.drink.getTranslation(language).moneyBonus, {value: potion.power})); + entity.Player.addMoney(potion.power); + entity.Player.Inventory.drinkPotion(); + } - await Promise.all([ - entity.save(), - entity.Player.save(), - entity.Player.Inventory.save() - ]); - return await message.channel.send(embed); + await Promise.all([ + entity.save(), + entity.Player.save(), + entity.Player.Inventory.save(), + ]); + return await message.channel.send(embed); }; module.exports = { - drink: DrinkCommand, - dr: DrinkCommand, + drink: DrinkCommand, + dr: DrinkCommand, }; diff --git a/src/commands/player/FightCommand.js b/src/commands/player/FightCommand.js index fcc3eea5a..bd372238d 100644 --- a/src/commands/player/FightCommand.js +++ b/src/commands/player/FightCommand.js @@ -1,4 +1,4 @@ -let Fight = require("../../core/Fight"); +const Fight = require('../../core/Fight'); /** * Displays information about the profile of the player who sent the command @@ -6,122 +6,121 @@ let Fight = require("../../core/Fight"); * @param {module:"discord.js".Message} message - Message from the discord server * @param {String[]} args=[] - Additional arguments sent with the command */ -const FightCommand = async function (language, message, args) { +const FightCommand = async function(language, message, args) { + let attacker; + [attacker] = await Entities.getOrRegister(message.author.id); - let attacker; - [attacker] = await Entities.getOrRegister(message.author.id); - - /*let ftmp = new Fight(attacker, attacker, message, language); //Fight for testing + /* let ftmp = new Fight(attacker, attacker, message, language); //Fight for testing return ftmp.startFight();*/ - let defender = null; - if (args.length !== 0) { - defender = await Entities.getByArgs(args, message); - if (defender == null) { - sendErrorMessage(message.author, message.channel, language, JsonReader.commands.fight.getTranslation(language).error.defenderDoesntExist); - return; - } else if (defender.discordUser_id === attacker.discordUser_id) { - sendErrorMessage(message.author, message.channel, language, JsonReader.commands.fight.getTranslation(language).error.fightHimself); - return; - } + let defender = null; + if (args.length !== 0) { + defender = await Entities.getByArgs(args, message); + if (defender == null) { + sendErrorMessage(message.author, message.channel, language, JsonReader.commands.fight.getTranslation(language).error.defenderDoesntExist); + return; + } else if (defender.discordUser_id === attacker.discordUser_id) { + sendErrorMessage(message.author, message.channel, language, JsonReader.commands.fight.getTranslation(language).error.fightHimself); + return; } + } - if ((await canPerformCommand(message, language, PERMISSION.ROLE.ALL, [EFFECT.BABY], attacker)) !== true) { - return; - } + if ((await canPerformCommand(message, language, PERMISSION.ROLE.ALL, [EFFECT.BABY], attacker)) !== true) { + return; + } - let canF; - if ((canF = canFight(attacker)) !== FIGHT_ERROR.NONE) { - sendError(message, attacker, canF, true, language); - return; - } - if (defender != null && (canF = canFight(defender)) !== FIGHT_ERROR.NONE) { - sendError(message, defender, canF, false, language); - return; - } + let canF; + if ((canF = canFight(attacker)) !== FIGHT_ERROR.NONE) { + sendError(message, attacker, canF, true, language); + return; + } + if (defender != null && (canF = canFight(defender)) !== FIGHT_ERROR.NONE) { + sendError(message, defender, canF, false, language); + return; + } - let msg; - let fightInstance = undefined; - let spamCount = 0; - global.addBlockedPlayer(attacker.discordUser_id, "fight"); - if (defender == null) { - msg = format(JsonReader.commands.fight.getTranslation(language).wantsToFightAnyone, {player: attacker.getMention()}); - } else { - msg = format(JsonReader.commands.fight.getTranslation(language).wantsToFightSomeone, { - player: attacker.getMention(), - opponent: defender.getMention() - }); - } - await message.channel.send(msg) - .then(async function (messageFightAsk) { - await messageFightAsk.react("✅"); - await messageFightAsk.react("❌"); + let msg; + let fightInstance = undefined; + let spamCount = 0; + global.addBlockedPlayer(attacker.discordUser_id, 'fight'); + if (defender == null) { + msg = format(JsonReader.commands.fight.getTranslation(language).wantsToFightAnyone, {player: attacker.getMention()}); + } else { + msg = format(JsonReader.commands.fight.getTranslation(language).wantsToFightSomeone, { + player: attacker.getMention(), + opponent: defender.getMention(), + }); + } + await message.channel.send(msg) + .then(async function(messageFightAsk) { + await messageFightAsk.react('✅'); + await messageFightAsk.react('❌'); - let filter; - if (defender == null) { - filter = (reaction, user) => { - return !user.bot; - }; - } else { - filter = (reaction, user) => { - return user.id === attacker.discordUser_id || user.id === defender.discordUser_id; - }; - } + let filter; + if (defender == null) { + filter = (reaction, user) => { + return !user.bot; + }; + } else { + filter = (reaction, user) => { + return user.id === attacker.discordUser_id || user.id === defender.discordUser_id; + }; + } - const collector = messageFightAsk.createReactionCollector(filter, {time: 60000}); + const collector = messageFightAsk.createReactionCollector(filter, {time: 60000}); - collector.on('collect', async (reaction, user) => { - switch (reaction.emoji.name) { - case "✅": - if (user.id === attacker.discordUser_id) { - spamCount++; - if (spamCount < 3) { - sendErrorMessage(user, message.channel, language, JsonReader.commands.fight.getTranslation(language).error.fightHimself); - return; - } - sendErrorMessage(user, message.channel, language, JsonReader.commands.fight.getTranslation(language).error.spamCanceled); - fightInstance = null; - break; - } - [defender] = await Entities.getOrRegister(user.id); - if ((canF = canFight(defender)) !== FIGHT_ERROR.NONE) { - sendError(message, defender, canF, true, language); - defender = null; - return; - } - fightInstance = new Fight(attacker, defender, message, language); - fightInstance.startFight(); - break; - case "❌": - if (user.id === attacker.discordUser_id) { - await message.channel.send(JsonReader.commands.fight.getTranslation(language).error.canceled); - } else if (defender != null) { - sendErrorMessage(user, message.channel, language, JsonReader.commands.fight.getTranslation(language).error.opponentNotAvailable); - } else { - sendErrorMessage(user, message.channel, language, format(JsonReader.commands.fight.getTranslation(language).error.onlyInitiator, {pseudo: "<@" + user.id + ">"})); - } - fightInstance = null; - break; - default: - return; + collector.on('collect', async (reaction, user) => { + switch (reaction.emoji.name) { + case '✅': + if (user.id === attacker.discordUser_id) { + spamCount++; + if (spamCount < 3) { + sendErrorMessage(user, message.channel, language, JsonReader.commands.fight.getTranslation(language).error.fightHimself); + return; } - collector.stop(); - }); + sendErrorMessage(user, message.channel, language, JsonReader.commands.fight.getTranslation(language).error.spamCanceled); + fightInstance = null; + break; + } + [defender] = await Entities.getOrRegister(user.id); + if ((canF = canFight(defender)) !== FIGHT_ERROR.NONE) { + sendError(message, defender, canF, true, language); + defender = null; + return; + } + fightInstance = new Fight(attacker, defender, message, language); + fightInstance.startFight(); + break; + case '❌': + if (user.id === attacker.discordUser_id) { + await message.channel.send(JsonReader.commands.fight.getTranslation(language).error.canceled); + } else if (defender != null) { + sendErrorMessage(user, message.channel, language, JsonReader.commands.fight.getTranslation(language).error.opponentNotAvailable); + } else { + sendErrorMessage(user, message.channel, language, format(JsonReader.commands.fight.getTranslation(language).error.onlyInitiator, {pseudo: '<@' + user.id + '>'})); + } + fightInstance = null; + break; + default: + return; + } + collector.stop(); + }); - collector.on('end', async function () { - if (fightInstance === undefined) { - global.removeBlockedPlayer(attacker.discordUser_id); - if (defender == null) { - sendErrorMessage(message.author, message.channel, language, JsonReader.commands.fight.getTranslation(language).error.noOneAvailable); - } else { - sendErrorMessage(message.author, message.channel, language, JsonReader.commands.fight.getTranslation(language).error.opponentNotAvailable); - } - } - if (fightInstance == null) { - global.removeBlockedPlayer(attacker.discordUser_id); - } - }); + collector.on('end', async function() { + if (fightInstance === undefined) { + global.removeBlockedPlayer(attacker.discordUser_id); + if (defender == null) { + sendErrorMessage(message.author, message.channel, language, JsonReader.commands.fight.getTranslation(language).error.noOneAvailable); + } else { + sendErrorMessage(message.author, message.channel, language, JsonReader.commands.fight.getTranslation(language).error.opponentNotAvailable); + } + } + if (fightInstance == null) { + global.removeBlockedPlayer(attacker.discordUser_id); + } }); + }); }; /** @@ -133,58 +132,58 @@ const FightCommand = async function (language, message, args) { * @param {"fr"|"en"} language */ function sendError(message, entity, error, direct, language) { - switch (error) { - case FIGHT_ERROR.WRONG_LEVEL: - let msg = direct ? - format(JsonReader.commands.fight.getTranslation(language).error.levelTooLow.direct, { pseudo : entity.getMention(), level: FIGHT.REQUIRED_LEVEL }) - : format(JsonReader.commands.fight.getTranslation(language).error.levelTooLow.indirect, {level: FIGHT.REQUIRED_LEVEL}); - sendErrorMessage(message.guild.members.cache.get(entity.discordUser_id).user, message.channel, language, msg); - break; - case FIGHT_ERROR.DISALLOWED_EFFECT: - let msg1 = direct ? - format(JsonReader.commands.fight.getTranslation(language).error.cantFightStatus.direct, { pseudo : entity.getMention() }) - : JsonReader.commands.fight.getTranslation(language).error.cantFightStatus.indirect; - sendErrorMessage(message.guild.members.cache.get(entity.discordUser_id).user, message.channel, language, msg1); - break; - case FIGHT_ERROR.OCCUPIED: - let msg2 = direct ? - format(JsonReader.commands.fight.getTranslation(language).error.occupied.direct, { pseudo : entity.getMention() }) - : JsonReader.commands.fight.getTranslation(language).error.occupied.indirect; - sendErrorMessage(message.guild.members.cache.get(entity.discordUser_id).user, message.channel, language, msg2); - break; - default: - break; - } + switch (error) { + case FIGHT_ERROR.WRONG_LEVEL: + const msg = direct ? + format(JsonReader.commands.fight.getTranslation(language).error.levelTooLow.direct, {pseudo: entity.getMention(), level: FIGHT.REQUIRED_LEVEL}) : + format(JsonReader.commands.fight.getTranslation(language).error.levelTooLow.indirect, {level: FIGHT.REQUIRED_LEVEL}); + sendErrorMessage(message.guild.members.cache.get(entity.discordUser_id).user, message.channel, language, msg); + break; + case FIGHT_ERROR.DISALLOWED_EFFECT: + const msg1 = direct ? + format(JsonReader.commands.fight.getTranslation(language).error.cantFightStatus.direct, {pseudo: entity.getMention()}) : + JsonReader.commands.fight.getTranslation(language).error.cantFightStatus.indirect; + sendErrorMessage(message.guild.members.cache.get(entity.discordUser_id).user, message.channel, language, msg1); + break; + case FIGHT_ERROR.OCCUPIED: + const msg2 = direct ? + format(JsonReader.commands.fight.getTranslation(language).error.occupied.direct, {pseudo: entity.getMention()}) : + JsonReader.commands.fight.getTranslation(language).error.occupied.indirect; + sendErrorMessage(message.guild.members.cache.get(entity.discordUser_id).user, message.channel, language, msg2); + break; + default: + break; + } } /** * @param entity - * @returns {Number} error + * @return {Number} error */ function canFight(entity) { - if (entity == null) { - return null; - } - if (entity.Player.level < FIGHT.REQUIRED_LEVEL) { - return FIGHT_ERROR.WRONG_LEVEL; - } - if (entity.effect !== EFFECT.SMILEY) { - return FIGHT_ERROR.DISALLOWED_EFFECT; - } - if (global.hasBlockedPlayer(entity.discordUser_id)) { - return FIGHT_ERROR.OCCUPIED; - } - return 0; + if (entity == null) { + return null; + } + if (entity.Player.level < FIGHT.REQUIRED_LEVEL) { + return FIGHT_ERROR.WRONG_LEVEL; + } + if (entity.effect !== EFFECT.SMILEY) { + return FIGHT_ERROR.DISALLOWED_EFFECT; + } + if (global.hasBlockedPlayer(entity.discordUser_id)) { + return FIGHT_ERROR.OCCUPIED; + } + return 0; } const FIGHT_ERROR = { - NONE: 0, - WRONG_LEVEL: 1, - DISALLOWED_EFFECT: 2, - OCCUPIED: 3 + NONE: 0, + WRONG_LEVEL: 1, + DISALLOWED_EFFECT: 2, + OCCUPIED: 3, }; module.exports = { - 'fight': FightCommand, - 'f': FightCommand, + 'fight': FightCommand, + 'f': FightCommand, }; diff --git a/src/commands/player/HelpCommand.js b/src/commands/player/HelpCommand.js index f0fd65611..89a9ba328 100644 --- a/src/commands/player/HelpCommand.js +++ b/src/commands/player/HelpCommand.js @@ -5,14 +5,20 @@ * @param {String[]} args=[] - Additional arguments sent with the command */ const HelpCommand = async (language, message, args) => { - let helpMessage = JsonReader.commands.help.getTranslation(language).commands[args[0]]; + let helpMessage = JsonReader.commands.help.getTranslation( + language).commands[args[0]]; if (helpMessage === undefined) { - helpMessage = format(JsonReader.commands.help.getTranslation(language).main, {pseudo: message.author.username}); + helpMessage = format(JsonReader.commands.help.getTranslation(language).main, + {pseudo: message.author.username}); } - if (client.guilds.cache.get(JsonReader.app.MAIN_SERVER_ID).members.cache.find(val => val.id === message.author.id) === undefined) { - await message.author.send(JsonReader.commands.help.getTranslation(language).mp); + if (client.guilds.cache.get(JsonReader.app.MAIN_SERVER_ID) + .members + .cache + .find((val) => val.id === message.author.id) === undefined) { + await message.author.send( + JsonReader.commands.help.getTranslation(language).mp); } await message.channel.send(helpMessage); diff --git a/src/commands/player/InventoryCommand.js b/src/commands/player/InventoryCommand.js index 95a3b0ca3..fa86bbe05 100644 --- a/src/commands/player/InventoryCommand.js +++ b/src/commands/player/InventoryCommand.js @@ -16,13 +16,13 @@ const InventoryCommand = async (language, message, args) => { return; } - let inventoryEmbed = await entity.Player.Inventory.toEmbedObject(language); + const inventoryEmbed = await entity.Player.Inventory.toEmbedObject(language); return await message.channel.send( new discord.MessageEmbed() .setColor(JsonReader.bot.embed.default) .setTitle(format(JsonReader.commands.inventory.getTranslation(language).title, {pseudo: await entity.Player.getPseudo(language)})) - .addFields(inventoryEmbed) - ); + .addFields(inventoryEmbed), + ); }; module.exports = { diff --git a/src/commands/player/InviteCommand.js b/src/commands/player/InviteCommand.js index ca82dc374..9f201c84d 100644 --- a/src/commands/player/InviteCommand.js +++ b/src/commands/player/InviteCommand.js @@ -4,10 +4,10 @@ * @param {module:"discord.js".Message} message - Message from the discord server * @param {String[]} args=[] - Additional arguments sent with the command */ -const InviteCommand = async function (language, message, args) { - await message.channel.send(JsonReader.commands.invite.getTranslation(language).main); +const InviteCommand = async function(language, message, args) { + await message.channel.send(JsonReader.commands.invite.getTranslation(language).main); }; module.exports = { - "invite": InviteCommand + 'invite': InviteCommand, }; diff --git a/src/commands/player/PingCommand.js b/src/commands/player/PingCommand.js index d257d56e3..734c51f27 100644 --- a/src/commands/player/PingCommand.js +++ b/src/commands/player/PingCommand.js @@ -6,7 +6,7 @@ */ const PingCommand = async function(language, message, args) { message.channel.send(JsonReader.commands.ping.getTranslation(language).create) - .then(msg => { + .then((msg) => { msg.edit(format(JsonReader.commands.ping.getTranslation(language).edit, {timeElasped: (msg.createdTimestamp - message.createdTimestamp)})); }); diff --git a/src/commands/player/ProfileCommand.js b/src/commands/player/ProfileCommand.js index d7161dd52..0c84429d3 100644 --- a/src/commands/player/ProfileCommand.js +++ b/src/commands/player/ProfileCommand.js @@ -4,19 +4,19 @@ * @param {module:"discord.js".Message} message - Message from the discord server * @param {String[]} args=[] - Additional arguments sent with the command */ -const ProfileCommand = async function (language, message, args) { +const ProfileCommand = async function(language, message, args) { let entity = await Entities.getByArgs(args, message); if (entity === null) { [entity] = await Entities.getOrRegister(message.author.id); } if ((await canPerformCommand(message, language, PERMISSION.ROLE.ALL, - [EFFECT.BABY], entity)) !== true) { + [EFFECT.BABY], entity)) !== true) { return; } let titleEffect = entity.effect; - let fields = [ + const fields = [ { name: JsonReader.commands.profile.getTranslation(language).information.fieldName, value: format(JsonReader.commands.profile.getTranslation(language).information.fieldValue, { @@ -31,21 +31,21 @@ const ProfileCommand = async function (language, message, args) { name: JsonReader.commands.profile.getTranslation(language).statistique.fieldName, value: format(JsonReader.commands.profile.getTranslation(language).statistique.fieldValue, { cumulativeAttack: entity.getCumulativeAttack( - await entity.Player.Inventory.getWeapon(), - await entity.Player.Inventory.getArmor(), - await entity.Player.Inventory.getPotion(), - await entity.Player.Inventory.getActiveObject() + await entity.Player.Inventory.getWeapon(), + await entity.Player.Inventory.getArmor(), + await entity.Player.Inventory.getPotion(), + await entity.Player.Inventory.getActiveObject(), ), cumulativeDefense: entity.getCumulativeDefense(await entity.Player.Inventory.getWeapon(), - await entity.Player.Inventory.getArmor(), - await entity.Player.Inventory.getPotion(), - await entity.Player.Inventory.getActiveObject() + await entity.Player.Inventory.getArmor(), + await entity.Player.Inventory.getPotion(), + await entity.Player.Inventory.getActiveObject(), ), cumulativeSpeed: entity.getCumulativeSpeed( - await entity.Player.Inventory.getWeapon(), - await entity.Player.Inventory.getArmor(), - await entity.Player.Inventory.getPotion(), - await entity.Player.Inventory.getActiveObject() + await entity.Player.Inventory.getWeapon(), + await entity.Player.Inventory.getArmor(), + await entity.Player.Inventory.getPotion(), + await entity.Player.Inventory.getActiveObject(), ), cumulativeMaxHealth: entity.getCumulativeHealth(entity.Player), }), @@ -53,7 +53,7 @@ const ProfileCommand = async function (language, message, args) { { name: JsonReader.commands.profile.getTranslation(language).classement.fieldName, value: format(JsonReader.commands.profile.getTranslation( - language).classement.fieldValue, { + language).classement.fieldValue, { rank: (await Players.getById(entity.Player.id))[0].rank, numberOfPlayer: (await Players.count({ where: { @@ -79,21 +79,21 @@ const ProfileCommand = async function (language, message, args) { name: JsonReader.commands.profile.getTranslation(language).timeLeft.fieldName, value: format(JsonReader.commands.profile.getTranslation(language).timeLeft.fieldValue, { effect: entity.effect, - timeLeft: minutesToString(millisecondsToMinutes(entity.Player.lastReportAt.getTime() - message.createdAt.getTime())) + timeLeft: minutesToString(millisecondsToMinutes(entity.Player.lastReportAt.getTime() - message.createdAt.getTime())), }), }); } } - let msg = await message.channel.send( - new discord.MessageEmbed() - .setColor(JsonReader.bot.embed.default) - .setTitle(format(JsonReader.commands.profile.getTranslation(language).title, { - effect: titleEffect, - pseudo: (await entity.Player.getPseudo(language)), - level: entity.Player.level, - })) - .addFields(fields), + const msg = await message.channel.send( + new discord.MessageEmbed() + .setColor(JsonReader.bot.embed.default) + .setTitle(format(JsonReader.commands.profile.getTranslation(language).title, { + effect: titleEffect, + pseudo: (await entity.Player.getPseudo(language)), + level: entity.Player.level, + })) + .addFields(fields), ); const filterConfirm = (reaction, user) => { @@ -102,23 +102,21 @@ const ProfileCommand = async function (language, message, args) { const collector = msg.createReactionCollector(filterConfirm, { time: 120000, - max: JsonReader.commands.profile.badgeMaxReactNumber + max: JsonReader.commands.profile.badgeMaxReactNumber, }); collector.on('collect', async (reaction) => { - message.channel.send(JsonReader.commands.profile.getTranslation(language).badges[reaction.emoji.name]).then(msg => { - msg.delete({ "timeout": JsonReader.commands.profile.badgeDescriptionTimeout }); - }).catch(err => { }); + message.channel.send(JsonReader.commands.profile.getTranslation(language).badges[reaction.emoji.name]).then((msg) => { + msg.delete({'timeout': JsonReader.commands.profile.badgeDescriptionTimeout}); + }).catch((err) => { }); }); if (entity.Player.badges !== null) { - let badges = entity.Player.badges.split('-'); - for (let badgeid in badges) { + const badges = entity.Player.badges.split('-'); + for (const badgeid in badges) { await msg.react(badges[badgeid]); } } - - }; module.exports = { diff --git a/src/commands/player/ReportCommand.js b/src/commands/player/ReportCommand.js index 02a85350d..e2008715d 100644 --- a/src/commands/player/ReportCommand.js +++ b/src/commands/player/ReportCommand.js @@ -4,9 +4,8 @@ * @param {module:"discord.js".Message} message - Message from the discord server * @param {String[]} args=[] - Additional arguments sent with the command */ -const ReportCommand = async function (language, message, args) { - - let [entity] = await Entities.getOrRegister(message.author.id); +const ReportCommand = async function(language, message, args) { + const [entity] = await Entities.getOrRegister(message.author.id); if ((await canPerformCommand(message, language, PERMISSION.ROLE.ALL, [EFFECT.DEAD], entity)) !== true) { return; @@ -19,7 +18,7 @@ const ReportCommand = async function (language, message, args) { if (entity.Player.score === 0 && entity.effect === EFFECT.BABY) { // TODO add player to blocked - let event = await Events.findOne({ where: { id: 0 } }); + const event = await Events.findOne({where: {id: 0}}); return await doEvent(message, language, event, entity, time); } @@ -35,7 +34,7 @@ const ReportCommand = async function (language, message, args) { // return; // } - let event = await Events.findOne({ order: (require('sequelize')).literal('RANDOM()') }); + const event = await Events.findOne({order: (require('sequelize')).literal('RANDOM()')}); return await doEvent(message, language, event, entity, time); }; @@ -48,21 +47,21 @@ const ReportCommand = async function (language, message, args) { * @return {Promise} */ const doEvent = async (message, language, event, entity, time) => { - const eventDisplayed = await message.channel.send(format(JsonReader.commands.report.getTranslation(language).doEvent, { pseudo: message.author.username, event: event[language] })); + const eventDisplayed = await message.channel.send(format(JsonReader.commands.report.getTranslation(language).doEvent, {pseudo: message.author.username, event: event[language]})); const reactions = await event.getReactions(); const collector = eventDisplayed.createReactionCollector(async (reaction, user) => { return (reactions.indexOf(reaction.emoji.name) !== -1 && user.id === message.author.id); - }, { time: 120000 }); + }, {time: 120000}); collector.on('collect', async (reaction) => { collector.stop(); - let possibility = await Possibilities.findAll({ where: { event_id: event.id, possibilityKey: reaction.emoji.name } }); + const possibility = await Possibilities.findAll({where: {event_id: event.id, possibilityKey: reaction.emoji.name}}); await doPossibility(message, language, possibility, entity, time); }); collector.on('end', async (collected) => { if (!collected.first()) { - let possibility = await Possibilities.findAll({ where: { event_id: event.id, possibilityKey: 'end' } }); + const possibility = await Possibilities.findAll({where: {event_id: event.id, possibilityKey: 'end'}}); await doPossibility(message, language, possibility, entity, time); } }); @@ -80,29 +79,29 @@ const doEvent = async (message, language, event, entity, time) => { * @return {Promise} */ const doPossibility = async (message, language, possibility, entity, time) => { - let player = entity.Player; - let scoreChange = time + Math.round(Math.random() * (time / 10 + player.level)); + const player = entity.Player; + const scoreChange = time + Math.round(Math.random() * (time / 10 + player.level)); let moneyChange = possibility.money + Math.round(time / 10 + Math.round(Math.random() * (time / 10 + player.level / 5))); if (possibility.money < 0 && moneyChange > 0) { moneyChange = Math.round(possibility.money / 2); } let result = ''; - result += (moneyChange >= 0) ? format(JsonReader.commands.report.getTranslation(language).money, { money: moneyChange }) : result += format(JsonReader.commands.report.getTranslation(language).moneyLoose, { money: moneyChange }); + result += (moneyChange >= 0) ? format(JsonReader.commands.report.getTranslation(language).money, {money: moneyChange}) : result += format(JsonReader.commands.report.getTranslation(language).moneyLoose, {money: moneyChange}); if (possibility.experience > 0) { - result += format(JsonReader.commands.report.getTranslation(language).experience, { experience: possibility.experience }); + result += format(JsonReader.commands.report.getTranslation(language).experience, {experience: possibility.experience}); } if (possibility.health < 0) { - result += format(JsonReader.commands.report.getTranslation(language).health, { health: possibility.health }); + result += format(JsonReader.commands.report.getTranslation(language).health, {health: possibility.health}); } if (possibility.health > 0) { - result += format(JsonReader.commands.report.getTranslation(language).healthLoose, { health: possibility.health }); + result += format(JsonReader.commands.report.getTranslation(language).healthLoose, {health: possibility.health}); } // TODO Mettre le temps + le temps de l'effet if (possibility.lostTime > 0) { - result += format(JsonReader.commands.report.getTranslation(language).timeLost, { timeLost: possibility.lostTime }); + result += format(JsonReader.commands.report.getTranslation(language).timeLost, {timeLost: possibility.lostTime}); } - result = format(JsonReader.commands.report.getTranslation(language).doPossibility, { pseudo: message.author, result: result, event: possibility[language] }); + result = format(JsonReader.commands.report.getTranslation(language).doPossibility, {pseudo: message.author, result: result, event: possibility[language]}); entity.effect = possibility.effect; entity.addHealth(possibility.health); diff --git a/src/commands/player/RespawnCommand.js b/src/commands/player/RespawnCommand.js index 583d5be66..2215232bd 100644 --- a/src/commands/player/RespawnCommand.js +++ b/src/commands/player/RespawnCommand.js @@ -5,8 +5,7 @@ * @param {String[]} args=[] - Additional arguments sent with the command */ const RespawnCommand = async (language, message, args) => { - - let [entity] = await Entities.getOrRegister(message.author.id); + const [entity] = await Entities.getOrRegister(message.author.id); if ((await canPerformCommand(message, language, PERMISSION.ROLE.ALL, [EFFECT.BABY], entity)) !== true) { return; @@ -24,8 +23,8 @@ const RespawnCommand = async (language, message, args) => { entity.Player.addWeeklyScore(-lostScore); await Promise.all([ - entity.save(), - entity.Player.save() + entity.save(), + entity.Player.save(), ]); await message.channel.send(format(JsonReader.commands.respawn.getTranslation(language).respawn, {pseudo: message.author.username, lostScore: lostScore})); diff --git a/src/commands/player/SellCommand.js b/src/commands/player/SellCommand.js index ea745e6fe..37d784d63 100644 --- a/src/commands/player/SellCommand.js +++ b/src/commands/player/SellCommand.js @@ -5,84 +5,83 @@ * @param {String[]} args=[] - Additional arguments sent with the command */ const SellCommand = async (language, message, args) => { + const [entity] = await Entities.getOrRegister(message.author.id); - let [entity] = await Entities.getOrRegister(message.author.id); + if ((await canPerformCommand(message, language, PERMISSION.ROLE.ALL, [EFFECT.BABY], entity)) !== true) { + return; + } + if (await sendBlockedError(message.author, message.channel, language)) { + return; + } - if ((await canPerformCommand(message, language, PERMISSION.ROLE.ALL, [EFFECT.BABY], entity)) !== true) { - return; - } - if (await sendBlockedError(message.author, message.channel, language)) { - return; - } - - if (!entity.Player.Inventory.hasItemToSell()) { - await sendErrorMessage(message.author, message.channel, language, JsonReader.commands.sell.getTranslation(language).noItemToSell); - return; - } - - let backupItem = await entity.Player.Inventory.getBackupObject(); - let embed = new discord.MessageEmbed() - .setColor(JsonReader.bot.embed.default) - .setTitle(JsonReader.commands.sell.getTranslation(language).sellTitle) - .setDescription(format(JsonReader.commands.sell.getTranslation(language).confirmSell, { - mention: entity.getMention(), - item: backupItem.getName(language), - money: getItemValue(backupItem) - })); - let sellMessage = await message.channel.send(embed); - let sold = false; - addBlockedPlayer(entity.discordUser_id, "sell"); + if (!entity.Player.Inventory.hasItemToSell()) { + await sendErrorMessage(message.author, message.channel, language, JsonReader.commands.sell.getTranslation(language).noItemToSell); + return; + } - const filter = (reaction, user) => { - return user.id === message.author.id; - }; + let backupItem = await entity.Player.Inventory.getBackupObject(); + const embed = new discord.MessageEmbed() + .setColor(JsonReader.bot.embed.default) + .setTitle(JsonReader.commands.sell.getTranslation(language).sellTitle) + .setDescription(format(JsonReader.commands.sell.getTranslation(language).confirmSell, { + mention: entity.getMention(), + item: backupItem.getName(language), + money: getItemValue(backupItem), + })); + const sellMessage = await message.channel.send(embed); + let sold = false; + addBlockedPlayer(entity.discordUser_id, 'sell'); - const collector = sellMessage.createReactionCollector(filter, {time: 30000}); + const filter = (reaction, user) => { + return user.id === message.author.id; + }; - collector.on('collect', async (reaction) => { - switch (reaction.emoji.name) { - case "✅": - sold = true; - backupItem = await entity.Player.Inventory.getBackupObject(); - if (entity.Player.Inventory.hasItemToSell()) { //Preventive - let money = getItemValue(backupItem); - entity.Player.Inventory.backup_id = JsonReader.models.inventories.backup_id; - entity.Player.Inventory.save(); - entity.Player.money += money; - entity.Player.save(); - await message.channel.send( - format(JsonReader.commands.sell.getTranslation(language).soldMessage, - { - item: backupItem.getName(language), - money: money, - totalMoney: entity.Player.money - } - )); - } - collector.stop(); - break; - case "❌": - collector.stop(); - break; - default: - return; - } - }); + const collector = sellMessage.createReactionCollector(filter, {time: 30000}); - collector.on('end', async () => { - removeBlockedPlayer(entity.discordUser_id); - if (!sold) { - await sendErrorMessage(message.author, message.channel, language, JsonReader.commands.sell.getTranslation(language).sellCanceled); + collector.on('collect', async (reaction) => { + switch (reaction.emoji.name) { + case '✅': + sold = true; + backupItem = await entity.Player.Inventory.getBackupObject(); + if (entity.Player.Inventory.hasItemToSell()) { // Preventive + const money = getItemValue(backupItem); + entity.Player.Inventory.backup_id = JsonReader.models.inventories.backup_id; + entity.Player.Inventory.save(); + entity.Player.money += money; + entity.Player.save(); + await message.channel.send( + format(JsonReader.commands.sell.getTranslation(language).soldMessage, + { + item: backupItem.getName(language), + money: money, + totalMoney: entity.Player.money, + }, + )); } - }); + collector.stop(); + break; + case '❌': + collector.stop(); + break; + default: + return; + } + }); - try { - await sellMessage.react("✅"); - await sellMessage.react("❌"); - } catch (e) { + collector.on('end', async () => { + removeBlockedPlayer(entity.discordUser_id); + if (!sold) { + await sendErrorMessage(message.author, message.channel, language, JsonReader.commands.sell.getTranslation(language).sellCanceled); } + }); + + try { + await sellMessage.react('✅'); + await sellMessage.react('❌'); + } catch (e) { + } }; module.exports = { - 'sell': SellCommand, + 'sell': SellCommand, }; diff --git a/src/commands/player/ShopCommand.js b/src/commands/player/ShopCommand.js index 27090a4d2..8eff9f4c1 100644 --- a/src/commands/player/ShopCommand.js +++ b/src/commands/player/ShopCommand.js @@ -1,4 +1,4 @@ -const Shop = require("core/Shop"); +const Shop = require('core/Shop'); /** * Displays information about the profile of the player who sent the command @@ -6,12 +6,12 @@ const Shop = require("core/Shop"); * @param {module:"discord.js".Message} message - Message from the discord server * @param {String[]} args=[] - Additional arguments sent with the command */ -const ShopCommand = async function (language, message, args) { - const [entity] = await Entities.getOrRegister(message.author.id); - new Shop(message.author, entity, message, language).open(); -} +const ShopCommand = async function(language, message, args) { + const [entity] = await Entities.getOrRegister(message.author.id); + new Shop(message.author, entity, message, language).open(); +}; module.exports = { - 'shop': ShopCommand, - 's': ShopCommand, -}; \ No newline at end of file + 'shop': ShopCommand, + 's': ShopCommand, +}; diff --git a/src/commands/player/SwitchCommand.js b/src/commands/player/SwitchCommand.js index 52fb08465..7430c0f22 100644 --- a/src/commands/player/SwitchCommand.js +++ b/src/commands/player/SwitchCommand.js @@ -5,8 +5,7 @@ * @param {String[]} args=[] - Additional arguments sent with the command */ const SwitchCommand = async (language, message, args) => { - - let [entity] = await Entities.getOrRegister(message.author.id); + const [entity] = await Entities.getOrRegister(message.author.id); if ((await canPerformCommand(message, language, PERMISSION.ROLE.ALL, [EFFECT.BABY], entity)) !== true) { return; diff --git a/src/commands_old/CommandTable.js b/src/commands_old/CommandTable.js index 4c28cc898..e12783542 100644 --- a/src/commands_old/CommandTable.js +++ b/src/commands_old/CommandTable.js @@ -2,43 +2,43 @@ const CommandTable = new Map( [ - // ["drink", Drink.DrinkCommand], - // ["dr", Drink.DrinkCommand], - // ["daily", Daily.DailyCommand], - // ["da", Daily.DailyCommand], - // ["top", Top.TopCommand], - // ["topweek", TopWeek.TopWeekCommand], - // ["topw", TopWeek.TopWeekCommand], - // ["tops", TopServ.TopServCommand], - // ["topserv", TopServ.TopServCommand], - // ["tw", TopWeek.TopWeekCommand], - // ["sell", Sell.SellCommand], - // ["fight", Fight.FightCommand], - // ["f", Fight.FightCommand], - // ["s", Shop.ShopCommand], - // ["shop", Shop.ShopCommand], - // - // ["destroy", Reset.ResetCommand], - // ["servs", Servers.ServersCommand], - // ["cp", ChangePrefix.ChangePrefixCommand], - // ["rb", ResetBadge.ResetBadgeCommand], - // ["dm", Send.SendCommand], - // - // ["guild", Guild.guildCommand], - // ["g", Guild.guildCommand], - // ["guildadd", GuildAdd.guildAddCommand], - // ["gadd", GuildAdd.guildAddCommand], - // ["ga", GuildAdd.guildAddCommand], - // ["guildleave", GuildLeave.guildLeaveCommand], - // ["gleave", GuildLeave.guildLeaveCommand], - // ["guildcreate", GuildCreate.guildCreateCommand], - // ["gcreate", GuildCreate.guildCreateCommand], - // ["guildkick", GuildKick.guildKickCommand], - // ["gkick", GuildKick.guildKickCommand], - // ["gdaily", GuildDaily.guildDailyCommand], - // ["guilddaily", GuildDaily.guildDailyCommand], - // ["gd", GuildDaily.guildDailyCommand], - ] + // ["drink", Drink.DrinkCommand], + // ["dr", Drink.DrinkCommand], + // ["daily", Daily.DailyCommand], + // ["da", Daily.DailyCommand], + // ["top", Top.TopCommand], + // ["topweek", TopWeek.TopWeekCommand], + // ["topw", TopWeek.TopWeekCommand], + // ["tops", TopServ.TopServCommand], + // ["topserv", TopServ.TopServCommand], + // ["tw", TopWeek.TopWeekCommand], + // ["sell", Sell.SellCommand], + // ["fight", Fight.FightCommand], + // ["f", Fight.FightCommand], + // ["s", Shop.ShopCommand], + // ["shop", Shop.ShopCommand], + // + // ["destroy", Reset.ResetCommand], + // ["servs", Servers.ServersCommand], + // ["cp", ChangePrefix.ChangePrefixCommand], + // ["rb", ResetBadge.ResetBadgeCommand], + // ["dm", Send.SendCommand], + // + // ["guild", Guild.guildCommand], + // ["g", Guild.guildCommand], + // ["guildadd", GuildAdd.guildAddCommand], + // ["gadd", GuildAdd.guildAddCommand], + // ["ga", GuildAdd.guildAddCommand], + // ["guildleave", GuildLeave.guildLeaveCommand], + // ["gleave", GuildLeave.guildLeaveCommand], + // ["guildcreate", GuildCreate.guildCreateCommand], + // ["gcreate", GuildCreate.guildCreateCommand], + // ["guildkick", GuildKick.guildKickCommand], + // ["gkick", GuildKick.guildKickCommand], + // ["gdaily", GuildDaily.guildDailyCommand], + // ["guilddaily", GuildDaily.guildDailyCommand], + // ["gd", GuildDaily.guildDailyCommand], + ], ); module.exports = CommandTable; diff --git a/src/commands_old/Fight.js b/src/commands_old/Fight.js index 255d6fca1..9d448ee34 100644 --- a/src/commands_old/Fight.js +++ b/src/commands_old/Fight.js @@ -1,8 +1,8 @@ const PlayerManager = require('../core/PlayerManager'); const Tools = require('../utils/Tools'); const DefaultValues = require('data/text/DefaultValues'); -const moment = require("moment"); -const Discord = require("discord.js"); +const moment = require('moment'); +const Discord = require('discord.js'); let Text; let language; @@ -11,122 +11,120 @@ let language; * Allow the user to launch a fight * @param message - The message that caused the function to be called. Used to retrieve the author of the message. */ -const fightCommand = async function (message, args, client, talkedRecently) { - Text = await Tools.chargeText(message); - language = await Tools.detectLanguage(message); - const diffMinutes = getMinutesBeforeReset(); - if (resetIsNow(diffMinutes)) { - const embed = await generateResetTopWeekEmbed(message); - return message.channel.send(embed) - } - if (talkedRecently.has(message.author.id)) { - return message.channel.send(Text.commands.sell.cancelStart + message.author + Text.commands.shop.tooMuchShop); - } - let playerManager = new PlayerManager; - let attacker = message.author; - let defender = undefined; - let spamchecker = 0; - let attackerDefenseAdd = 20; - let defenderDefenseAdd = 20; - let attackerSpeedAdd = 30; - let defenderSpeedAdd = 30; - let nbTours = 0; - //loading of the current player - let player = await playerManager.getCurrentPlayer(message); - - if (player.level < DefaultValues.fight.minimalLevel) { - displayErrorSkillMissing(message, attacker); - } else { - if (playerManager.checkState(player, message, ":smiley:", language)) { //check if the player is not dead or sick or something else - - let chosenOpponent = undefined; - if (askForAnotherPlayer(args)) { //check if an opponent was asked - let chosenOpponentId; - chosenOpponent = await getAskedPlayer(chosenOpponentId, chosenOpponent, playerManager, message, args); - if (askedPlayerIsInvalid(chosenOpponent)) { - return message.channel.send(Text.commands.fight.errorEmoji + message.author + Text.commands.fight.chosenOpponentDontPlay); - } - if (chosenOpponent.id === player.id) { - return message.channel.send(Text.commands.fight.errorEmoji + attacker + Text.commands.fight.alreadyAttackerError); +const fightCommand = async function(message, args, client, talkedRecently) { + Text = await Tools.chargeText(message); + language = await Tools.detectLanguage(message); + const diffMinutes = getMinutesBeforeReset(); + if (resetIsNow(diffMinutes)) { + const embed = await generateResetTopWeekEmbed(message); + return message.channel.send(embed); + } + if (talkedRecently.has(message.author.id)) { + return message.channel.send(Text.commands.sell.cancelStart + message.author + Text.commands.shop.tooMuchShop); + } + const playerManager = new PlayerManager; + const attacker = message.author; + let defender = undefined; + let spamchecker = 0; + const attackerDefenseAdd = 20; + const defenderDefenseAdd = 20; + const attackerSpeedAdd = 30; + const defenderSpeedAdd = 30; + const nbTours = 0; + // loading of the current player + const player = await playerManager.getCurrentPlayer(message); + + if (player.level < DefaultValues.fight.minimalLevel) { + displayErrorSkillMissing(message, attacker); + } else { + if (playerManager.checkState(player, message, ':smiley:', language)) { // check if the player is not dead or sick or something else + let chosenOpponent = undefined; + if (askForAnotherPlayer(args)) { // check if an opponent was asked + let chosenOpponentId; + chosenOpponent = await getAskedPlayer(chosenOpponentId, chosenOpponent, playerManager, message, args); + if (askedPlayerIsInvalid(chosenOpponent)) { + return message.channel.send(Text.commands.fight.errorEmoji + message.author + Text.commands.fight.chosenOpponentDontPlay); + } + if (chosenOpponent.id === player.id) { + return message.channel.send(Text.commands.fight.errorEmoji + attacker + Text.commands.fight.alreadyAttackerError); + } + if (chosenOpponent.getLevel() < DefaultValues.fight.minimalLevel) { + return message.channel.send(Text.commands.fight.errorEmoji + message.author + Text.commands.fight.chosenOpponentNotEnoughSkill1 + DefaultValues.fight.minimalLevel + Text.commands.fight.chosenOpponentNotEnoughSkill2); + } + } + + playerManager.setPlayerAsOccupied(player); + + const messageIntro = await displayIntroMessage(message, attacker, chosenOpponent); + + let fightIsOpen = true; + + let filter; + if (chosenOpponent === undefined) { + filter = (reaction, user) => { // filter if no one was asked + return (reactionIsCorrect(reaction, user)); + }; + } else { + filter = (reaction, user) => { // filter if an opponent was asked + if (chosenOpponent.id === user.id || attacker.id === user.id) { + return (reactionIsCorrect(reaction, user)); + } + }; + } + + const collector = messageIntro.createReactionCollector(filter, { + time: 120000, + }); + + // execute this if a user answer to the demand + collector.on('collect', async (reaction) => { + if (fightIsOpen) { + defender = reaction.users.last(); + if (fightHasToBeCanceled(reaction)) { + ({fightIsOpen, spamchecker} = treatFightCancel(defender, message, fightIsOpen, attacker, playerManager, player, spamchecker)); + } else { + if (defender.id === message.author.id) { // le defenseur et l'attaquant sont la même personne + ({spamchecker, fightIsOpen} = cancelFightLaunch(spamchecker, message, attacker, fightIsOpen, playerManager, player)); + } else {// le defenseur n'est pas l'attaquant + const defenderPlayer = await playerManager.getPlayerById(defender.id, message); + if (defenderPlayer.level < DefaultValues.fight.minimalLevel) { + displayErrorSkillMissing(message, defender); + } else { + if (talkedRecently.has(defender.id)) { + return message.channel.send(Text.commands.sell.cancelStart + defender + Text.commands.shop.tooMuchShop); } - if (chosenOpponent.getLevel() < DefaultValues.fight.minimalLevel) { - return message.channel.send(Text.commands.fight.errorEmoji + message.author + Text.commands.fight.chosenOpponentNotEnoughSkill1 + DefaultValues.fight.minimalLevel + Text.commands.fight.chosenOpponentNotEnoughSkill2); + if (playerManager.checkState(defenderPlayer, message, ':smiley:', language, defender.username)) { // check if the player is not dead or sick or something else + playerManager.setPlayerAsOccupied(defenderPlayer); + fightIsOpen = false; + displayFightStartMessage(message, attacker, defender); + const actualUser = attacker; + const actuelPlayer = player; + const opponentUser = defender; + const opponentPlayer = defenderPlayer; + const lastMessageFromBot = undefined; + const lastEtatFight = undefined; + const attackerPower = player.getFightPower(); + const defenderPower = defenderPlayer.getFightPower(); + + await Tools.addItemBonus(player); + await Tools.addItemBonus(defenderPlayer); + fight(lastMessageFromBot, message, actualUser, player, actuelPlayer, opponentPlayer, opponentUser, attacker, defender, defenderPlayer, attackerPower, defenderPower, defenderDefenseAdd, attackerDefenseAdd, lastEtatFight, attackerSpeedAdd, defenderSpeedAdd, nbTours); } + } } + } + } + }); - playerManager.setPlayerAsOccupied(player); - - let messageIntro = await displayIntroMessage(message, attacker, chosenOpponent); - - let fightIsOpen = true; - - let filter; - if (chosenOpponent === undefined) { - filter = (reaction, user) => { //filter if no one was asked - return (reactionIsCorrect(reaction, user)); - }; - } - else { - filter = (reaction, user) => { //filter if an opponent was asked - if (chosenOpponent.id === user.id || attacker.id === user.id) { - return (reactionIsCorrect(reaction, user)); - } - }; - } - - const collector = messageIntro.createReactionCollector(filter, { - time: 120000 - }); - - //execute this if a user answer to the demand - collector.on('collect', async (reaction) => { - if (fightIsOpen) { - defender = reaction.users.last(); - if (fightHasToBeCanceled(reaction)) { - ({ fightIsOpen, spamchecker } = treatFightCancel(defender, message, fightIsOpen, attacker, playerManager, player, spamchecker)); - } else { - if (defender.id === message.author.id) { // le defenseur et l'attaquant sont la même personne - ({ spamchecker, fightIsOpen } = cancelFightLaunch(spamchecker, message, attacker, fightIsOpen, playerManager, player)); - } else {// le defenseur n'est pas l'attaquant - let defenderPlayer = await playerManager.getPlayerById(defender.id, message); - if (defenderPlayer.level < DefaultValues.fight.minimalLevel) { - displayErrorSkillMissing(message, defender); - } else { - if (talkedRecently.has(defender.id)) { - return message.channel.send(Text.commands.sell.cancelStart + defender + Text.commands.shop.tooMuchShop); - } - if (playerManager.checkState(defenderPlayer, message, ":smiley:", language, defender.username)) { //check if the player is not dead or sick or something else - playerManager.setPlayerAsOccupied(defenderPlayer); - fightIsOpen = false; - displayFightStartMessage(message, attacker, defender); - let actualUser = attacker; - let actuelPlayer = player; - let opponentUser = defender; - let opponentPlayer = defenderPlayer; - let lastMessageFromBot = undefined; - let lastEtatFight = undefined; - let attackerPower = player.getFightPower(); - let defenderPower = defenderPlayer.getFightPower(); - - await Tools.addItemBonus(player); - await Tools.addItemBonus(defenderPlayer); - fight(lastMessageFromBot, message, actualUser, player, actuelPlayer, opponentPlayer, opponentUser, attacker, defender, defenderPlayer, attackerPower, defenderPower, defenderDefenseAdd, attackerDefenseAdd, lastEtatFight, attackerSpeedAdd, defenderSpeedAdd, nbTours); - } - } - } - } - } - }); - - //end of the time the users have to answer to the demand - collector.on('end', () => { - if (fightIsOpen) { - message.channel.send(Text.commands.fight.errorEmoji + attacker + Text.commands.fight.noAnswerError); - playerManager.setPlayerAsUnOccupied(player); - } - }); + // end of the time the users have to answer to the demand + collector.on('end', () => { + if (fightIsOpen) { + message.channel.send(Text.commands.fight.errorEmoji + attacker + Text.commands.fight.noAnswerError); + playerManager.setPlayerAsUnOccupied(player); } + }); } + } }; @@ -135,12 +133,12 @@ const fightCommand = async function (message, args, client, talkedRecently) { * @param {*} message - the message used to get this embed */ async function generateResetTopWeekEmbed(message) { - const embed = new Discord.RichEmbed(); - let Text = await Tools.chargeText(message); - embed.setColor(DefaultValues.embed.color); - embed.setTitle(Text.commandReader.resetIsNowTitle); - embed.setDescription(Text.commandReader.resetIsNowFooterFight); - return embed; + const embed = new Discord.RichEmbed(); + const Text = await Tools.chargeText(message); + embed.setColor(DefaultValues.embed.color); + embed.setTitle(Text.commandReader.resetIsNowTitle); + embed.setDescription(Text.commandReader.resetIsNowFooterFight); + return embed; } /** @@ -148,22 +146,22 @@ async function generateResetTopWeekEmbed(message) { * @param {*} diffMinutes - The amount of minutes before the next reset */ function resetIsNow(diffMinutes) { - return diffMinutes < 15 && diffMinutes > -1; + return diffMinutes < 15 && diffMinutes > -1; } /** * Get the amount of minutes before the next reset */ function getMinutesBeforeReset() { - var now = new Date(); //The current date - var dateOfReset = new Date(); // The next Sunday - dateOfReset.setDate(now.getDate() + (0 + (7 - now.getDay())) % 7); // Calculating next Sunday - dateOfReset.setHours(22, 59, 59); // Defining hours, min, sec to 23, 59, 59 - //Parsing dates to moment - var nowMoment = new moment(now); - var momentOfReset = new moment(dateOfReset); - const diffMinutes = momentOfReset.diff(nowMoment, 'minutes'); - return diffMinutes; + const now = new Date(); // The current date + const dateOfReset = new Date(); // The next Sunday + dateOfReset.setDate(now.getDate() + (0 + (7 - now.getDay())) % 7); // Calculating next Sunday + dateOfReset.setHours(22, 59, 59); // Defining hours, min, sec to 23, 59, 59 + // Parsing dates to moment + const nowMoment = new moment(now); + const momentOfReset = new moment(dateOfReset); + const diffMinutes = momentOfReset.diff(nowMoment, 'minutes'); + return diffMinutes; } @@ -174,15 +172,15 @@ function getMinutesBeforeReset() { * @param {*} defender */ function displayFightStartMessage(message, attacker, defender) { - message.channel.send(Text.commands.fight.startStart + attacker + Text.commands.fight.startJoin + defender + Text.commands.fight.startEnd); + message.channel.send(Text.commands.fight.startStart + attacker + Text.commands.fight.startJoin + defender + Text.commands.fight.startEnd); } async function displayIntroMessage(message, attacker, chosenOpponent) { - let messageIntro = await generateIntroMessage(message, attacker, chosenOpponent); - messageIntro.react("⚔").then(a => { - messageIntro.react("❌"); - }); - return messageIntro; + const messageIntro = await generateIntroMessage(message, attacker, chosenOpponent); + messageIntro.react('⚔').then((a) => { + messageIntro.react('❌'); + }); + return messageIntro; } @@ -208,103 +206,105 @@ async function displayIntroMessage(message, attacker, chosenOpponent) { * @param {*} nbTours */ async function fight(lastMessageFromBot, message, actualUser, player, actuelPlayer, opponentPlayer, opponentUser, attacker, defender, defenderPlayer, attackerPower, defenderPower, defenderDefenseAdd, attackerDefenseAdd, lastEtatFight, attackerSpeedAdd, defenderSpeedAdd, nbTours) { - let actualUserPoints = 0; - let opponentUserPoints = 0; - if (actualUser == attacker) { - actualUserPoints = attackerPower; - opponentUserPoints = defenderPower; - } else { - actualUserPoints = defenderPower; - opponentUserPoints = attackerPower; - } - if (lastMessageFromBot != undefined) - lastMessageFromBot.delete(5000).catch(); - if (lastEtatFight != undefined) - lastEtatFight.delete(5000).catch(); - lastEtatFight = await message.channel.send(Text.commands.fight.statusIntro + Text.commands.fight.attackerEmoji + actualUser.username + + let actualUserPoints = 0; + let opponentUserPoints = 0; + if (actualUser == attacker) { + actualUserPoints = attackerPower; + opponentUserPoints = defenderPower; + } else { + actualUserPoints = defenderPower; + opponentUserPoints = attackerPower; + } + if (lastMessageFromBot != undefined) { + lastMessageFromBot.delete(5000).catch(); + } + if (lastEtatFight != undefined) { + lastEtatFight.delete(5000).catch(); + } + lastEtatFight = await message.channel.send(Text.commands.fight.statusIntro + Text.commands.fight.attackerEmoji + actualUser.username + Text.commands.fight.statusPoints + actualUserPoints + Text.commands.profile.statsAttack + actuelPlayer.attack + Text.commands.profile.statsDefense + actuelPlayer.defense + Text.commands.profile.statsSpeed + actuelPlayer.speed + Text.commands.fight.endLine + Text.commands.fight.defenderEmoji + opponentUser.username + Text.commands.fight.statusPoints + opponentUserPoints + Text.commands.profile.statsAttack + opponentPlayer.attack + - Text.commands.profile.statsDefense + opponentPlayer.defense + Text.commands.profile.statsSpeed + opponentPlayer.speed) - - - lastMessageFromBot = await displayFightMenu(message, actualUser); - - let playerHasResponded = true; - - const filter = (reaction, user) => { - return (reactionFightIsCorrect(reaction, user)); - }; - - const collector = lastMessageFromBot.createReactionCollector(filter, { - time: 30000 - }); - - //execute this if a user answer to the demand - collector.on('collect', async (reaction) => { - if (playerHasResponded) { - if (reaction.users.last() === actualUser) { //On check que c'est le bon joueur qui réagis - playerHasResponded = false; - let attackPower; - switch (reaction.emoji.name) { - case "🗡": //attaque rapide - // 75% des points d'attaque sont utilisés - // 30% des points de défense sont utilisés - // Taux de réussite de 30% qui monte à 95% sur un adversaire plus lent - ({ defenderPower, attackerPower } = quickAttack(attackPower, player, opponentPlayer, actuelPlayer, defenderPower, attackerPower, attacker, actualUser, reaction, message)); - break; - case "⚔": //attaque simple - // 100% ou 50% des points d'attaque sont utilisés - // 100% des points de défense sont utilisés - // Taux de réussite de 60% qui monte à 80% sur un adversaire plus lent - // En plus des 60% de réussite, 30% de chance de réussite partielle sur un adversaire plus rapide - ({ defenderPower, attackerPower } = simpleAttack(attackPower, player, opponentPlayer, actuelPlayer, defenderPower, attackerPower, attacker, actualUser, reaction, message)); - break; - case "💣": //attaque puissante - // 125% ou 200% des points d'attaque sont utilisés - // 100% des points de défense sont utilisés - // Diminue la vitesse de 10 ou 25 % pour le prochain tour - // 5% de réussite totale sur un adversaire plus rapide et 40% de réussite partielle - // 30% de réussite totale sur un adversaire plus lent et 70% de réusite partielle - ({ defenderPower, attackerPower } = powerfullAttack(attackPower, player, opponentPlayer, actuelPlayer, defenderPower, attackerPower, attacker, actualUser, reaction, message)); - break; - case "🛡": //defendre - // augmente la défense - ({ attackerDefenseAdd, defenderDefenseAdd } = ImproveDefense(actualUser, attacker, actuelPlayer, attackerDefenseAdd, message, reaction, defenderDefenseAdd)); - break; - default: // esquive - // augmente la vitesse de 30 points - ({ attackerSpeedAdd, defenderSpeedAdd } = ImproveSpeed(actualUser, attacker, actuelPlayer, attackerSpeedAdd, message, reaction, defenderSpeedAdd)); - break; - } - ({ actualUser, actuelPlayer, opponentPlayer, opponentUser } = switchActiveUser(actualUser, attacker, defender, actuelPlayer, defenderPlayer, player, opponentPlayer, opponentUser)); - if (nobodyLooses(attackerPower, defenderPower)) { - if (nbTours < 25) { - nbTours++; - fight(lastMessageFromBot, message, actualUser, player, actuelPlayer, opponentPlayer, opponentUser, attacker, defender, defenderPlayer, attackerPower, defenderPower, defenderDefenseAdd, attackerDefenseAdd, lastEtatFight, attackerSpeedAdd, defenderSpeedAdd, nbTours); - } else { - let playerManager = new PlayerManager(); - playerManager.setPlayerAsUnOccupied(player); - playerManager.setPlayerAsUnOccupied(defenderPlayer); - message.channel.send(Text.commands.fight.finStart + attacker + Text.commands.fight.finEgalite + defender + Text.commands.fight.finEgaliteEnd); - } - } else { - finDeCombat(player, defenderPlayer, attackerPower, defender, attacker, message, lastMessageFromBot, lastEtatFight); - } - } + Text.commands.profile.statsDefense + opponentPlayer.defense + Text.commands.profile.statsSpeed + opponentPlayer.speed); + + + lastMessageFromBot = await displayFightMenu(message, actualUser); + + let playerHasResponded = true; + + const filter = (reaction, user) => { + return (reactionFightIsCorrect(reaction, user)); + }; + + const collector = lastMessageFromBot.createReactionCollector(filter, { + time: 30000, + }); + + // execute this if a user answer to the demand + collector.on('collect', async (reaction) => { + if (playerHasResponded) { + if (reaction.users.last() === actualUser) { // On check que c'est le bon joueur qui réagis + playerHasResponded = false; + let attackPower; + switch (reaction.emoji.name) { + case '🗡': // attaque rapide + // 75% des points d'attaque sont utilisés + // 30% des points de défense sont utilisés + // Taux de réussite de 30% qui monte à 95% sur un adversaire plus lent + ({defenderPower, attackerPower} = quickAttack(attackPower, player, opponentPlayer, actuelPlayer, defenderPower, attackerPower, attacker, actualUser, reaction, message)); + break; + case '⚔': // attaque simple + // 100% ou 50% des points d'attaque sont utilisés + // 100% des points de défense sont utilisés + // Taux de réussite de 60% qui monte à 80% sur un adversaire plus lent + // En plus des 60% de réussite, 30% de chance de réussite partielle sur un adversaire plus rapide + ({defenderPower, attackerPower} = simpleAttack(attackPower, player, opponentPlayer, actuelPlayer, defenderPower, attackerPower, attacker, actualUser, reaction, message)); + break; + case '💣': // attaque puissante + // 125% ou 200% des points d'attaque sont utilisés + // 100% des points de défense sont utilisés + // Diminue la vitesse de 10 ou 25 % pour le prochain tour + // 5% de réussite totale sur un adversaire plus rapide et 40% de réussite partielle + // 30% de réussite totale sur un adversaire plus lent et 70% de réusite partielle + ({defenderPower, attackerPower} = powerfullAttack(attackPower, player, opponentPlayer, actuelPlayer, defenderPower, attackerPower, attacker, actualUser, reaction, message)); + break; + case '🛡': // defendre + // augmente la défense + ({attackerDefenseAdd, defenderDefenseAdd} = ImproveDefense(actualUser, attacker, actuelPlayer, attackerDefenseAdd, message, reaction, defenderDefenseAdd)); + break; + default: // esquive + // augmente la vitesse de 30 points + ({attackerSpeedAdd, defenderSpeedAdd} = ImproveSpeed(actualUser, attacker, actuelPlayer, attackerSpeedAdd, message, reaction, defenderSpeedAdd)); + break; } - }); - //end of the time the users have to answer to the demand - collector.on('end', () => { - if (playerHasResponded) { //the player has quit the fight - playerHasResponded = false; - if (actualUser == attacker) { - attackerPower = 0; - } - finDeCombat(player, defenderPlayer, attackerPower, defender, attacker, message, lastMessageFromBot, lastEtatFight); + ({actualUser, actuelPlayer, opponentPlayer, opponentUser} = switchActiveUser(actualUser, attacker, defender, actuelPlayer, defenderPlayer, player, opponentPlayer, opponentUser)); + if (nobodyLooses(attackerPower, defenderPower)) { + if (nbTours < 25) { + nbTours++; + fight(lastMessageFromBot, message, actualUser, player, actuelPlayer, opponentPlayer, opponentUser, attacker, defender, defenderPlayer, attackerPower, defenderPower, defenderDefenseAdd, attackerDefenseAdd, lastEtatFight, attackerSpeedAdd, defenderSpeedAdd, nbTours); + } else { + const playerManager = new PlayerManager(); + playerManager.setPlayerAsUnOccupied(player); + playerManager.setPlayerAsUnOccupied(defenderPlayer); + message.channel.send(Text.commands.fight.finStart + attacker + Text.commands.fight.finEgalite + defender + Text.commands.fight.finEgaliteEnd); + } + } else { + finDeCombat(player, defenderPlayer, attackerPower, defender, attacker, message, lastMessageFromBot, lastEtatFight); } - }); + } + } + }); + // end of the time the users have to answer to the demand + collector.on('end', () => { + if (playerHasResponded) { // the player has quit the fight + playerHasResponded = false; + if (actualUser == attacker) { + attackerPower = 0; + } + finDeCombat(player, defenderPlayer, attackerPower, defender, attacker, message, lastMessageFromBot, lastEtatFight); + } + }); } /** @@ -319,41 +319,42 @@ async function fight(lastMessageFromBot, message, actualUser, player, actuelPlay * @param {*} lastEtatFight - The last message containing the stats of the fight the bot sent */ function finDeCombat(player, defenderPlayer, attackerPower, defender, attacker, message, lastMessageFromBot, lastEtatFight) { - let elo = 0; - let messageFinCombat; - elo = calculateElo(player, defenderPlayer, elo); - let pts; - if (attackerPower <= 0) { //the attacker has loose - pts = Math.round(100 + 10 * player.level * Math.round((player.score / defenderPlayer.score) * 100) / 100); - pts = capMaxWin(pts); - messageFinCombat = Text.commands.fight.finStart + defender + Text.commands.fight.finDebut + attacker + + let elo = 0; + let messageFinCombat; + elo = calculateElo(player, defenderPlayer, elo); + let pts; + if (attackerPower <= 0) { // the attacker has loose + pts = Math.round(100 + 10 * player.level * Math.round((player.score / defenderPlayer.score) * 100) / 100); + pts = capMaxWin(pts); + messageFinCombat = Text.commands.fight.finStart + defender + Text.commands.fight.finDebut + attacker + Text.commands.fight.finEndLine + elo + Text.commands.fight.finPts + pts + Text.commands.fight.finFin; - player.score = player.score - pts; - player.weeklyScore = player.weeklyScore - pts; - defenderPlayer.score = defenderPlayer.score + pts; - defenderPlayer.weeklyScore = defenderPlayer.weeklyScore + pts; - } - else { //the defender has loose - pts = Math.round(100 + 10 * defenderPlayer.level * Math.round((defenderPlayer.score / player.score) * 100) / 100); - pts = capMaxWin(pts); - messageFinCombat = Text.commands.fight.finStart + attacker + Text.commands.fight.finDebut + defender + + player.score = player.score - pts; + player.weeklyScore = player.weeklyScore - pts; + defenderPlayer.score = defenderPlayer.score + pts; + defenderPlayer.weeklyScore = defenderPlayer.weeklyScore + pts; + } else { // the defender has loose + pts = Math.round(100 + 10 * defenderPlayer.level * Math.round((defenderPlayer.score / player.score) * 100) / 100); + pts = capMaxWin(pts); + messageFinCombat = Text.commands.fight.finStart + attacker + Text.commands.fight.finDebut + defender + Text.commands.fight.finEndLine + elo + Text.commands.fight.finPts + pts + Text.commands.fight.finFin; - player.score = player.score + pts; - player.weeklyScore = player.weeklyScore + pts; - defenderPlayer.score = defenderPlayer.score - pts; - defenderPlayer.weeklyScore = defenderPlayer.weeklyScore - pts; - } - let playerManager = new PlayerManager; - playerManager.updatePlayerScore(player); - playerManager.updatePlayerScore(defenderPlayer); - playerManager.setPlayerAsUnOccupied(player); - playerManager.setPlayerAsUnOccupied(defenderPlayer); - - message.channel.send(messageFinCombat); - if (lastMessageFromBot != undefined) - lastMessageFromBot.delete(5000).catch(); - if (lastEtatFight != undefined) - lastEtatFight.delete(5000).catch(); + player.score = player.score + pts; + player.weeklyScore = player.weeklyScore + pts; + defenderPlayer.score = defenderPlayer.score - pts; + defenderPlayer.weeklyScore = defenderPlayer.weeklyScore - pts; + } + const playerManager = new PlayerManager; + playerManager.updatePlayerScore(player); + playerManager.updatePlayerScore(defenderPlayer); + playerManager.setPlayerAsUnOccupied(player); + playerManager.setPlayerAsUnOccupied(defenderPlayer); + + message.channel.send(messageFinCombat); + if (lastMessageFromBot != undefined) { + lastMessageFromBot.delete(5000).catch(); + } + if (lastEtatFight != undefined) { + lastEtatFight.delete(5000).catch(); + } } /** @@ -361,10 +362,10 @@ function finDeCombat(player, defenderPlayer, attackerPower, defender, attacker, * @param {*} pts */ function capMaxWin(pts) { - if (pts > 2000) { - Math.round(pts = 2000 - Tools.generateRandomNumber(5, 1000)); - } - return pts; + if (pts > 2000) { + Math.round(pts = 2000 - Tools.generateRandomNumber(5, 1000)); + } + return pts; } /** @@ -374,13 +375,12 @@ function capMaxWin(pts) { * @param {*} elo - The elo */ function calculateElo(player, defenderPlayer, elo) { - if (player.score < defenderPlayer.score) { - elo = Math.round((player.score / defenderPlayer.score) * 100) / 100; - } - else { - elo = Math.round((defenderPlayer.score / player.score) * 100) / 100; - } - return elo; + if (player.score < defenderPlayer.score) { + elo = Math.round((player.score / defenderPlayer.score) * 100) / 100; + } else { + elo = Math.round((defenderPlayer.score / player.score) * 100) / 100; + } + return elo; } /** @@ -394,19 +394,18 @@ function calculateElo(player, defenderPlayer, elo) { * @param {*} defenderDefenseAdd - The amount of defense the bot has to give to the defender */ function ImproveDefense(actualUser, attacker, actuelPlayer, attackerDefenseAdd, message, reaction, defenderDefenseAdd) { - if (actualUser == attacker) { - attackerDefenseAdd += Tools.generateRandomNumber(0, Math.round(attackerDefenseAdd / 2)) - actuelPlayer.defense += attackerDefenseAdd; - message.channel.send(reaction.emoji.name + Text.commands.fight.endIntroStart + actualUser.username + Text.commands.fight.defenseAdd + attackerDefenseAdd + Text.commands.fight.degatsOutro); - attackerDefenseAdd = Math.floor(attackerDefenseAdd * 0.5); - } - else { - defenderDefenseAdd += Tools.generateRandomNumber(0, Math.round(defenderDefenseAdd / 2)) - actuelPlayer.defense += defenderDefenseAdd; - message.channel.send(reaction.emoji.name + Text.commands.fight.endIntroStart + actualUser.username + Text.commands.fight.defenseAdd + defenderDefenseAdd + Text.commands.fight.degatsOutro); - defenderDefenseAdd = Math.floor(defenderDefenseAdd * 0.5); - } - return { attackerDefenseAdd, defenderDefenseAdd }; + if (actualUser == attacker) { + attackerDefenseAdd += Tools.generateRandomNumber(0, Math.round(attackerDefenseAdd / 2)); + actuelPlayer.defense += attackerDefenseAdd; + message.channel.send(reaction.emoji.name + Text.commands.fight.endIntroStart + actualUser.username + Text.commands.fight.defenseAdd + attackerDefenseAdd + Text.commands.fight.degatsOutro); + attackerDefenseAdd = Math.floor(attackerDefenseAdd * 0.5); + } else { + defenderDefenseAdd += Tools.generateRandomNumber(0, Math.round(defenderDefenseAdd / 2)); + actuelPlayer.defense += defenderDefenseAdd; + message.channel.send(reaction.emoji.name + Text.commands.fight.endIntroStart + actualUser.username + Text.commands.fight.defenseAdd + defenderDefenseAdd + Text.commands.fight.degatsOutro); + defenderDefenseAdd = Math.floor(defenderDefenseAdd * 0.5); + } + return {attackerDefenseAdd, defenderDefenseAdd}; } /** @@ -420,19 +419,18 @@ function ImproveDefense(actualUser, attacker, actuelPlayer, attackerDefenseAdd, * @param {*} defenderSpeedAdd - The amount of speed the bot has to give to the defender */ function ImproveSpeed(actualUser, attacker, actuelPlayer, attackerSpeedAdd, message, reaction, defenderSpeedAdd) { - if (actualUser == attacker) { - attackerSpeedAdd += Tools.generateRandomNumber(0, Math.round(attackerSpeedAdd / 2)) - actuelPlayer.speed += attackerSpeedAdd; - message.channel.send(reaction.emoji.name + Text.commands.fight.endIntroStart + actualUser.username + Text.commands.fight.speedAdd + attackerSpeedAdd + Text.commands.fight.degatsOutro); - attackerSpeedAdd = Math.floor(attackerSpeedAdd * 0.5); - } - else { - defenderSpeedAdd += Tools.generateRandomNumber(0, Math.round(defenderSpeedAdd / 2)) - actuelPlayer.speed += defenderSpeedAdd; - message.channel.send(reaction.emoji.name + Text.commands.fight.endIntroStart + actualUser.username + Text.commands.fight.speedAdd + defenderSpeedAdd + Text.commands.fight.degatsOutro); - defenderSpeedAdd = Math.floor(defenderSpeedAdd * 0.5); - } - return { attackerSpeedAdd, defenderSpeedAdd }; + if (actualUser == attacker) { + attackerSpeedAdd += Tools.generateRandomNumber(0, Math.round(attackerSpeedAdd / 2)); + actuelPlayer.speed += attackerSpeedAdd; + message.channel.send(reaction.emoji.name + Text.commands.fight.endIntroStart + actualUser.username + Text.commands.fight.speedAdd + attackerSpeedAdd + Text.commands.fight.degatsOutro); + attackerSpeedAdd = Math.floor(attackerSpeedAdd * 0.5); + } else { + defenderSpeedAdd += Tools.generateRandomNumber(0, Math.round(defenderSpeedAdd / 2)); + actuelPlayer.speed += defenderSpeedAdd; + message.channel.send(reaction.emoji.name + Text.commands.fight.endIntroStart + actualUser.username + Text.commands.fight.speedAdd + defenderSpeedAdd + Text.commands.fight.degatsOutro); + defenderSpeedAdd = Math.floor(defenderSpeedAdd * 0.5); + } + return {attackerSpeedAdd, defenderSpeedAdd}; } /** @@ -449,45 +447,44 @@ function ImproveSpeed(actualUser, attacker, actuelPlayer, attackerSpeedAdd, mess * @param {*} message */ function powerfullAttack(attackPower, player, opponentPlayer, actuelPlayer, defenderPower, attackerPower, attacker, actualUser, reaction, message) { - //test which player is quicker - let succes = Tools.generateRandomNumber(1, 100); - let powerchanger = 0; - if (opponentPlayer.speed > actuelPlayer.speed) { - if (succes <= 40 && succes > 5) { //partial success - powerchanger = 1.25; - } - if (succes <= 5) { // total success - powerchanger = 2; - } + // test which player is quicker + const succes = Tools.generateRandomNumber(1, 100); + let powerchanger = 0; + if (opponentPlayer.speed > actuelPlayer.speed) { + if (succes <= 40 && succes > 5) { // partial success + powerchanger = 1.25; + } + if (succes <= 5) { // total success + powerchanger = 2; + } + } else { + if (succes <= 80 && succes > 30) { // partial success + powerchanger = 1.25; + } + if (succes <= 40) { // total success + powerchanger = 2; + } + } + lowerSpeed(powerchanger, actuelPlayer); + attackPower = actuelPlayer.attack * powerchanger; + let messagePowerfulAttack = ''; + const defensePower = opponentPlayer.defense; + let degats = Math.round(attackPower - Math.round(defensePower)); + const random = Tools.generateRandomNumber(1, 8); + if (degats > 0) { + if (powerchanger == 2) { + ({defenderPower, attackerPower} = updatePlayerPower(attacker, actualUser, defenderPower, degats, attackerPower)); + messagePowerfulAttack = reaction.emoji.name + Text.commands.fight.endIntroStart + actualUser.username + Text.commands.fight.powerfulAttack.ok[random] + Text.commands.fight.degatsIntro + degats + Text.commands.fight.degatsOutro; } else { - if (succes <= 80 && succes > 30) { //partial success - powerchanger = 1.25; - } - if (succes <= 40) { // total success - powerchanger = 2; - } - } - lowerSpeed(powerchanger, actuelPlayer); - attackPower = actuelPlayer.attack * powerchanger; - let messagePowerfulAttack = ""; - let defensePower = opponentPlayer.defense; - let degats = Math.round(attackPower - Math.round(defensePower)); - let random = Tools.generateRandomNumber(1, 8); - if (degats > 0) { - if (powerchanger == 2) { - ({ defenderPower, attackerPower } = updatePlayerPower(attacker, actualUser, defenderPower, degats, attackerPower)); - messagePowerfulAttack = reaction.emoji.name + Text.commands.fight.endIntroStart + actualUser.username + Text.commands.fight.powerfulAttack.ok[random] + Text.commands.fight.degatsIntro + degats + Text.commands.fight.degatsOutro; - } else { - ({ defenderPower, attackerPower } = updatePlayerPower(attacker, actualUser, defenderPower, degats, attackerPower)); - messagePowerfulAttack = reaction.emoji.name + Text.commands.fight.endIntroStart + actualUser.username + Text.commands.fight.powerfulAttack.meh[random] + Text.commands.fight.degatsIntro + degats + Text.commands.fight.degatsOutro; - } - } - else { - degats = 0; - messagePowerfulAttack = reaction.emoji.name + Text.commands.fight.endIntroStart + actualUser.username + Text.commands.fight.powerfulAttack.ko[random] + Text.commands.fight.degatsIntro + degats + Text.commands.fight.degatsOutro; - } - message.channel.send(messagePowerfulAttack); - return { defenderPower, attackerPower }; + ({defenderPower, attackerPower} = updatePlayerPower(attacker, actualUser, defenderPower, degats, attackerPower)); + messagePowerfulAttack = reaction.emoji.name + Text.commands.fight.endIntroStart + actualUser.username + Text.commands.fight.powerfulAttack.meh[random] + Text.commands.fight.degatsIntro + degats + Text.commands.fight.degatsOutro; + } + } else { + degats = 0; + messagePowerfulAttack = reaction.emoji.name + Text.commands.fight.endIntroStart + actualUser.username + Text.commands.fight.powerfulAttack.ko[random] + Text.commands.fight.degatsIntro + degats + Text.commands.fight.degatsOutro; + } + message.channel.send(messagePowerfulAttack); + return {defenderPower, attackerPower}; } /** @@ -496,12 +493,11 @@ function powerfullAttack(attackPower, player, opponentPlayer, actuelPlayer, defe * @param {*} actuelPlayer */ function lowerSpeed(powerchanger, actuelPlayer) { - if (powerchanger > 1) { - actuelPlayer.speed = Math.round(actuelPlayer.speed * 0.75); - } - else { - actuelPlayer.speed = Math.round(actuelPlayer.speed * 0.9); - } + if (powerchanger > 1) { + actuelPlayer.speed = Math.round(actuelPlayer.speed * 0.75); + } else { + actuelPlayer.speed = Math.round(actuelPlayer.speed * 0.9); + } } /** @@ -518,41 +514,39 @@ function lowerSpeed(powerchanger, actuelPlayer) { * @param {*} message */ function simpleAttack(attackPower, player, opponentPlayer, actuelPlayer, defenderPower, attackerPower, attacker, actualUser, reaction, message) { - let succes = Tools.generateRandomNumber(1, 100); - let powerchanger = 0.1; - if (opponentPlayer.speed > actuelPlayer.speed) { - if (succes <= 60) { // total success - powerchanger = 1; - } - if (succes <= 90 && succes > 60) { // partial success - powerchanger = 0.5; - } + const succes = Tools.generateRandomNumber(1, 100); + let powerchanger = 0.1; + if (opponentPlayer.speed > actuelPlayer.speed) { + if (succes <= 60) { // total success + powerchanger = 1; + } + if (succes <= 90 && succes > 60) { // partial success + powerchanger = 0.5; + } + } else { + if (succes <= 80) { // total success + powerchanger = 1; + } + } + attackPower = actuelPlayer.attack * powerchanger; + let messageAttaqueSimple = ''; + const defensePower = opponentPlayer.defense; + let degats = Math.round(attackPower - Math.round(defensePower)); + const random = Tools.generateRandomNumber(1, 8); + if (degats > 0) { + if (degats >= 100) { + ({defenderPower, attackerPower} = updatePlayerPower(attacker, actualUser, defenderPower, degats, attackerPower)); + messageAttaqueSimple = reaction.emoji.name + Text.commands.fight.endIntroStart + actualUser.username + Text.commands.fight.attackSimple.ok[random] + Text.commands.fight.degatsIntro + degats + Text.commands.fight.degatsOutro; } else { - if (succes <= 80) { // total success - powerchanger = 1; - } - } - attackPower = actuelPlayer.attack * powerchanger; - let messageAttaqueSimple = ""; - let defensePower = opponentPlayer.defense; - let degats = Math.round(attackPower - Math.round(defensePower)); - let random = Tools.generateRandomNumber(1, 8); - if (degats > 0) { - if (degats >= 100) { - ({ defenderPower, attackerPower } = updatePlayerPower(attacker, actualUser, defenderPower, degats, attackerPower)); - messageAttaqueSimple = reaction.emoji.name + Text.commands.fight.endIntroStart + actualUser.username + Text.commands.fight.attackSimple.ok[random] + Text.commands.fight.degatsIntro + degats + Text.commands.fight.degatsOutro; - } - else { - ({ defenderPower, attackerPower } = updatePlayerPower(attacker, actualUser, defenderPower, degats, attackerPower)); - messageAttaqueSimple = reaction.emoji.name + Text.commands.fight.endIntroStart + actualUser.username + Text.commands.fight.attackSimple.meh[random] + Text.commands.fight.degatsIntro + degats + Text.commands.fight.degatsOutro; - } - } - else { - degats = 0; - messageAttaqueSimple = reaction.emoji.name + Text.commands.fight.endIntroStart + actualUser.username + Text.commands.fight.attackSimple.ko[random] + Text.commands.fight.degatsIntro + degats + Text.commands.fight.degatsOutro; - } - message.channel.send(messageAttaqueSimple); - return { defenderPower, attackerPower }; + ({defenderPower, attackerPower} = updatePlayerPower(attacker, actualUser, defenderPower, degats, attackerPower)); + messageAttaqueSimple = reaction.emoji.name + Text.commands.fight.endIntroStart + actualUser.username + Text.commands.fight.attackSimple.meh[random] + Text.commands.fight.degatsIntro + degats + Text.commands.fight.degatsOutro; + } + } else { + degats = 0; + messageAttaqueSimple = reaction.emoji.name + Text.commands.fight.endIntroStart + actualUser.username + Text.commands.fight.attackSimple.ko[random] + Text.commands.fight.degatsIntro + degats + Text.commands.fight.degatsOutro; + } + message.channel.send(messageAttaqueSimple); + return {defenderPower, attackerPower}; } /** @@ -569,38 +563,36 @@ function simpleAttack(attackPower, player, opponentPlayer, actuelPlayer, defende * @param {*} message */ function quickAttack(attackPower, player, opponentPlayer, actuelPlayer, defenderPower, attackerPower, attacker, actualUser, reaction, message) { - let succes = Tools.generateRandomNumber(1, 100); - let powerchanger = 0.1; - if (opponentPlayer.speed > actuelPlayer.speed) { - if (succes <= 30) { // total success - powerchanger = 0.75; - } + const succes = Tools.generateRandomNumber(1, 100); + let powerchanger = 0.1; + if (opponentPlayer.speed > actuelPlayer.speed) { + if (succes <= 30) { // total success + powerchanger = 0.75; + } + } else { + if (succes <= 95) { // total success + powerchanger = 0.75; + } + } + attackPower = actuelPlayer.attack * powerchanger; + let messageAttaqueRapide = ''; + const defensePower = opponentPlayer.defense; + let degats = Math.round(attackPower - Math.round(defensePower * 0.3)); + const random = Tools.generateRandomNumber(1, 8); + if (degats > 0) { + if (degats >= actuelPlayer.attack - defensePower) { + ({defenderPower, attackerPower} = updatePlayerPower(attacker, actualUser, defenderPower, degats, attackerPower)); + messageAttaqueRapide = reaction.emoji.name + Text.commands.fight.endIntroStart + actualUser.username + Text.commands.fight.attackRapide.ok[random] + Text.commands.fight.degatsIntro + degats + Text.commands.fight.degatsOutro; } else { - if (succes <= 95) { // total success - powerchanger = 0.75; - } - } - attackPower = actuelPlayer.attack * powerchanger; - let messageAttaqueRapide = ""; - let defensePower = opponentPlayer.defense; - let degats = Math.round(attackPower - Math.round(defensePower * 0.3)); - let random = Tools.generateRandomNumber(1, 8); - if (degats > 0) { - if (degats >= actuelPlayer.attack - defensePower) { - ({ defenderPower, attackerPower } = updatePlayerPower(attacker, actualUser, defenderPower, degats, attackerPower)); - messageAttaqueRapide = reaction.emoji.name + Text.commands.fight.endIntroStart + actualUser.username + Text.commands.fight.attackRapide.ok[random] + Text.commands.fight.degatsIntro + degats + Text.commands.fight.degatsOutro; - } - else { - ({ defenderPower, attackerPower } = updatePlayerPower(attacker, actualUser, defenderPower, degats, attackerPower)); - messageAttaqueRapide = reaction.emoji.name + Text.commands.fight.endIntroStart + actualUser.username + Text.commands.fight.attackRapide.meh[random] + Text.commands.fight.degatsIntro + degats + Text.commands.fight.degatsOutro; - } - } - else { - degats = 0; - messageAttaqueRapide = reaction.emoji.name + Text.commands.fight.endIntroStart + actualUser.username + Text.commands.fight.attackRapide.ko[random] + Text.commands.fight.degatsIntro + degats + Text.commands.fight.degatsOutro; - } - message.channel.send(messageAttaqueRapide); - return { defenderPower, attackerPower }; + ({defenderPower, attackerPower} = updatePlayerPower(attacker, actualUser, defenderPower, degats, attackerPower)); + messageAttaqueRapide = reaction.emoji.name + Text.commands.fight.endIntroStart + actualUser.username + Text.commands.fight.attackRapide.meh[random] + Text.commands.fight.degatsIntro + degats + Text.commands.fight.degatsOutro; + } + } else { + degats = 0; + messageAttaqueRapide = reaction.emoji.name + Text.commands.fight.endIntroStart + actualUser.username + Text.commands.fight.attackRapide.ko[random] + Text.commands.fight.degatsIntro + degats + Text.commands.fight.degatsOutro; + } + message.channel.send(messageAttaqueRapide); + return {defenderPower, attackerPower}; } /** @@ -612,13 +604,12 @@ function quickAttack(attackPower, player, opponentPlayer, actuelPlayer, defender * @param {*} attackerPower */ function updatePlayerPower(attacker, actualUser, defenderPower, degats, attackerPower) { - if (attacker == actualUser) { - defenderPower = defenderPower - degats; - } - else { - attackerPower = attackerPower - degats; - } - return { defenderPower, attackerPower }; + if (attacker == actualUser) { + defenderPower = defenderPower - degats; + } else { + attackerPower = attackerPower - degats; + } + return {defenderPower, attackerPower}; } /** @@ -627,13 +618,13 @@ function updatePlayerPower(attacker, actualUser, defenderPower, degats, attacker * @param {*} actualUser - The user that is currently playing */ async function displayFightMenu(message, actualUser) { - let lastMessageFromBot = await message.channel.send(Text.commands.fight.menuStart + actualUser + Text.commands.fight.menuEnd); - await lastMessageFromBot.react("⚔"); - await lastMessageFromBot.react("🗡"); - await lastMessageFromBot.react("💣"); - await lastMessageFromBot.react("🛡"); - await lastMessageFromBot.react("🚀"); - return lastMessageFromBot; + const lastMessageFromBot = await message.channel.send(Text.commands.fight.menuStart + actualUser + Text.commands.fight.menuEnd); + await lastMessageFromBot.react('⚔'); + await lastMessageFromBot.react('🗡'); + await lastMessageFromBot.react('💣'); + await lastMessageFromBot.react('🛡'); + await lastMessageFromBot.react('🚀'); + return lastMessageFromBot; } /** @@ -642,7 +633,7 @@ async function displayFightMenu(message, actualUser) { * @param {*} user */ function displayErrorSkillMissing(message, user) { - message.channel.send(Text.commands.fight.errorEmoji + user + Text.commands.fight.notEnoughSkillError1 + DefaultValues.fight.minimalLevel + Text.commands.fight.notEnoughSkillError2); + message.channel.send(Text.commands.fight.errorEmoji + user + Text.commands.fight.notEnoughSkillError1 + DefaultValues.fight.minimalLevel + Text.commands.fight.notEnoughSkillError2); } /** @@ -655,19 +646,18 @@ function displayErrorSkillMissing(message, user) { * @param {*} player - The first player */ function switchActiveUser(actualUser, attacker, defender, actuelPlayer, defenderPlayer, player) { - if (actualUser == attacker) { - actualUser = defender; - actuelPlayer = defenderPlayer; - opponentUser = attacker; - opponentPlayer = player; - } - else { - actualUser = attacker; - actuelPlayer = player; - opponentUser = defender; - opponentPlayer = defenderPlayer; - } - return { actualUser, actuelPlayer, opponentUser, opponentPlayer }; + if (actualUser == attacker) { + actualUser = defender; + actuelPlayer = defenderPlayer; + opponentUser = attacker; + opponentPlayer = player; + } else { + actualUser = attacker; + actuelPlayer = player; + opponentUser = defender; + opponentPlayer = defenderPlayer; + } + return {actualUser, actuelPlayer, opponentUser, opponentPlayer}; } /** @@ -680,14 +670,14 @@ function switchActiveUser(actualUser, attacker, defender, actuelPlayer, defender * @param {*} player - The first player */ function cancelFightLaunch(spamchecker, message, attacker, fightIsOpen, playerManager, player) { - spamchecker++; - message.channel.send(Text.commands.fight.errorEmoji + attacker + Text.commands.fight.alreadyAttackerError); - if (spamchecker > 1) { - message.channel.send(Text.commands.fight.errorEmoji + attacker + Text.commands.fight.spamError); - fightIsOpen = false; - playerManager.setPlayerAsUnOccupied(player); - } - return { spamchecker, fightIsOpen }; + spamchecker++; + message.channel.send(Text.commands.fight.errorEmoji + attacker + Text.commands.fight.alreadyAttackerError); + if (spamchecker > 1) { + message.channel.send(Text.commands.fight.errorEmoji + attacker + Text.commands.fight.spamError); + fightIsOpen = false; + playerManager.setPlayerAsUnOccupied(player); + } + return {spamchecker, fightIsOpen}; } /** @@ -701,16 +691,15 @@ function cancelFightLaunch(spamchecker, message, attacker, fightIsOpen, playerMa * @param {*} spamchecker */ function treatFightCancel(defender, message, fightIsOpen, attacker, playerManager, player, spamchecker) { - if (defender.id === message.author.id) { // le defenseur et l'attaquant sont la même personne - fightIsOpen = cancelFight(message, attacker, fightIsOpen, playerManager, player); - } - else { // le defenseur n'est pas l'attaquant - if (spamchecker < 3) { - spamchecker++; - message.channel.send(Text.commands.fight.errorEmoji + defender + Text.commands.fight.fightNotCanceled); - } - } - return { fightIsOpen, spamchecker }; + if (defender.id === message.author.id) { // le defenseur et l'attaquant sont la même personne + fightIsOpen = cancelFight(message, attacker, fightIsOpen, playerManager, player); + } else { // le defenseur n'est pas l'attaquant + if (spamchecker < 3) { + spamchecker++; + message.channel.send(Text.commands.fight.errorEmoji + defender + Text.commands.fight.fightNotCanceled); + } + } + return {fightIsOpen, spamchecker}; } @@ -723,10 +712,10 @@ function treatFightCancel(defender, message, fightIsOpen, attacker, playerManage * @param {*} player - the attacker */ function cancelFight(message, attacker, fightIsOpen, playerManager, player) { - message.channel.send(Text.commands.fight.validEmoji + attacker + Text.commands.fight.fightCanceled); - fightIsOpen = false; - playerManager.setPlayerAsUnOccupied(player); - return fightIsOpen; + message.channel.send(Text.commands.fight.validEmoji + attacker + Text.commands.fight.fightCanceled); + fightIsOpen = false; + playerManager.setPlayerAsUnOccupied(player); + return fightIsOpen; } @@ -735,7 +724,7 @@ function cancelFight(message, attacker, fightIsOpen, playerManager, player) { * @param {*} reaction - The reaction that has been recieved */ function fightHasToBeCanceled(reaction) { - return reaction.emoji.name == "❌"; + return reaction.emoji.name == '❌'; } /** @@ -745,11 +734,11 @@ function fightHasToBeCanceled(reaction) { */ async function generateIntroMessage(message, attacker, chosenOpponent) { - if (chosenOpponent === undefined) { - return await message.channel.send(Text.commands.fight.startEmoji + attacker.username + Text.commands.fight.startIntro + Text.commands.fight.endIntro); - } else { - return await message.channel.send(Text.commands.fight.startEmoji + attacker.username + Text.commands.fight.startIntro + Text.commands.fight.introAgainstSomeone + "<@" + chosenOpponent.discordId + ">" + Text.commands.fight.endIntro); - } + if (chosenOpponent === undefined) { + return await message.channel.send(Text.commands.fight.startEmoji + attacker.username + Text.commands.fight.startIntro + Text.commands.fight.endIntro); + } else { + return await message.channel.send(Text.commands.fight.startEmoji + attacker.username + Text.commands.fight.startIntro + Text.commands.fight.introAgainstSomeone + '<@' + chosenOpponent.discordId + '>' + Text.commands.fight.endIntro); + } } /** @@ -758,49 +747,49 @@ async function generateIntroMessage(message, attacker, chosenOpponent) { * @param {Number} defenderPower - The power of his opponent */ function nobodyLooses(attackerPower, defenderPower) { - return attackerPower > 0 && defenderPower > 0; + return attackerPower > 0 && defenderPower > 0; } /** * Check if the reaction recieved is valid * @param {*} reaction - The reaction recieved -* @returns {Boolean} - true is the reaction is correct +* @return {Boolean} - true is the reaction is correct */ -const reactionIsCorrect = function (reaction, user) { - let contains = false; - if (reaction.emoji.name == "⚔" && !user.bot) { - contains = true; - } - if (reaction.emoji.name == "❌" && !user.bot) { - contains = true; - } - return contains -} +const reactionIsCorrect = function(reaction, user) { + let contains = false; + if (reaction.emoji.name == '⚔' && !user.bot) { + contains = true; + } + if (reaction.emoji.name == '❌' && !user.bot) { + contains = true; + } + return contains; +}; /** * Check if the reaction recieved is valid * @param {*} reaction - The reaction recieved -* @returns {Boolean} - true is the reaction is correct +* @return {Boolean} - true is the reaction is correct */ -const reactionFightIsCorrect = function (reaction, user) { - let contains = false; - if (reaction.emoji.name == "⚔" && !user.bot) { - contains = true; - } - if (reaction.emoji.name == "🗡" && !user.bot) { - contains = true; - } - if (reaction.emoji.name == "💣" && !user.bot) { - contains = true; - } - if (reaction.emoji.name == "🛡" && !user.bot) { - contains = true; - } - if (reaction.emoji.name == "🚀" && !user.bot) { - contains = true; - } - return contains -} +const reactionFightIsCorrect = function(reaction, user) { + let contains = false; + if (reaction.emoji.name == '⚔' && !user.bot) { + contains = true; + } + if (reaction.emoji.name == '🗡' && !user.bot) { + contains = true; + } + if (reaction.emoji.name == '💣' && !user.bot) { + contains = true; + } + if (reaction.emoji.name == '🛡' && !user.bot) { + contains = true; + } + if (reaction.emoji.name == '🚀' && !user.bot) { + contains = true; + } + return contains; +}; /** * Allow to recover the asked player if needed @@ -811,18 +800,17 @@ const reactionFightIsCorrect = function (reaction, user) { */ async function getAskedPlayer(playerId, player, playerManager, message, args) { - if (isNaN(args[1])) { - try { - playerId = message.mentions.users.last().id; - } catch (err) { // the input is not a mention or a user rank - playerId = "0" - } - } else { - playerId = await playerManager.getIdByRank(args[1]); - - } - player = await playerManager.getPlayerById(playerId, message); - return player; + if (isNaN(args[1])) { + try { + playerId = message.mentions.users.last().id; + } catch (err) { // the input is not a mention or a user rank + playerId = '0'; + } + } else { + playerId = await playerManager.getIdByRank(args[1]); + } + player = await playerManager.getPlayerById(playerId, message); + return player; } /** @@ -830,7 +818,7 @@ async function getAskedPlayer(playerId, player, playerManager, message, args) { * @param {*} player - The player that has been asked for */ function askedPlayerIsInvalid(player) { - return player.getEffect() == ":baby:"; + return player.getEffect() == ':baby:'; } /** @@ -838,7 +826,7 @@ function askedPlayerIsInvalid(player) { * @param {*} args - The args given by the user that made the command */ function askForAnotherPlayer(args) { - return args[1] != undefined; + return args[1] != undefined; } module.exports.FightCommand = fightCommand; diff --git a/src/commands_old/Sell.js b/src/commands_old/Sell.js index c0287b604..a0d7daa65 100644 --- a/src/commands_old/Sell.js +++ b/src/commands_old/Sell.js @@ -1,4 +1,4 @@ -const ItemManager = require("../core/ItemManager"); +const ItemManager = require('../core/ItemManager'); const PlayerManager = require('../core/PlayerManager'); const ObjectManager = require('../core/ObjectManager'); const InventoryManager = require('../core/InventoryManager'); @@ -12,34 +12,34 @@ let Text; * Allow to sell the item that is stored in the backup position of the inventory of the player * @param message - The message that caused the function to be called. Used to retrieve the author of the message. */ -const sellCommand = async function (message, args, client, talkedRecently) { - Text = await Tools.chargeText(message); - if (talkedRecently.has(message.author.id)) { - message.channel.send(Text.commands.sell.cancelStart + message.author + Text.commands.shop.tooMuchShop); +const sellCommand = async function(message, args, client, talkedRecently) { + Text = await Tools.chargeText(message); + if (talkedRecently.has(message.author.id)) { + message.channel.send(Text.commands.sell.cancelStart + message.author + Text.commands.shop.tooMuchShop); + } else { + talkedRecently.add(message.author.id); + const playerManager = new PlayerManager(); + const player = await playerManager.getCurrentPlayer(message); + const inventoryManager = new InventoryManager(); + const inventory = await inventoryManager.getCurrentInventory(message); + const objectManager = new ObjectManager(); + const object = objectManager.getObjectById(inventory.getBackupItemId()); + if (object.id == DefaultValues.inventory.object) { + const messageSell = generateErrorSellMessage(message); + message.channel.send(messageSell); + talkedRecently.delete(message.author.id); } else { - talkedRecently.add(message.author.id); - let playerManager = new PlayerManager(); - let player = await playerManager.getCurrentPlayer(message); - let inventoryManager = new InventoryManager(); - let inventory = await inventoryManager.getCurrentInventory(message); - let objectManager = new ObjectManager(); - let object = objectManager.getObjectById(inventory.getBackupItemId()); - if (object.id == DefaultValues.inventory.object) { - let messageSell = generateErrorSellMessage(message); - message.channel.send(messageSell); - talkedRecently.delete(message.author.id); - } else { - generateConfirmation(message, object, player, inventory, inventoryManager, playerManager, talkedRecently) - } + generateConfirmation(message, object, player, inventory, inventoryManager, playerManager, talkedRecently); } -} + } +}; /** * Returns a string containing the error sell message. - * @returns {String} - A string containing the error sell message. + * @return {String} - A string containing the error sell message. * @param message - The message that caused the function to be called. Used to retrieve the author of the message. */ -const generateErrorSellMessage = function (message) { - return Text.commands.sell.noDebut + message.author.username + Text.commands.sell.noFin; +const generateErrorSellMessage = function(message) { + return Text.commands.sell.noDebut + message.author.username + Text.commands.sell.noFin; }; /** @@ -52,40 +52,39 @@ const generateErrorSellMessage = function (message) { * @param {*} playerManager - The manager of the player */ async function generateConfirmation(message, object, player, inventory, inventoryManager, playerManager, talkedRecently) { - let confirmMessage = await generateConfirmMessage(message, object); - let confirmIsOpen = true; + const confirmMessage = await generateConfirmMessage(message, object); + let confirmIsOpen = true; - let msg = await displayConfirmMessage(message, confirmMessage); - let language = await Tools.detectLanguage(message); - const filter = (reaction, user) => { - return (reactionIsCorrect(reaction) && user.id === message.author.id); - }; - const collector = msg.createReactionCollector(filter, { - time: 120000 - }); - //execute this if a user answer to the event - collector.on('collect', (reaction) => { - if (confirmIsOpen) { - talkedRecently.delete(message.author.id); - if (reaction.emoji.name == "✅") { - playerManager.sellItem(player, object, false, message, language); - inventory.setBackupItemId(DefaultValues.inventory.object); - inventoryManager.updateInventory(inventory); - playerManager.updatePlayer(player); - } else { - message.channel.send(Text.commands.sell.cancelStart + message.author + Text.commands.sell.cancelEnd); - } - confirmIsOpen = false; - - } - }); - //end of the time the user have to answer to the event - collector.on('end', () => { - if (confirmIsOpen) { - talkedRecently.delete(message.author.id); - message.channel.send(Text.commands.sell.cancelStart + message.author + Text.commands.sell.cancelEnd); - } - }); + const msg = await displayConfirmMessage(message, confirmMessage); + const language = await Tools.detectLanguage(message); + const filter = (reaction, user) => { + return (reactionIsCorrect(reaction) && user.id === message.author.id); + }; + const collector = msg.createReactionCollector(filter, { + time: 120000, + }); + // execute this if a user answer to the event + collector.on('collect', (reaction) => { + if (confirmIsOpen) { + talkedRecently.delete(message.author.id); + if (reaction.emoji.name == '✅') { + playerManager.sellItem(player, object, false, message, language); + inventory.setBackupItemId(DefaultValues.inventory.object); + inventoryManager.updateInventory(inventory); + playerManager.updatePlayer(player); + } else { + message.channel.send(Text.commands.sell.cancelStart + message.author + Text.commands.sell.cancelEnd); + } + confirmIsOpen = false; + } + }); + // end of the time the user have to answer to the event + collector.on('end', () => { + if (confirmIsOpen) { + talkedRecently.delete(message.author.id); + message.channel.send(Text.commands.sell.cancelStart + message.author + Text.commands.sell.cancelEnd); + } + }); } @@ -94,39 +93,39 @@ async function generateConfirmation(message, object, player, inventory, inventor * @param message - The message that caused the function to be called. Used to retrieve the author of the message. * @param {*} confirmMessage - The string of the confirmation message */ -const displayConfirmMessage = function (message, confirmMessage) { - return message.channel.send(confirmMessage).then(msg => { - let valid = "✅" - msg.react(valid); - let notValid = "❌" - msg.react(notValid); - return msg; - }) +const displayConfirmMessage = function(message, confirmMessage) { + return message.channel.send(confirmMessage).then((msg) => { + const valid = '✅'; + msg.react(valid); + const notValid = '❌'; + msg.react(notValid); + return msg; + }); }; /** * Check if the reaction recieved is valid * @param {*} reaction - The reaction recieved -* @returns {Boolean} - true is the reaction is correct +* @return {Boolean} - true is the reaction is correct */ -const reactionIsCorrect = function (reaction) { - let contains = false; - if (reaction.emoji.name == "✅" || reaction.emoji.name == "❌") { - contains = true; - } - return contains -} +const reactionIsCorrect = function(reaction) { + let contains = false; + if (reaction.emoji.name == '✅' || reaction.emoji.name == '❌') { + contains = true; + } + return contains; +}; /** * Returns a string containing the error sell message. - * @returns {String} - A string containing the error sell message. + * @return {String} - A string containing the error sell message. * @param message - The message that caused the function to be called. Used to retrieve the author of the message. */ -const generateConfirmMessage = async function (message, object) { - let value = object.getValue(); - let language = await Tools.detectLanguage(message); - return Text.commands.sell.confirmDebut + message.author.username + Text.commands.sell.confirmIntro + new ItemManager().getItemSimpleName(object, language) + Text.commands.sell.confirmMiddle + value + Text.commands.sell.confirmEnd; +const generateConfirmMessage = async function(message, object) { + const value = object.getValue(); + const language = await Tools.detectLanguage(message); + return Text.commands.sell.confirmDebut + message.author.username + Text.commands.sell.confirmIntro + new ItemManager().getItemSimpleName(object, language) + Text.commands.sell.confirmMiddle + value + Text.commands.sell.confirmEnd; }; module.exports.SellCommand = sellCommand; diff --git a/src/commands_old/Shop.js b/src/commands_old/Shop.js index 7640b1fae..19bfef57b 100644 --- a/src/commands_old/Shop.js +++ b/src/commands_old/Shop.js @@ -4,180 +4,181 @@ const DefaultValues = require('data/text/DefaultValues'); const PotionManager = require('../core/PotionManager'); const GuildManager = require('../core/GuildManager'); const InventoryManager = require('../core/InventoryManager'); -const Discord = require('discord.js') +const Discord = require('discord.js'); let Text; let language; -let guildManager = new GuildManager(); +const guildManager = new GuildManager(); /** * Give a random thing to a player in exchange for 100 coins * @param message - The message that caused the function to be called. Used to retrieve the author of the message. */ -const ShopCommand = async function (message, args, client, talkedRecently) { - Text = await Tools.chargeText(message); - language = await Tools.detectLanguage(message); - if (talkedRecently.has(message.author.id)) { - displaySpamErrorMessage(message); - } else { - let playerManager = new PlayerManager(); - let player = await playerManager.getCurrentPlayer(message); - if (playerManager.checkState(player, message, ":dizzy_face::zany_face::sick::sleeping::head_bandage::cold_face::confounded::clock2::smiley:", language)) { - if (player.money < 0) { - let ShopMessage = Text.commands.shop.errorEmoji + message.author.username + Text.commands.shop.noMoney; - return message.channel.send(ShopMessage); +const ShopCommand = async function(message, args, client, talkedRecently) { + Text = await Tools.chargeText(message); + language = await Tools.detectLanguage(message); + if (talkedRecently.has(message.author.id)) { + displaySpamErrorMessage(message); + } else { + const playerManager = new PlayerManager(); + let player = await playerManager.getCurrentPlayer(message); + if (playerManager.checkState(player, message, ':dizzy_face::zany_face::sick::sleeping::head_bandage::cold_face::confounded::clock2::smiley:', language)) { + if (player.money < 0) { + const ShopMessage = Text.commands.shop.errorEmoji + message.author.username + Text.commands.shop.noMoney; + return message.channel.send(ShopMessage); + } + talkedRecently.add(message.author.id); + const potionManager = new PotionManager(); + const dailyPotion = generateDailyPotion(); + const ShopMessage = generateShopMessage(dailyPotion, potionManager, language); + message.channel.send(ShopMessage).then(async (msg) => { + await addShopReactions(dailyPotion, msg); + + let shopmenu = false; + + const filter = (reaction, user) => { + return (choiceReactionIsCorrect(reaction, dailyPotion, shopmenu) && user.id === message.author.id); + }; + const collector = msg.createReactionCollector(filter, { + time: 120000, + }); + // execute this if a user answer to the event + collector.on('collect', async (reaction) => { + shopmenu = true; + let choice = 0; + let messageChoice = Text.commands.shop.emojiIntro + message.author + Text.commands.shop.confirmIntro; + const potionPrice = dailyPotion.getValue() + parseInt(DefaultValues.shop.addedValue); + ({choice, messageChoice} = saveChoice(reaction, choice, messageChoice, potionManager, dailyPotion, potionPrice)); + const messageconfirm = await displayConfirmMessage(message, messageChoice); + let confirmIsOpen = true; + + const filterConfirm = (reaction, user) => { + return (confirmReactionIsCorrect(reaction) && user.id === message.author.id); + }; + + const collectorConfirm = messageconfirm.createReactionCollector(filterConfirm, { + time: 120000, + }); + // execute this if a user answer to the event + collectorConfirm.on('collect', async (reaction) => { + if (!confirmIsOpen) // if the menu is closed : do nothing + { + return; } - talkedRecently.add(message.author.id); - let potionManager = new PotionManager(); - let dailyPotion = generateDailyPotion(); - let ShopMessage = generateShopMessage(dailyPotion, potionManager, language); - message.channel.send(ShopMessage).then(async msg => { - await addShopReactions(dailyPotion, msg); - - let shopmenu = false; - - const filter = (reaction, user) => { - return (choiceReactionIsCorrect(reaction, dailyPotion, shopmenu) && user.id === message.author.id); - }; - const collector = msg.createReactionCollector(filter, { - time: 120000 - }); - //execute this if a user answer to the event - collector.on('collect', async (reaction) => { - shopmenu = true; - let choice = 0; - let messageChoice = Text.commands.shop.emojiIntro + message.author + Text.commands.shop.confirmIntro; - let potionPrice = dailyPotion.getValue() + parseInt(DefaultValues.shop.addedValue); - ({ choice, messageChoice } = saveChoice(reaction, choice, messageChoice, potionManager, dailyPotion, potionPrice)); - let messageconfirm = await displayConfirmMessage(message, messageChoice); - let confirmIsOpen = true; - - const filterConfirm = (reaction, user) => { - return (confirmReactionIsCorrect(reaction) && user.id === message.author.id); - }; - - const collectorConfirm = messageconfirm.createReactionCollector(filterConfirm, { - time: 120000 - }); - //execute this if a user answer to the event - collectorConfirm.on('collect', async (reaction) => { - if (!confirmIsOpen) // if the menu is closed : do nothing - return; - confirmIsOpen = false; - talkedRecently.delete(message.author.id); - if (reaction.emoji.name == "✅") { - switch (choice) { - case "dailyPotion": - if (player.money >= potionPrice) { - await sellDailyPotion(player, dailyPotion, potionPrice, playerManager); - } else { - return notEnoughMoney(message); - } - break; - case "randomItem": - if (player.money >= DefaultValues.shop.priceItem) { - player = await sellRandomItem(player, playerManager, message); - } else { - return notEnoughMoney(message); - } - break; - case "alterationHeal": - if (player.getEffect() !== ':smiley:') { - if (player.money >= DefaultValues.shop.priceStatus) { - removeAlteration(player, message, playerManager); - } else { - return notEnoughMoney(message); - } - } else { - return message.channel.send(Text.commands.shop.cancelStart + message.author + Text.commands.shop.noAlteration); - } - break; - case "completeHeal": - if (player.money >= DefaultValues.shop.priceHeal) { - sellCompleteHeal(player, playerManager); - } else { - return notEnoughMoney(message); - } - break; - case "badge": - if (player.money >= DefaultValues.shop.priceBadge) { - sellBadge(message, client, player, playerManager); - } else { - return notEnoughMoney(message); - } - break; - case "guildXp": - if (player.money >= DefaultValues.shop.priceGuildXp) { - let guild = await guildManager.getCurrentGuild(message); - if (guild === null) { - message.channel.send(generateNotInAGuildException(message.author)); - return; - } - let experience = Tools.generateRandomNumber(50, 450); - guild.addExperience(experience, message, language); - guildManager.updateGuild(guild); - player.money -= DefaultValues.shop.priceGuildXp; - playerManager.updatePlayer(player); - } else { - return notEnoughMoney(message); - } - break; - - default: - break; - } - message.channel.send(Text.commands.shop.confirmStart + message.author + Text.commands.shop.confirmEnd); - } else { - cancelTheSell(talkedRecently, message); - } - }); - //end of the time the user have to answer to the event - collectorConfirm.on('end', () => { - if (confirmIsOpen) { - cancelTheSell(talkedRecently, message); - } - }); - }); - - //end of the time the user have to answer to the event - collector.on('end', () => { - if (!shopmenu) { - talkedRecently.delete(message.author.id); + confirmIsOpen = false; + talkedRecently.delete(message.author.id); + if (reaction.emoji.name == '✅') { + switch (choice) { + case 'dailyPotion': + if (player.money >= potionPrice) { + await sellDailyPotion(player, dailyPotion, potionPrice, playerManager); + } else { + return notEnoughMoney(message); + } + break; + case 'randomItem': + if (player.money >= DefaultValues.shop.priceItem) { + player = await sellRandomItem(player, playerManager, message); + } else { + return notEnoughMoney(message); + } + break; + case 'alterationHeal': + if (player.getEffect() !== ':smiley:') { + if (player.money >= DefaultValues.shop.priceStatus) { + removeAlteration(player, message, playerManager); + } else { + return notEnoughMoney(message); } - }); - }); - } + } else { + return message.channel.send(Text.commands.shop.cancelStart + message.author + Text.commands.shop.noAlteration); + } + break; + case 'completeHeal': + if (player.money >= DefaultValues.shop.priceHeal) { + sellCompleteHeal(player, playerManager); + } else { + return notEnoughMoney(message); + } + break; + case 'badge': + if (player.money >= DefaultValues.shop.priceBadge) { + sellBadge(message, client, player, playerManager); + } else { + return notEnoughMoney(message); + } + break; + case 'guildXp': + if (player.money >= DefaultValues.shop.priceGuildXp) { + const guild = await guildManager.getCurrentGuild(message); + if (guild === null) { + message.channel.send(generateNotInAGuildException(message.author)); + return; + } + const experience = Tools.generateRandomNumber(50, 450); + guild.addExperience(experience, message, language); + guildManager.updateGuild(guild); + player.money -= DefaultValues.shop.priceGuildXp; + playerManager.updatePlayer(player); + } else { + return notEnoughMoney(message); + } + break; + + default: + break; + } + message.channel.send(Text.commands.shop.confirmStart + message.author + Text.commands.shop.confirmEnd); + } else { + cancelTheSell(talkedRecently, message); + } + }); + // end of the time the user have to answer to the event + collectorConfirm.on('end', () => { + if (confirmIsOpen) { + cancelTheSell(talkedRecently, message); + } + }); + }); + + // end of the time the user have to answer to the event + collector.on('end', () => { + if (!shopmenu) { + talkedRecently.delete(message.author.id); + } + }); + }); } -} + } +}; /** * send a confirmation and display reactions * @param message - The message that caused the function to be called. Used to retrieve the author of the message. * @param {*} confirmMessage - The string of the confirmation message */ -const displayConfirmMessage = function (message, confirmMessage) { - return message.channel.send(new Discord.RichEmbed().setDescription(confirmMessage)).then(async msg => { - let valid = "✅" - await msg.react(valid); - let notValid = "❌" - msg.react(notValid); - return msg; - }) +const displayConfirmMessage = function(message, confirmMessage) { + return message.channel.send(new Discord.RichEmbed().setDescription(confirmMessage)).then(async (msg) => { + const valid = '✅'; + await msg.react(valid); + const notValid = '❌'; + msg.react(notValid); + return msg; + }); }; /** - * @returns {String} - A RichEmbed message wich display the NoUserException + * @return {String} - A RichEmbed message wich display the NoUserException * @param {*} user - the user that the error refeirs to */ -const generateNotInAGuildException = function (user) { - let embed = generateDefaultEmbed(); - embed.setTitle(Text.commands.guildAdd.error); - embed.setColor(DefaultValues.guild.errorColor); - embed.setDescription(user.toString() + Text.commands.guildAdd.notInAGuildError); - return embed; -} - +const generateNotInAGuildException = function(user) { + const embed = generateDefaultEmbed(); + embed.setTitle(Text.commands.guildAdd.error); + embed.setColor(DefaultValues.guild.errorColor); + embed.setDescription(user.toString() + Text.commands.guildAdd.notInAGuildError); + return embed; +}; /** @@ -185,43 +186,43 @@ const generateNotInAGuildException = function (user) { * @param {*} reaction - The reaction recieved * @param {Boolean} shopmenu - An option has not already been selected * @param {*} dailyPotion - the potion of the day - * @returns {Boolean} - true is the reaction is correct + * @return {Boolean} - true is the reaction is correct */ -const choiceReactionIsCorrect = function (reaction, dailyPotion, shopmenu) { - let contains = false; - if (!shopmenu && (reaction.emoji.name == dailyPotion.getEmoji().split(':')[1] || reaction.emoji.name == dailyPotion.getEmoji() || reaction.emoji.name == Text.commands.shop.emojis.randomItem || reaction.emoji.name == Text.commands.shop.emojis.alterationHeal || reaction.emoji.name == Text.commands.shop.emojis.completeHeal || reaction.emoji.name == Text.commands.shop.emojis.guildXp || reaction.emoji.name == Text.commands.shop.emojis.badge)) { - contains = true; - } - return contains -} +const choiceReactionIsCorrect = function(reaction, dailyPotion, shopmenu) { + let contains = false; + if (!shopmenu && (reaction.emoji.name == dailyPotion.getEmoji().split(':')[1] || reaction.emoji.name == dailyPotion.getEmoji() || reaction.emoji.name == Text.commands.shop.emojis.randomItem || reaction.emoji.name == Text.commands.shop.emojis.alterationHeal || reaction.emoji.name == Text.commands.shop.emojis.completeHeal || reaction.emoji.name == Text.commands.shop.emojis.guildXp || reaction.emoji.name == Text.commands.shop.emojis.badge)) { + contains = true; + } + return contains; +}; /** * Check if the reaction recieved is valid * @param {*} reaction - The reaction recieved - * @returns {Boolean} - true is the reaction is correct + * @return {Boolean} - true is the reaction is correct */ -const confirmReactionIsCorrect = function (reaction) { - let contains = false; - if (reaction.emoji.name == "✅" || reaction.emoji.name == "❌") { - contains = true; - } - return contains -} +const confirmReactionIsCorrect = function(reaction) { + let contains = false; + if (reaction.emoji.name == '✅' || reaction.emoji.name == '❌') { + contains = true; + } + return contains; +}; /** * Generate a random potion depending on the date - * @returns {potion} - a random potion + * @return {potion} - a random potion */ -const generateDailyPotion = function () { - let potionManager = new PotionManager(); - let dailyPotionSeed = Math.round(Date.now() / (1000 * 60 * 60 * 24)); - let dailyPotion = potionManager.getPotionById(dailyPotionSeed % (DefaultValues.raritiesGenerator.numberOfPotion - 1) + 1); - while (dailyPotion.rarity == 8 || dailyPotion.natureEffect == 0) { - dailyPotionSeed = Math.round(dailyPotionSeed / 7); - dailyPotion = potionManager.getPotionById(1 + (dailyPotionSeed % (DefaultValues.raritiesGenerator.numberOfPotion - 1))); - } - return dailyPotion; -} +const generateDailyPotion = function() { + const potionManager = new PotionManager(); + let dailyPotionSeed = Math.round(Date.now() / (1000 * 60 * 60 * 24)); + let dailyPotion = potionManager.getPotionById(dailyPotionSeed % (DefaultValues.raritiesGenerator.numberOfPotion - 1) + 1); + while (dailyPotion.rarity == 8 || dailyPotion.natureEffect == 0) { + dailyPotionSeed = Math.round(dailyPotionSeed / 7); + dailyPotion = potionManager.getPotionById(1 + (dailyPotionSeed % (DefaultValues.raritiesGenerator.numberOfPotion - 1))); + } + return dailyPotion; +}; /** * Cancel the sell and free the user @@ -229,8 +230,8 @@ const generateDailyPotion = function () { * @param {*} message */ function cancelTheSell(talkedRecently, message) { - talkedRecently.delete(message.author.id); - message.channel.send(Text.commands.shop.cancelStart + message.author + Text.commands.shop.cancelEnd); + talkedRecently.delete(message.author.id); + message.channel.send(Text.commands.shop.cancelStart + message.author + Text.commands.shop.cancelEnd); } /** @@ -241,10 +242,10 @@ function cancelTheSell(talkedRecently, message) { * @param {*} playerManager */ function sellBadge(message, client, player, playerManager) { - message.author.send(Text.commands.shop.badgeWarning); - client.users.get('375334479306293260').send(Text.commands.shop.dmIntro + message.author + Text.commands.shop.dm + message.author.id); - player.money -= DefaultValues.shop.priceBadge; - playerManager.updatePlayer(player); + message.author.send(Text.commands.shop.badgeWarning); + client.users.get('375334479306293260').send(Text.commands.shop.dmIntro + message.author + Text.commands.shop.dm + message.author.id); + player.money -= DefaultValues.shop.priceBadge; + playerManager.updatePlayer(player); } /** @@ -253,9 +254,9 @@ function sellBadge(message, client, player, playerManager) { * @param {*} playerManager */ function sellCompleteHeal(player, playerManager) { - player.money -= DefaultValues.shop.priceHeal; - player.restoreHealthCompletely(); - playerManager.updatePlayer(player); + player.money -= DefaultValues.shop.priceHeal; + player.restoreHealthCompletely(); + playerManager.updatePlayer(player); } /** @@ -265,10 +266,10 @@ function sellCompleteHeal(player, playerManager) { * @param {*} message */ async function sellRandomItem(player, playerManager, message) { - player = await playerManager.giveRandomItem(message, player, true); - player.money -= DefaultValues.shop.priceItem; - playerManager.updatePlayer(player); - return player; + player = await playerManager.giveRandomItem(message, player, true); + player.money -= DefaultValues.shop.priceItem; + playerManager.updatePlayer(player); + return player; } /** @@ -281,33 +282,33 @@ async function sellRandomItem(player, playerManager, message) { * @param {*} potionPrice */ function saveChoice(reaction, choice, messageChoice, potionManager, dailyPotion, potionPrice) { - switch (reaction.emoji.name) { - case Text.commands.shop.emojis.randomItem: - choice = "randomItem"; - messageChoice = addChoiceToMessageChoice(messageChoice, choice); - break; - case Text.commands.shop.emojis.alterationHeal: - choice = "alterationHeal"; - messageChoice = addChoiceToMessageChoice(messageChoice, choice); - break; - case Text.commands.shop.emojis.completeHeal: - choice = "completeHeal"; - messageChoice = addChoiceToMessageChoice(messageChoice, choice); - break; - case Text.commands.shop.emojis.badge: - choice = "badge"; - messageChoice = addChoiceToMessageChoice(messageChoice, choice); - break; - case Text.commands.shop.emojis.guildXp: - choice = "guildXp"; - messageChoice = addChoiceToMessageChoice(messageChoice, choice); - break; - default: - choice = "dailyPotion"; - messageChoice += potionManager.displayPotion(dailyPotion, language) + Text.commands.shop.priceTagStart + potionPrice + Text.commands.shop.priceTagEnd + Text.commands.shop.infos.dailyPotion; - break; - } - return { choice, messageChoice }; + switch (reaction.emoji.name) { + case Text.commands.shop.emojis.randomItem: + choice = 'randomItem'; + messageChoice = addChoiceToMessageChoice(messageChoice, choice); + break; + case Text.commands.shop.emojis.alterationHeal: + choice = 'alterationHeal'; + messageChoice = addChoiceToMessageChoice(messageChoice, choice); + break; + case Text.commands.shop.emojis.completeHeal: + choice = 'completeHeal'; + messageChoice = addChoiceToMessageChoice(messageChoice, choice); + break; + case Text.commands.shop.emojis.badge: + choice = 'badge'; + messageChoice = addChoiceToMessageChoice(messageChoice, choice); + break; + case Text.commands.shop.emojis.guildXp: + choice = 'guildXp'; + messageChoice = addChoiceToMessageChoice(messageChoice, choice); + break; + default: + choice = 'dailyPotion'; + messageChoice += potionManager.displayPotion(dailyPotion, language) + Text.commands.shop.priceTagStart + potionPrice + Text.commands.shop.priceTagEnd + Text.commands.shop.infos.dailyPotion; + break; + } + return {choice, messageChoice}; } /** @@ -317,10 +318,10 @@ function saveChoice(reaction, choice, messageChoice, potionManager, dailyPotion, * @param {*} playerManager */ function removeAlteration(player, message, playerManager) { - player.updateLastReport(message.createdTimestamp, 0, ":smiley:"); - player.money -= DefaultValues.shop.priceStatus; - player.effect = ":smiley:"; - playerManager.updatePlayer(player); + player.updateLastReport(message.createdTimestamp, 0, ':smiley:'); + player.money -= DefaultValues.shop.priceStatus; + player.effect = ':smiley:'; + playerManager.updatePlayer(player); } /** @@ -329,8 +330,8 @@ function removeAlteration(player, message, playerManager) { * @param {*} choice - The choice made */ function addChoiceToMessageChoice(messageChoice, choice) { - messageChoice += Text.commands.shop.choices[choice] + Text.commands.shop.infos[choice]; - return messageChoice; + messageChoice += Text.commands.shop.choices[choice] + Text.commands.shop.infos[choice]; + return messageChoice; } /** @@ -338,11 +339,11 @@ function addChoiceToMessageChoice(messageChoice, choice) { * @param {*} message - The message that triggered the command */ function displaySpamErrorMessage(message) { - let embed = generateDefaultEmbed(); - embed.setTitle(Text.commands.guildAdd.error); - embed.setColor(DefaultValues.guild.errorColor); - embed.setDescription(message.author.toString() + Text.commands.shop.tooMuchShop); - return message.channel.send(embed); + const embed = generateDefaultEmbed(); + embed.setTitle(Text.commands.guildAdd.error); + embed.setColor(DefaultValues.guild.errorColor); + embed.setDescription(message.author.toString() + Text.commands.shop.tooMuchShop); + return message.channel.send(embed); } /** @@ -353,12 +354,12 @@ function displaySpamErrorMessage(message) { * @param {*} playerManager - The player Manager */ async function sellDailyPotion(player, dailyPotion, potionPrice, playerManager) { - let inventoryManager = new InventoryManager(); - let inventory = await inventoryManager.getInventoryById(player.id); - inventory["potionId"] = dailyPotion.id; - inventoryManager.updateInventory(inventory); - player.money -= potionPrice; - playerManager.updatePlayer(player); + const inventoryManager = new InventoryManager(); + const inventory = await inventoryManager.getInventoryById(player.id); + inventory['potionId'] = dailyPotion.id; + inventoryManager.updateInventory(inventory); + player.money -= potionPrice; + playerManager.updatePlayer(player); } /** @@ -366,11 +367,11 @@ async function sellDailyPotion(player, dailyPotion, potionPrice, playerManager) * @param {*} message - The message that launched the command */ function notEnoughMoney(message) { - let embed = generateDefaultEmbed(); - embed.setTitle(Text.commands.guildAdd.error); - embed.setColor(DefaultValues.guild.errorColor); - embed.setDescription(message.author.toString() + Text.commands.shop.notEnoughEnd); - return message.channel.send(embed); + const embed = generateDefaultEmbed(); + embed.setTitle(Text.commands.guildAdd.error); + embed.setColor(DefaultValues.guild.errorColor); + embed.setDescription(message.author.toString() + Text.commands.shop.notEnoughEnd); + return message.channel.send(embed); } @@ -380,16 +381,16 @@ function notEnoughMoney(message) { * @param {*} msg - The message that contain the shop message */ async function addShopReactions(dailyPotion, msg) { - try { - await msg.react(dailyPotion.getEmoji(dailyPotion)); - } catch (err) { - let emojiId = dailyPotion.getEmoji(dailyPotion).split(':')[2]; - emojiId = emojiId.substring(0, emojiId.length - 1); - await msg.react(emojiId); - } - for (reac in Text.commands.shop.emojis) { - await msg.react(Text.commands.shop.emojis[reac]); - } + try { + await msg.react(dailyPotion.getEmoji(dailyPotion)); + } catch (err) { + let emojiId = dailyPotion.getEmoji(dailyPotion).split(':')[2]; + emojiId = emojiId.substring(0, emojiId.length - 1); + await msg.react(emojiId); + } + for (reac in Text.commands.shop.emojis) { + await msg.react(Text.commands.shop.emojis[reac]); + } } /** @@ -398,37 +399,37 @@ async function addShopReactions(dailyPotion, msg) { * @param {*} potionManager - The potion manager */ function generateShopMessage(dailyPotion, potionManager, language) { - let potionPrice = dailyPotion.getValue() + parseInt(DefaultValues.shop.addedValue); + const potionPrice = dailyPotion.getValue() + parseInt(DefaultValues.shop.addedValue); - const embed = new Discord.RichEmbed(); - embed.setColor(DefaultValues.embed.color); - embed.setTitle(Text.commands.shop.intro); - embed.setDescription(Text.commands.shop.dailySell + displayPotion(dailyPotion, language) + Text.commands.shop.priceTagStart + potionPrice + Text.commands.shop.priceTagEnd + - Text.commands.shop.outro) + const embed = new Discord.RichEmbed(); + embed.setColor(DefaultValues.embed.color); + embed.setTitle(Text.commands.shop.intro); + embed.setDescription(Text.commands.shop.dailySell + displayPotion(dailyPotion, language) + Text.commands.shop.priceTagStart + potionPrice + Text.commands.shop.priceTagEnd + + Text.commands.shop.outro); - return embed; + return embed; } /** * Return string containing a description of an potion * @param potion - The potion that has to be displayed * @param language - The language the object has to be displayed in - * @returns {String} - The description of the potion + * @return {String} - The description of the potion */ function displayPotion(potion, language) { - ItemNames = require('../utils/items/' + language); - let stringResult = ItemNames.potion[potion.id] + Text.potionManager.separator + Text.rarities[potion.rarity] + "\n" + Text.nature.introShop[potion.natureEffect]; - if (potion.natureEffect != 0) { // affichage de la puissance de l'effet si il existe - stringResult += potion.power + Text.nature.outroPotion[potion.natureEffect]; - } - return stringResult; + ItemNames = require('../utils/items/' + language); + let stringResult = ItemNames.potion[potion.id] + Text.potionManager.separator + Text.rarities[potion.rarity] + '\n' + Text.nature.introShop[potion.natureEffect]; + if (potion.natureEffect != 0) { // affichage de la puissance de l'effet si il existe + stringResult += potion.power + Text.nature.outroPotion[potion.natureEffect]; + } + return stringResult; } /** * The default embed style for the bot */ -const generateDefaultEmbed = function () { - return new Discord.RichEmbed().setColor(DefaultValues.embed.color); -} +const generateDefaultEmbed = function() { + return new Discord.RichEmbed().setColor(DefaultValues.embed.color); +}; module.exports.ShopCommand = ShopCommand; diff --git a/src/commands_old/Top.js b/src/commands_old/Top.js index 9f8614c94..af515b94a 100644 --- a/src/commands_old/Top.js +++ b/src/commands_old/Top.js @@ -1,5 +1,5 @@ -//Discord API -const Discord = require("discord.js"); +// Discord API +const Discord = require('discord.js'); const DefaultValues = require('data/text/DefaultValues'); const PlayerManager = require('../core/PlayerManager'); const Tools = require('../utils/Tools'); @@ -14,30 +14,30 @@ let language; * @param message - The message that caused the function to be called. Used to retrieve the author of the message. * @param args - arguments typed by the user in addition to the command */ -const topCommand = async function (message, args, client) { - Text = await Tools.chargeText(message); - language = await Tools.detectLanguage(message); - let playerManager = new PlayerManager(); +const topCommand = async function(message, args, client) { + Text = await Tools.chargeText(message); + language = await Tools.detectLanguage(message); + const playerManager = new PlayerManager(); - let actualPlayer = await playerManager.getCurrentPlayer(message); - totalJoueur = await playerManager.getNumberOfPlayers(); - let pageMax = Math.ceil(totalJoueur / DefaultValues.top.playersByPage); - let page = getRequiredPageNumber(args); - let erreur = testAbsurdsPages(message, page, pageMax); - if (erreur == 0) { - let bornesup = page * DefaultValues.top.playersByPage - let borneinf = bornesup - (DefaultValues.top.playersByPage - 1); - let data = await playerManager.getTopData(borneinf, bornesup) - let messageTop = generateTopMessage(message, borneinf, bornesup, pageMax, page, actualPlayer, totalJoueur, data, client); - message.channel.send(messageTop); - } -} + const actualPlayer = await playerManager.getCurrentPlayer(message); + totalJoueur = await playerManager.getNumberOfPlayers(); + const pageMax = Math.ceil(totalJoueur / DefaultValues.top.playersByPage); + const page = getRequiredPageNumber(args); + const erreur = testAbsurdsPages(message, page, pageMax); + if (erreur == 0) { + const bornesup = page * DefaultValues.top.playersByPage; + const borneinf = bornesup - (DefaultValues.top.playersByPage - 1); + const data = await playerManager.getTopData(borneinf, bornesup); + const messageTop = generateTopMessage(message, borneinf, bornesup, pageMax, page, actualPlayer, totalJoueur, data, client); + message.channel.send(messageTop); + } +}; /** * /** * Returns a string containing the nodrink message. - * @returns {String} - A string containing the nodrink message. + * @return {String} - A string containing the nodrink message. * @param {*} message - The message that caused the function to be called. Used to retrieve the author of the message. * @param {Integer} borneinf -The upper limit of the page * @param {Integer} bornesup - The lower limit of the page @@ -48,21 +48,21 @@ const topCommand = async function (message, args, client) { * @param {*} data - The data of the page that has been required * @param {*} client - The bot client, used to retrieve the username of the players */ -const generateTopMessage = function (message, borneinf, bornesup, pageMax, page, actualPlayer, totalJoueur, data, client) { - let messageTop = Text.commands.top.introDebut + borneinf + Text.commands.top.pageNumberSeparator + bornesup + Text.commands.top.introFin; - let classementJoueur = actualPlayer.rank; - const embed = new Discord.RichEmbed(); - embed.setColor(DefaultValues.embed.color); - embed.setTitle(messageTop); - embed.setThumbnail("https://i.imgur.com/qwECDVq.png"); - if (data === null) { - embed.setDescription(Text.commands.top.noPlayersInTop); - } else { - embed.setDescription("\u200b\n" + generateTopDataText(data, totalJoueur, messageTop, message, client) + "\u200b"); - embed.addField(Text.commands.top.ranked, getEndSentence(classementJoueur, actualPlayer, message, totalJoueur, page, pageMax), false) - } - return embed; -} +const generateTopMessage = function(message, borneinf, bornesup, pageMax, page, actualPlayer, totalJoueur, data, client) { + const messageTop = Text.commands.top.introDebut + borneinf + Text.commands.top.pageNumberSeparator + bornesup + Text.commands.top.introFin; + const classementJoueur = actualPlayer.rank; + const embed = new Discord.RichEmbed(); + embed.setColor(DefaultValues.embed.color); + embed.setTitle(messageTop); + embed.setThumbnail('https://i.imgur.com/qwECDVq.png'); + if (data === null) { + embed.setDescription(Text.commands.top.noPlayersInTop); + } else { + embed.setDescription('\u200b\n' + generateTopDataText(data, totalJoueur, messageTop, message, client) + '\u200b'); + embed.addField(Text.commands.top.ranked, getEndSentence(classementJoueur, actualPlayer, message, totalJoueur, page, pageMax), false); + } + return embed; +}; /** @@ -74,17 +74,17 @@ const generateTopMessage = function (message, borneinf, bornesup, pageMax, page, */ function generateTopDataText(data, totalJoueur, messageTop, message, client) { - messageTop = ""; - messageTop = checkPotentialDatabaseError(totalJoueur, messageTop, message); - data.forEach(function (player) { //for each player that the bot have to display - messageTop = getPlacementEmoji(player, messageTop, message); - let pseudo = player.getPseudo(client); - if(pseudo == null){ - pseudo = Text.player.unknownPlayer - } - messageTop = displayPlayerInfos(messageTop, player, pseudo, message); - }); - return messageTop; + messageTop = ''; + messageTop = checkPotentialDatabaseError(totalJoueur, messageTop, message); + data.forEach(function(player) { // for each player that the bot have to display + messageTop = getPlacementEmoji(player, messageTop, message); + let pseudo = player.getPseudo(client); + if (pseudo == null) { + pseudo = Text.player.unknownPlayer; + } + messageTop = displayPlayerInfos(messageTop, player, pseudo, message); + }); + return messageTop; } @@ -95,39 +95,38 @@ function generateTopDataText(data, totalJoueur, messageTop, message, client) { * @param {*} message - The original command message, used to retrieve the author and the channel * @return {Integer} - The error code. 0 if all was ok */ -const testAbsurdsPages = function (message, page, pageMax) { - if (isNaN(page)) { - message.channel.send(Text.commands.top.errorDebut + message.author.username + Text.commands.top.invalidNumber); - return 1; - } - if (page <= 0) { - message.channel.send(Text.commands.top.errorDebut + message.author.username + Text.commands.top.invalidNumber); - return 1; - } - if (page > pageMax) { - message.channel.send(Text.commands.top.errorDebut + message.author.username + Text.commands.top.tooMuchError + pageMax); - return 1; - } - return 0; -} +const testAbsurdsPages = function(message, page, pageMax) { + if (isNaN(page)) { + message.channel.send(Text.commands.top.errorDebut + message.author.username + Text.commands.top.invalidNumber); + return 1; + } + if (page <= 0) { + message.channel.send(Text.commands.top.errorDebut + message.author.username + Text.commands.top.invalidNumber); + return 1; + } + if (page > pageMax) { + message.channel.send(Text.commands.top.errorDebut + message.author.username + Text.commands.top.tooMuchError + pageMax); + return 1; + } + return 0; +}; /** * Check if the top can be displayed without any problem * @param {Integer} totalJoueur - The count of player in the game * @param {String} messageTop - The string that will be displayed to the player * @param {*} message - The original command message, used to retrieve the author and the channel - * @returns {String} - The eventually corrected topMessage + * @return {String} - The eventually corrected topMessage */ function checkPotentialDatabaseError(totalJoueur, messageTop, message) { - if (totalJoueur < 1) { - messageTop = Text.commands.top.errorDebut + message.author.username + Text.commands.top.noUserError; - } - else { - if (messageTop.length > 2000) { - messageTop = Text.commands.top.errorDebut + message.author.username + Text.commands.top.tooMuchUserError; - } + if (totalJoueur < 1) { + messageTop = Text.commands.top.errorDebut + message.author.username + Text.commands.top.noUserError; + } else { + if (messageTop.length > 2000) { + messageTop = Text.commands.top.errorDebut + message.author.username + Text.commands.top.tooMuchUserError; } - return messageTop; + } + return messageTop; } @@ -139,27 +138,25 @@ function checkPotentialDatabaseError(totalJoueur, messageTop, message) { * @param {Integer} totalJoueur - The count of player in the game * @param {Integer} page - The current page number * @param {Integer} pageMax - The last page number - * @returns {String} - The end sentence + * @return {String} - The end sentence */ function getEndSentence(classementJoueur, actualPlayer, message, totalJoueur, page, pageMax) { - let endSentence = ""; - if (classementJoueur != 1) { - endSentence = getYourPlacementEmoji(classementJoueur); - if (actualPlayer.score > 100) { - endSentence += "**" + message.author.username + "**" + Text.commands.top.endSentenceStart + "**" + classementJoueur + Text.commands.top.endSentenceMiddle + totalJoueur + Text.commands.top.endSentenceEnd; - let pajejoueur = Math.ceil(classementJoueur / DefaultValues.top.playersByPage); - if (page != pajejoueur) { - endSentence += Text.commands.top.pageSentenceStart + pajejoueur + Text.commands.top.separatorSlash + pageMax + Text.commands.top.pageSentenceEnd; - } - } - else { - endSentence += message.author.username + Text.commands.top.errorNotRanked; - } - } - else { - endSentence += Text.commands.top.winningIntro + message.author.username + Text.commands.top.winningOutro + totalJoueur + Text.commands.top.endSentenceEnd; + let endSentence = ''; + if (classementJoueur != 1) { + endSentence = getYourPlacementEmoji(classementJoueur); + if (actualPlayer.score > 100) { + endSentence += '**' + message.author.username + '**' + Text.commands.top.endSentenceStart + '**' + classementJoueur + Text.commands.top.endSentenceMiddle + totalJoueur + Text.commands.top.endSentenceEnd; + const pajejoueur = Math.ceil(classementJoueur / DefaultValues.top.playersByPage); + if (page != pajejoueur) { + endSentence += Text.commands.top.pageSentenceStart + pajejoueur + Text.commands.top.separatorSlash + pageMax + Text.commands.top.pageSentenceEnd; + } + } else { + endSentence += message.author.username + Text.commands.top.errorNotRanked; } - return endSentence; + } else { + endSentence += Text.commands.top.winningIntro + message.author.username + Text.commands.top.winningOutro + totalJoueur + Text.commands.top.endSentenceEnd; + } + return endSentence; } @@ -169,29 +166,29 @@ function getEndSentence(classementJoueur, actualPlayer, message, totalJoueur, pa * @param {*} player - The player that is displayed * @param {String} pseudo - The username of the player * @param {*} message - The original command message, used to retrieve the author and the channel - * @returns {String} - The player infos + * @return {String} - The player infos */ function displayPlayerInfos(messageTop, player, pseudo, message) { - messageTop += player.rank + Text.commands.top.boldEnd + pseudo; - let temps = Math.floor((message.createdTimestamp - player.lastReport) / (1000 * 60)); //temps en minutes depuis le dernier rapport - if (temps > 1440 * DefaultValues.top.daysBeforeInnactive) { - messageTop += Text.commands.top.innactive; + messageTop += player.rank + Text.commands.top.boldEnd + pseudo; + const temps = Math.floor((message.createdTimestamp - player.lastReport) / (1000 * 60)); // temps en minutes depuis le dernier rapport + if (temps > 1440 * DefaultValues.top.daysBeforeInnactive) { + messageTop += Text.commands.top.innactive; + } else { + if (temps > 60) { + messageTop += Text.commands.top.availableReport; } else { - if (temps > 60) { - messageTop += Text.commands.top.availableReport; - } else { - if (player.effect != ":smiley:") { - messageTop += Text.commands.top.separator + player.effect; - } - } + if (player.effect != ':smiley:') { + messageTop += Text.commands.top.separator + player.effect; + } } + } - messageTop += Text.commands.top.scoreDisplayDebut + player.score + Text.commands.top.scoreDisplayFin; - messageTop += Text.commands.top.levelDisplayDebut + player.level + Text.commands.top.levelDisplayFin; + messageTop += Text.commands.top.scoreDisplayDebut + player.score + Text.commands.top.scoreDisplayFin; + messageTop += Text.commands.top.levelDisplayDebut + player.level + Text.commands.top.levelDisplayFin; - messageTop += Text.commands.top.endOfLineWBold; - return messageTop; + messageTop += Text.commands.top.endOfLineWBold; + return messageTop; } @@ -200,29 +197,25 @@ function displayPlayerInfos(messageTop, player, pseudo, message) { * @param {*} classementJoueur - The ranking of the player */ function getYourPlacementEmoji(classementJoueur) { - let emoji = "" - if (classementJoueur == 2) { - emoji += Text.commands.top.endOfLine + Text.commands.top.secondPlaceEmoji; - } - else { - if (classementJoueur == 3) { - emoji += Text.commands.top.endOfLine + Text.commands.top.thirdPlaceEmoji; - } - else { - if (classementJoueur <= 5) { - emoji += Text.commands.top.endOfLine + Text.commands.top.top5Emoji; - } - else { - if (classementJoueur <= 10) { - emoji += Text.commands.top.endOfLine + Text.commands.top.tada; - } - else { - emoji += Text.commands.top.endOfLine + Text.commands.top.otherEmoji; - } - } + let emoji = ''; + if (classementJoueur == 2) { + emoji += Text.commands.top.endOfLine + Text.commands.top.secondPlaceEmoji; + } else { + if (classementJoueur == 3) { + emoji += Text.commands.top.endOfLine + Text.commands.top.thirdPlaceEmoji; + } else { + if (classementJoueur <= 5) { + emoji += Text.commands.top.endOfLine + Text.commands.top.top5Emoji; + } else { + if (classementJoueur <= 10) { + emoji += Text.commands.top.endOfLine + Text.commands.top.tada; + } else { + emoji += Text.commands.top.endOfLine + Text.commands.top.otherEmoji; } + } } - return emoji; + } + return emoji; } /** @@ -232,52 +225,46 @@ function getYourPlacementEmoji(classementJoueur) { * @param {*} message - The message that generated the command, used to retrieve the guild of the author of the command */ function getPlacementEmoji(player, messageTop, message) { - if (player.rank == 1) { - messageTop += Text.commands.top.firstPlaceEmoji; - } - else { - if (player.rank == 2) { - messageTop += Text.commands.top.secondPlaceEmoji; - } - else { - if (player.rank == 3) { - messageTop += Text.commands.top.thirdPlaceEmoji; - } - else { - if (player.rank <= 5) { - messageTop += Text.commands.top.top5Emoji; - } - else { - if (message.author.id == player.discordId) { - messageTop += Text.commands.top.youEmoji; - } - else { - if (message.guild.members.find(val => val.id === player.discordId) != null) { - messageTop += Text.commands.top.sameGuild; - } - else { - messageTop += Text.commands.top.otherEmoji; - } - } - } + if (player.rank == 1) { + messageTop += Text.commands.top.firstPlaceEmoji; + } else { + if (player.rank == 2) { + messageTop += Text.commands.top.secondPlaceEmoji; + } else { + if (player.rank == 3) { + messageTop += Text.commands.top.thirdPlaceEmoji; + } else { + if (player.rank <= 5) { + messageTop += Text.commands.top.top5Emoji; + } else { + if (message.author.id == player.discordId) { + messageTop += Text.commands.top.youEmoji; + } else { + if (message.guild.members.find((val) => val.id === player.discordId) != null) { + messageTop += Text.commands.top.sameGuild; + } else { + messageTop += Text.commands.top.otherEmoji; } + } } + } } - return messageTop; + } + return messageTop; } /** * Allow to retrieve the page number the user want to see * @param {*} args - The args sent by the user - * @returns {Integer} - The page number + * @return {Integer} - The page number */ function getRequiredPageNumber(args) { - let page = args[1]; - if (page == null) { - page = 1; - } - page = parseInt(page, 10); - return page; + let page = args[1]; + if (page == null) { + page = 1; + } + page = parseInt(page, 10); + return page; } diff --git a/src/commands_old/TopServ.js b/src/commands_old/TopServ.js index 3959a1506..6172b3085 100644 --- a/src/commands_old/TopServ.js +++ b/src/commands_old/TopServ.js @@ -1,40 +1,40 @@ -const Discord = require("discord.js"); -const moment = require("moment"); +const Discord = require('discord.js'); +const moment = require('moment'); const DefaultValues = require('data/text/DefaultValues'); const PlayerManager = require('../core/PlayerManager'); const Tools = require('../utils/Tools'); -let Text +let Text; /** * Allow to display the rankings of the players * @param message - The message that caused the function to be called. Used to retrieve the author of the message. * @param args - arguments typed by the user in addition to the command */ -const TopServCommand = async function (message, args, client) { - Text = await Tools.chargeText(message); - let playerManager = new PlayerManager(); - let actualPlayer = await playerManager.getCurrentPlayer(message); - let idList = Tools.getIdListServMember(message); - actualPlayer.rank = await playerManager.getServRank(idList,actualPlayer.discordId) - totalJoueur = await playerManager.getNumberOfServPlayers(idList); - let pageMax = Math.ceil(totalJoueur / DefaultValues.TopServ.playersByPage); - let page = getRequiredPageNumber(args); - let erreur = testAbsurdsPages(message, page, pageMax); - if (erreur == 0) { - let bornesup = page * DefaultValues.TopServ.playersByPage - let borneinf = bornesup - (DefaultValues.TopServ.playersByPage - 1); - let data = await playerManager.getTopServData(borneinf, bornesup, idList) - const messageTop = generateTopMessage(message, borneinf, bornesup, pageMax, page, actualPlayer, totalJoueur, data, client); - message.channel.send(messageTop); - } -} +const TopServCommand = async function(message, args, client) { + Text = await Tools.chargeText(message); + const playerManager = new PlayerManager(); + const actualPlayer = await playerManager.getCurrentPlayer(message); + const idList = Tools.getIdListServMember(message); + actualPlayer.rank = await playerManager.getServRank(idList, actualPlayer.discordId); + totalJoueur = await playerManager.getNumberOfServPlayers(idList); + const pageMax = Math.ceil(totalJoueur / DefaultValues.TopServ.playersByPage); + const page = getRequiredPageNumber(args); + const erreur = testAbsurdsPages(message, page, pageMax); + if (erreur == 0) { + const bornesup = page * DefaultValues.TopServ.playersByPage; + const borneinf = bornesup - (DefaultValues.TopServ.playersByPage - 1); + const data = await playerManager.getTopServData(borneinf, bornesup, idList); + const messageTop = generateTopMessage(message, borneinf, bornesup, pageMax, page, actualPlayer, totalJoueur, data, client); + message.channel.send(messageTop); + } +}; /** * /** * Returns a string containing the nodrink message. - * @returns {String} - A string containing the nodrink message. + * @return {String} - A string containing the nodrink message. * @param {*} message - The message that caused the function to be called. Used to retrieve the author of the message. * @param {Integer} borneinf -The upper limit of the page * @param {Integer} bornesup - The lower limit of the page @@ -45,21 +45,21 @@ const TopServCommand = async function (message, args, client) { * @param {*} data - The data of the page that has been required * @param {*} client - The bot client, used to retrieve the username of the players */ -const generateTopMessage = function (message, borneinf, bornesup, pageMax, page, actualPlayer, totalJoueur, data, client) { - let messageTop = Text.commands.topServ.introDebut + borneinf + Text.commands.top.pageNumberSeparator + bornesup + Text.commands.top.introFin; - let classementJoueur = actualPlayer.rank; - const embed = new Discord.RichEmbed(); - embed.setColor(DefaultValues.embed.color); - embed.setTitle(messageTop); - embed.setThumbnail("https://i.imgur.com/qwECDVq.png"); - if (data === null) { - embed.setDescription(Text.commands.top.noPlayersInTop); - } else { - embed.setDescription("\u200b\n" + generateTopDataText(data, totalJoueur, messageTop, message, client) + "\u200b"); - embed.addField(Text.commands.top.ranked, getEndSentence(classementJoueur, actualPlayer, message, totalJoueur, page, pageMax), false) - } - return embed; -} +const generateTopMessage = function(message, borneinf, bornesup, pageMax, page, actualPlayer, totalJoueur, data, client) { + const messageTop = Text.commands.topServ.introDebut + borneinf + Text.commands.top.pageNumberSeparator + bornesup + Text.commands.top.introFin; + const classementJoueur = actualPlayer.rank; + const embed = new Discord.RichEmbed(); + embed.setColor(DefaultValues.embed.color); + embed.setTitle(messageTop); + embed.setThumbnail('https://i.imgur.com/qwECDVq.png'); + if (data === null) { + embed.setDescription(Text.commands.top.noPlayersInTop); + } else { + embed.setDescription('\u200b\n' + generateTopDataText(data, totalJoueur, messageTop, message, client) + '\u200b'); + embed.addField(Text.commands.top.ranked, getEndSentence(classementJoueur, actualPlayer, message, totalJoueur, page, pageMax), false); + } + return embed; +}; /** @@ -71,17 +71,17 @@ const generateTopMessage = function (message, borneinf, bornesup, pageMax, page, */ function generateTopDataText(data, totalJoueur, messageTop, message, client) { - messageTop = ""; - messageTop = checkPotentialDatabaseError(totalJoueur, messageTop, message); - data.forEach(function (player) { //for each player that the bot have to display - messageTop = getPlacementEmoji(player, messageTop, message); - let pseudo = player.getPseudo(client); - if(pseudo == null){ - pseudo = Text.player.unknownPlayer - } - messageTop = displayPlayerInfos(messageTop, player, pseudo, message); - }); - return messageTop; + messageTop = ''; + messageTop = checkPotentialDatabaseError(totalJoueur, messageTop, message); + data.forEach(function(player) { // for each player that the bot have to display + messageTop = getPlacementEmoji(player, messageTop, message); + let pseudo = player.getPseudo(client); + if (pseudo == null) { + pseudo = Text.player.unknownPlayer; + } + messageTop = displayPlayerInfos(messageTop, player, pseudo, message); + }); + return messageTop; } @@ -92,39 +92,38 @@ function generateTopDataText(data, totalJoueur, messageTop, message, client) { * @param {*} message - The original command message, used to retrieve the author and the channel * @return {Integer} - The error code. 0 if all was ok */ -const testAbsurdsPages = function (message, page, pageMax) { - if (isNaN(page)) { - message.channel.send(Text.commands.top.errorDebut + message.author.username + Text.commands.top.invalidNumber); - return 1; - } - if (page <= 0) { - message.channel.send(Text.commands.top.errorDebut + message.author.username + Text.commands.top.invalidNumber); - return 1; - } - if (page > pageMax) { - message.channel.send(Text.commands.top.errorDebut + message.author.username + Text.commands.top.tooMuchError + pageMax); - return 1; - } - return 0; -} +const testAbsurdsPages = function(message, page, pageMax) { + if (isNaN(page)) { + message.channel.send(Text.commands.top.errorDebut + message.author.username + Text.commands.top.invalidNumber); + return 1; + } + if (page <= 0) { + message.channel.send(Text.commands.top.errorDebut + message.author.username + Text.commands.top.invalidNumber); + return 1; + } + if (page > pageMax) { + message.channel.send(Text.commands.top.errorDebut + message.author.username + Text.commands.top.tooMuchError + pageMax); + return 1; + } + return 0; +}; /** * Check if the top can be displayed without any problem * @param {Integer} totalJoueur - The count of player in the game * @param {String} messageTop - The string that will be displayed to the player * @param {*} message - The original command message, used to retrieve the author and the channel - * @returns {String} - The eventually corrected topMessage + * @return {String} - The eventually corrected topMessage */ function checkPotentialDatabaseError(totalJoueur, messageTop, message) { - if (totalJoueur < 1) { - messageTop = Text.commands.top.errorDebut + message.author.username + Text.commands.top.noUserError; + if (totalJoueur < 1) { + messageTop = Text.commands.top.errorDebut + message.author.username + Text.commands.top.noUserError; + } else { + if (messageTop.length > 2000) { + messageTop = Text.commands.top.errorDebut + message.author.username + Text.commands.top.tooMuchUserError; } - else { - if (messageTop.length > 2000) { - messageTop = Text.commands.top.errorDebut + message.author.username + Text.commands.top.tooMuchUserError; - } - } - return messageTop; + } + return messageTop; } @@ -136,27 +135,25 @@ function checkPotentialDatabaseError(totalJoueur, messageTop, message) { * @param {Integer} totalJoueur - The count of player in the game * @param {Integer} page - The current page number * @param {Integer} pageMax - The last page number - * @returns {String} - The end sentence + * @return {String} - The end sentence */ function getEndSentence(classementJoueur, actualPlayer, message, totalJoueur, page, pageMax) { - let endSentence = ""; - if (classementJoueur != 1) { - endSentence = getYourPlacementEmoji(classementJoueur); - if (actualPlayer.score > 100) { - endSentence += "**" + message.author.username + "**" + Text.commands.top.endSentenceStart + "**" + classementJoueur + Text.commands.top.endSentenceMiddle + totalJoueur + Text.commands.top.endSentenceEnd; - let pajejoueur = Math.ceil(classementJoueur / DefaultValues.top.playersByPage); - if (page != pajejoueur) { - endSentence += Text.commands.top.pageSentenceStart + pajejoueur + Text.commands.top.separatorSlash + pageMax + Text.commands.top.pageSentenceEnd; - } - } - else { - endSentence += message.author.username + Text.commands.top.errorNotRanked; - } - } - else { - endSentence += Text.commands.top.winningIntro + message.author.username + Text.commands.top.winningOutro + totalJoueur + Text.commands.top.endSentenceEnd; + let endSentence = ''; + if (classementJoueur != 1) { + endSentence = getYourPlacementEmoji(classementJoueur); + if (actualPlayer.score > 100) { + endSentence += '**' + message.author.username + '**' + Text.commands.top.endSentenceStart + '**' + classementJoueur + Text.commands.top.endSentenceMiddle + totalJoueur + Text.commands.top.endSentenceEnd; + const pajejoueur = Math.ceil(classementJoueur / DefaultValues.top.playersByPage); + if (page != pajejoueur) { + endSentence += Text.commands.top.pageSentenceStart + pajejoueur + Text.commands.top.separatorSlash + pageMax + Text.commands.top.pageSentenceEnd; + } + } else { + endSentence += message.author.username + Text.commands.top.errorNotRanked; } - return endSentence; + } else { + endSentence += Text.commands.top.winningIntro + message.author.username + Text.commands.top.winningOutro + totalJoueur + Text.commands.top.endSentenceEnd; + } + return endSentence; } @@ -166,29 +163,29 @@ function getEndSentence(classementJoueur, actualPlayer, message, totalJoueur, pa * @param {*} player - The player that is displayed * @param {String} pseudo - The username of the player * @param {*} message - The original command message, used to retrieve the author and the channel - * @returns {String} - The player infos + * @return {String} - The player infos */ function displayPlayerInfos(messageTop, player, pseudo, message) { - messageTop += player.rank + Text.commands.top.boldEnd + pseudo; - let temps = Math.floor((message.createdTimestamp - player.lastReport) / (1000 * 60)); //temps en minutes depuis le dernier rapport - if (temps > 1440 * DefaultValues.top.daysBeforeInnactive) { - messageTop += Text.commands.top.innactive; + messageTop += player.rank + Text.commands.top.boldEnd + pseudo; + const temps = Math.floor((message.createdTimestamp - player.lastReport) / (1000 * 60)); // temps en minutes depuis le dernier rapport + if (temps > 1440 * DefaultValues.top.daysBeforeInnactive) { + messageTop += Text.commands.top.innactive; + } else { + if (temps > 60) { + messageTop += Text.commands.top.availableReport; } else { - if (temps > 60) { - messageTop += Text.commands.top.availableReport; - } else { - if (player.effect != ":smiley:") { - messageTop += Text.commands.top.separator + player.effect; - } - } + if (player.effect != ':smiley:') { + messageTop += Text.commands.top.separator + player.effect; + } } + } - messageTop += Text.commands.top.scoreDisplayDebut + player.score + Text.commands.top.scoreDisplayFin; - messageTop += Text.commands.top.levelDisplayDebut + player.level + Text.commands.top.levelDisplayFin; + messageTop += Text.commands.top.scoreDisplayDebut + player.score + Text.commands.top.scoreDisplayFin; + messageTop += Text.commands.top.levelDisplayDebut + player.level + Text.commands.top.levelDisplayFin; - messageTop += Text.commands.top.endOfLineWBold; - return messageTop; + messageTop += Text.commands.top.endOfLineWBold; + return messageTop; } @@ -197,29 +194,25 @@ function displayPlayerInfos(messageTop, player, pseudo, message) { * @param {*} classementJoueur - The ranking of the player */ function getYourPlacementEmoji(classementJoueur) { - let emoji = "" - if (classementJoueur == 2) { - emoji += Text.commands.top.endOfLine + Text.commands.top.secondPlaceEmoji; - } - else { - if (classementJoueur == 3) { - emoji += Text.commands.top.endOfLine + Text.commands.top.thirdPlaceEmoji; - } - else { - if (classementJoueur <= 5) { - emoji += Text.commands.top.endOfLine + Text.commands.top.top5Emoji; - } - else { - if (classementJoueur <= 10) { - emoji += Text.commands.top.endOfLine + Text.commands.top.tada; - } - else { - emoji += Text.commands.top.endOfLine + Text.commands.top.otherEmoji; - } - } + let emoji = ''; + if (classementJoueur == 2) { + emoji += Text.commands.top.endOfLine + Text.commands.top.secondPlaceEmoji; + } else { + if (classementJoueur == 3) { + emoji += Text.commands.top.endOfLine + Text.commands.top.thirdPlaceEmoji; + } else { + if (classementJoueur <= 5) { + emoji += Text.commands.top.endOfLine + Text.commands.top.top5Emoji; + } else { + if (classementJoueur <= 10) { + emoji += Text.commands.top.endOfLine + Text.commands.top.tada; + } else { + emoji += Text.commands.top.endOfLine + Text.commands.top.otherEmoji; } + } } - return emoji; + } + return emoji; } /** @@ -229,47 +222,42 @@ function getYourPlacementEmoji(classementJoueur) { * @param {*} message - The message that generated the command, used to retrieve the guild of the author of the command */ function getPlacementEmoji(player, messageTop, message) { - if (player.rank == 1) { - messageTop += Text.commands.top.firstPlaceEmoji; - } - else { - if (player.rank == 2) { - messageTop += Text.commands.top.secondPlaceEmoji; - } - else { - if (player.rank == 3) { - messageTop += Text.commands.top.thirdPlaceEmoji; - } - else { - if (player.rank <= 5) { - messageTop += Text.commands.top.top5Emoji; - } - else { - if (message.author.id == player.discordId) { - messageTop += Text.commands.top.youEmoji; - } - else { - messageTop += Text.commands.top.otherEmoji; - } - } - } + if (player.rank == 1) { + messageTop += Text.commands.top.firstPlaceEmoji; + } else { + if (player.rank == 2) { + messageTop += Text.commands.top.secondPlaceEmoji; + } else { + if (player.rank == 3) { + messageTop += Text.commands.top.thirdPlaceEmoji; + } else { + if (player.rank <= 5) { + messageTop += Text.commands.top.top5Emoji; + } else { + if (message.author.id == player.discordId) { + messageTop += Text.commands.top.youEmoji; + } else { + messageTop += Text.commands.top.otherEmoji; + } } + } } - return messageTop; + } + return messageTop; } /** * Allow to retrieve the page number the user want to see * @param {*} args - The args sent by the user - * @returns {Integer} - The page number + * @return {Integer} - The page number */ function getRequiredPageNumber(args) { - let page = args[1]; - if (page == null) { - page = 1; - } - page = parseInt(page, 10); - return page; + let page = args[1]; + if (page == null) { + page = 1; + } + page = parseInt(page, 10); + return page; } diff --git a/src/commands_old/TopWeek.js b/src/commands_old/TopWeek.js index 5eca05fc7..57591056a 100644 --- a/src/commands_old/TopWeek.js +++ b/src/commands_old/TopWeek.js @@ -1,38 +1,38 @@ -const Discord = require("discord.js"); -const moment = require("moment"); +const Discord = require('discord.js'); +const moment = require('moment'); const DefaultValues = require('data/text/DefaultValues'); const PlayerManager = require('../core/PlayerManager'); const Tools = require('../utils/Tools'); -let Text +let Text; /** * Allow to display the rankings of the players * @param message - The message that caused the function to be called. Used to retrieve the author of the message. * @param args - arguments typed by the user in addition to the command */ -const TopWeekCommand = async function (message, args, client) { - Text = await Tools.chargeText(message); - let playerManager = new PlayerManager(); - let actualPlayer = await playerManager.getCurrentPlayer(message); - totalJoueur = await playerManager.getNumberOfWeeklyPlayers(); - let pageMax = Math.ceil(totalJoueur / DefaultValues.TopWeek.playersByPage); - let page = getRequiredPageNumber(args); - let erreur = testAbsurdsPages(message, page, pageMax); - if (erreur == 0) { - let bornesup = page * DefaultValues.TopWeek.playersByPage - let borneinf = bornesup - (DefaultValues.TopWeek.playersByPage - 1); - let data = await playerManager.getTopWeekData(borneinf, bornesup) - const messageTop = generateTopMessage(message, borneinf, bornesup, pageMax, page, actualPlayer, totalJoueur, data, client); - message.channel.send(messageTop); - } -} +const TopWeekCommand = async function(message, args, client) { + Text = await Tools.chargeText(message); + const playerManager = new PlayerManager(); + const actualPlayer = await playerManager.getCurrentPlayer(message); + totalJoueur = await playerManager.getNumberOfWeeklyPlayers(); + const pageMax = Math.ceil(totalJoueur / DefaultValues.TopWeek.playersByPage); + const page = getRequiredPageNumber(args); + const erreur = testAbsurdsPages(message, page, pageMax); + if (erreur == 0) { + const bornesup = page * DefaultValues.TopWeek.playersByPage; + const borneinf = bornesup - (DefaultValues.TopWeek.playersByPage - 1); + const data = await playerManager.getTopWeekData(borneinf, bornesup); + const messageTop = generateTopMessage(message, borneinf, bornesup, pageMax, page, actualPlayer, totalJoueur, data, client); + message.channel.send(messageTop); + } +}; /** * /** * Returns a string containing the nodrink message. - * @returns {String} - A string containing the nodrink message. + * @return {String} - A string containing the nodrink message. * @param {*} message - The message that caused the function to be called. Used to retrieve the author of the message. * @param {Integer} borneinf -The upper limit of the page * @param {Integer} bornesup - The lower limit of the page @@ -43,22 +43,22 @@ const TopWeekCommand = async function (message, args, client) { * @param {*} data - The data of the page that has been required * @param {*} client - The bot client, used to retrieve the username of the players */ -const generateTopMessage = function (message, borneinf, bornesup, pageMax, page, actualPlayer, totalJoueur, data, client) { - let messageTop = Text.commands.TopWeek.introDebut + borneinf + Text.commands.TopWeek.pageNumberSeparator + bornesup + Text.commands.TopWeek.introFin; - let classementJoueur = actualPlayer.weeklyRank; - const embed = new Discord.RichEmbed(); - embed.setColor(DefaultValues.embed.color); - embed.setTitle(messageTop); - embed.setThumbnail("https://i.imgur.com/qwECDVq.png"); - if (data === null) { - embed.setDescription(Text.commands.TopWeek.noPlayersInTop); - } else { - embed.setDescription("\u200b\n" + generateTopDataText(data, totalJoueur, message, client) + "\u200b"); - embed.addField(Text.commands.TopWeek.ranked, getEndSentence(classementJoueur, actualPlayer, message, totalJoueur, page, pageMax), false) - embed.setFooter(Text.commands.TopWeek.footer + `${getResetDate()}`, "https://i.imgur.com/OpL9WpR.png"); - } - return embed; -} +const generateTopMessage = function(message, borneinf, bornesup, pageMax, page, actualPlayer, totalJoueur, data, client) { + const messageTop = Text.commands.TopWeek.introDebut + borneinf + Text.commands.TopWeek.pageNumberSeparator + bornesup + Text.commands.TopWeek.introFin; + const classementJoueur = actualPlayer.weeklyRank; + const embed = new Discord.RichEmbed(); + embed.setColor(DefaultValues.embed.color); + embed.setTitle(messageTop); + embed.setThumbnail('https://i.imgur.com/qwECDVq.png'); + if (data === null) { + embed.setDescription(Text.commands.TopWeek.noPlayersInTop); + } else { + embed.setDescription('\u200b\n' + generateTopDataText(data, totalJoueur, message, client) + '\u200b'); + embed.addField(Text.commands.TopWeek.ranked, getEndSentence(classementJoueur, actualPlayer, message, totalJoueur, page, pageMax), false); + embed.setFooter(Text.commands.TopWeek.footer + `${getResetDate()}`, 'https://i.imgur.com/OpL9WpR.png'); + } + return embed; +}; /** * @param {*} data - The data of the page that has been required @@ -68,17 +68,17 @@ const generateTopMessage = function (message, borneinf, bornesup, pageMax, page, */ function generateTopDataText(data, totalJoueur, message, client) { - let messageTop = ""; - messageTop = checkPotentialDatabaseError(totalJoueur, messageTop, message); - data.forEach(function (player) { //for each player that the bot have to display - messageTop = getPlacementEmoji(player, messageTop, message); - let pseudo = player.getPseudo(client); - if (pseudo == null) { - pseudo = Text.player.unknownPlayer - } - messageTop = displayPlayerInfos(messageTop, player, pseudo, message); - }); - return messageTop; + let messageTop = ''; + messageTop = checkPotentialDatabaseError(totalJoueur, messageTop, message); + data.forEach(function(player) { // for each player that the bot have to display + messageTop = getPlacementEmoji(player, messageTop, message); + let pseudo = player.getPseudo(client); + if (pseudo == null) { + pseudo = Text.player.unknownPlayer; + } + messageTop = displayPlayerInfos(messageTop, player, pseudo, message); + }); + return messageTop; } @@ -89,39 +89,38 @@ function generateTopDataText(data, totalJoueur, message, client) { * @param {*} message - The original command message, used to retrieve the author and the channel * @return {Integer} - The error code. 0 if all was ok */ -const testAbsurdsPages = function (message, page, pageMax) { - if (isNaN(page)) { - message.channel.send(Text.commands.TopWeek.errorDebut + message.author.username + Text.commands.TopWeek.invalidNumber); - return 1; - } - if (page <= 0) { - message.channel.send(Text.commands.TopWeek.errorDebut + message.author.username + Text.commands.TopWeek.invalidNumber); - return 1; - } - if (page > pageMax) { - message.channel.send(Text.commands.TopWeek.errorDebut + message.author.username + Text.commands.TopWeek.tooMuchError + pageMax); - return 1; - } - return 0; -} +const testAbsurdsPages = function(message, page, pageMax) { + if (isNaN(page)) { + message.channel.send(Text.commands.TopWeek.errorDebut + message.author.username + Text.commands.TopWeek.invalidNumber); + return 1; + } + if (page <= 0) { + message.channel.send(Text.commands.TopWeek.errorDebut + message.author.username + Text.commands.TopWeek.invalidNumber); + return 1; + } + if (page > pageMax) { + message.channel.send(Text.commands.TopWeek.errorDebut + message.author.username + Text.commands.TopWeek.tooMuchError + pageMax); + return 1; + } + return 0; +}; /** * Check if the TopWeek can be displayed without any problem * @param {Integer} totalJoueur - The count of player in the game * @param {String} messageTop - The string that will be displayed to the player * @param {*} message - The original command message, used to retrieve the author and the channel - * @returns {String} - The eventually corrected topMessage + * @return {String} - The eventually corrected topMessage */ function checkPotentialDatabaseError(totalJoueur, messageTop, message) { - if (totalJoueur < 1) { - messageTop = Text.commands.TopWeek.errorDebut + message.author.username + Text.commands.TopWeek.noUserError; - } - else { - if (messageTop.length > 2000) { - messageTop = Text.commands.TopWeek.errorDebut + message.author.username + Text.commands.TopWeek.tooMuchUserError; - } + if (totalJoueur < 1) { + messageTop = Text.commands.TopWeek.errorDebut + message.author.username + Text.commands.TopWeek.noUserError; + } else { + if (messageTop.length > 2000) { + messageTop = Text.commands.TopWeek.errorDebut + message.author.username + Text.commands.TopWeek.tooMuchUserError; } - return messageTop; + } + return messageTop; } @@ -134,27 +133,25 @@ function checkPotentialDatabaseError(totalJoueur, messageTop, message) { * @param {Integer} totalJoueur - The count of player in the game * @param {Integer} page - The current page number * @param {Integer} pageMax - The last page number - * @returns {String} - The end sentence + * @return {String} - The end sentence */ function getEndSentence(classementJoueur, actualPlayer, message, totalJoueur, page, pageMax) { - let endSentence = "" - if (classementJoueur != 1) { - endSentence = getYourPlacementEmoji(classementJoueur, endSentence); - if (actualPlayer.weeklyScore > 0) { - endSentence += "**" + message.author.username + "**" + Text.commands.TopWeek.endSentenceStart + "**" + classementJoueur + Text.commands.TopWeek.endSentenceMiddle + totalJoueur + Text.commands.TopWeek.endSentenceEnd; - let pajejoueur = Math.ceil(classementJoueur / DefaultValues.TopWeek.playersByPage); - if (page != pajejoueur) { - endSentence += Text.commands.TopWeek.pageSentenceStart + pajejoueur + Text.commands.TopWeek.separatorSlash + pageMax + Text.commands.TopWeek.pageSentenceEnd; - } - } - else { - endSentence += message.author.username + Text.commands.TopWeek.errorNotRanked; - } - } - else { - endSentence += Text.commands.TopWeek.winningIntro + message.author.username + Text.commands.TopWeek.winningOutro + totalJoueur + Text.commands.TopWeek.endSentenceEnd; + let endSentence = ''; + if (classementJoueur != 1) { + endSentence = getYourPlacementEmoji(classementJoueur, endSentence); + if (actualPlayer.weeklyScore > 0) { + endSentence += '**' + message.author.username + '**' + Text.commands.TopWeek.endSentenceStart + '**' + classementJoueur + Text.commands.TopWeek.endSentenceMiddle + totalJoueur + Text.commands.TopWeek.endSentenceEnd; + const pajejoueur = Math.ceil(classementJoueur / DefaultValues.TopWeek.playersByPage); + if (page != pajejoueur) { + endSentence += Text.commands.TopWeek.pageSentenceStart + pajejoueur + Text.commands.TopWeek.separatorSlash + pageMax + Text.commands.TopWeek.pageSentenceEnd; + } + } else { + endSentence += message.author.username + Text.commands.TopWeek.errorNotRanked; } - return endSentence; + } else { + endSentence += Text.commands.TopWeek.winningIntro + message.author.username + Text.commands.TopWeek.winningOutro + totalJoueur + Text.commands.TopWeek.endSentenceEnd; + } + return endSentence; } @@ -164,29 +161,29 @@ function getEndSentence(classementJoueur, actualPlayer, message, totalJoueur, pa * @param {*} player - The player that is displayed * @param {String} pseudo - The username of the player * @param {*} message - The original command message, used to retrieve the author and the channel - * @returns {String} - The player infos + * @return {String} - The player infos */ function displayPlayerInfos(messageTop, player, pseudo, message) { - messageTop += player.weeklyRank + Text.commands.TopWeek.boldEnd + pseudo; - let temps = Math.floor((message.createdTimestamp - player.lastReport) / (1000 * 60)); //temps en minutes depuis le dernier rapport - if (temps > 1440 * DefaultValues.top.daysBeforeInnactive) { - messageTop += Text.commands.TopWeek.innactive; + messageTop += player.weeklyRank + Text.commands.TopWeek.boldEnd + pseudo; + const temps = Math.floor((message.createdTimestamp - player.lastReport) / (1000 * 60)); // temps en minutes depuis le dernier rapport + if (temps > 1440 * DefaultValues.top.daysBeforeInnactive) { + messageTop += Text.commands.TopWeek.innactive; + } else { + if (temps > 60) { + messageTop += Text.commands.TopWeek.availableReport; } else { - if (temps > 60) { - messageTop += Text.commands.TopWeek.availableReport; - } else { - if (player.effect != ":smiley:") { - messageTop += Text.commands.TopWeek.separator + player.effect; - } - } + if (player.effect != ':smiley:') { + messageTop += Text.commands.TopWeek.separator + player.effect; + } } + } - messageTop += Text.commands.TopWeek.scoreDisplayDebut + player.weeklyScore + Text.commands.TopWeek.scoreDisplayFin; - messageTop += Text.commands.TopWeek.levelDisplayDebut + player.level + Text.commands.TopWeek.levelDisplayFin; + messageTop += Text.commands.TopWeek.scoreDisplayDebut + player.weeklyScore + Text.commands.TopWeek.scoreDisplayFin; + messageTop += Text.commands.TopWeek.levelDisplayDebut + player.level + Text.commands.TopWeek.levelDisplayFin; - messageTop += Text.commands.TopWeek.endOfLineWBold; - return messageTop; + messageTop += Text.commands.TopWeek.endOfLineWBold; + return messageTop; } /** @@ -195,29 +192,25 @@ function displayPlayerInfos(messageTop, player, pseudo, message) { * @param {*} messageTop - The string that has to be returned */ function getYourPlacementEmoji(classementJoueur, messageTop) { - let emoji = "" - if (classementJoueur == 2) { - emoji += Text.commands.TopWeek.endOfLine + Text.commands.TopWeek.secondPlaceEmoji; - } - else { - if (classementJoueur == 3) { - emoji += Text.commands.TopWeek.endOfLine + Text.commands.TopWeek.thirdPlaceEmoji; - } - else { - if (classementJoueur <= 5) { - emoji += Text.commands.TopWeek.endOfLine + Text.commands.TopWeek.top5Emoji; - } - else { - if (classementJoueur <= 10) { - emoji += Text.commands.TopWeek.endOfLine + Text.commands.TopWeek.tada; - } - else { - emoji += Text.commands.TopWeek.endOfLine + Text.commands.TopWeek.otherEmoji; - } - } + let emoji = ''; + if (classementJoueur == 2) { + emoji += Text.commands.TopWeek.endOfLine + Text.commands.TopWeek.secondPlaceEmoji; + } else { + if (classementJoueur == 3) { + emoji += Text.commands.TopWeek.endOfLine + Text.commands.TopWeek.thirdPlaceEmoji; + } else { + if (classementJoueur <= 5) { + emoji += Text.commands.TopWeek.endOfLine + Text.commands.TopWeek.top5Emoji; + } else { + if (classementJoueur <= 10) { + emoji += Text.commands.TopWeek.endOfLine + Text.commands.TopWeek.tada; + } else { + emoji += Text.commands.TopWeek.endOfLine + Text.commands.TopWeek.otherEmoji; } + } } - return emoji; + } + return emoji; } /** @@ -227,76 +220,70 @@ function getYourPlacementEmoji(classementJoueur, messageTop) { * @param {*} message - The message that generated the command, used to retrieve the guild of the author of the command */ function getPlacementEmoji(player, messageTop, message) { - if (player.weeklyRank == 1) { - messageTop += Text.commands.TopWeek.firstPlaceEmoji; - } - else { - if (player.weeklyRank == 2) { - messageTop += Text.commands.TopWeek.secondPlaceEmoji; - } - else { - if (player.weeklyRank == 3) { - messageTop += Text.commands.TopWeek.thirdPlaceEmoji; - } - else { - if (player.weeklyRank <= 5) { - messageTop += Text.commands.TopWeek.top5Emoji; - } - else { - if (message.author.id == player.discordId) { - messageTop += Text.commands.TopWeek.youEmoji; - } - else { - if (message.guild.members.find(val => val.id === player.discordId) != null) { - messageTop += Text.commands.TopWeek.sameGuild; - } - else { - messageTop += Text.commands.TopWeek.otherEmoji; - } - } - } + if (player.weeklyRank == 1) { + messageTop += Text.commands.TopWeek.firstPlaceEmoji; + } else { + if (player.weeklyRank == 2) { + messageTop += Text.commands.TopWeek.secondPlaceEmoji; + } else { + if (player.weeklyRank == 3) { + messageTop += Text.commands.TopWeek.thirdPlaceEmoji; + } else { + if (player.weeklyRank <= 5) { + messageTop += Text.commands.TopWeek.top5Emoji; + } else { + if (message.author.id == player.discordId) { + messageTop += Text.commands.TopWeek.youEmoji; + } else { + if (message.guild.members.find((val) => val.id === player.discordId) != null) { + messageTop += Text.commands.TopWeek.sameGuild; + } else { + messageTop += Text.commands.TopWeek.otherEmoji; } + } } + } } - return messageTop; + } + return messageTop; } /** * Allow to retrieve the page number the user want to see * @param {*} args - The args sent by the user - * @returns {Integer} - The page number + * @return {Integer} - The page number */ function getRequiredPageNumber(args) { - let page = args[1]; - if (page == null) { - page = 1; - } - page = parseInt(page, 10); - return page; + let page = args[1]; + if (page == null) { + page = 1; + } + page = parseInt(page, 10); + return page; } /** * Allow to retrieve the time before the leaderboard reset. - * @returns {String} - The time formatted in a string. + * @return {String} - The time formatted in a string. */ function getResetDate() { - //Creating Dates - var now = new Date(); //The current date - var dateOfReset = new Date(); // The next Sunday - dateOfReset.setDate(now.getDate() + (0 + (7 - now.getDay())) % 7); // Calculating next Sunday - dateOfReset.setHours(22, 59, 59); // Defining hours, min, sec to 23, 59, 59 - //Parsing dates to moment - var nowMoment = new moment(now); - var momentOfReset = new moment(dateOfReset); - //Creating the date difference string. - const diffDays = momentOfReset.diff(nowMoment, 'days'); - const diffHours = momentOfReset.diff(nowMoment, 'hours'); - const diffMinutes = momentOfReset.diff(nowMoment, 'minutes'); - //Converting into a String - var parsedTime = " " + diffDays + Text.commands.TopWeek.days + " " + - (diffHours - diffDays * 24) + Text.commands.TopWeek.hours + " " + - (diffMinutes - diffHours * 60) + Text.commands.TopWeek.minutes + "."; - return parsedTime; + // Creating Dates + const now = new Date(); // The current date + const dateOfReset = new Date(); // The next Sunday + dateOfReset.setDate(now.getDate() + (0 + (7 - now.getDay())) % 7); // Calculating next Sunday + dateOfReset.setHours(22, 59, 59); // Defining hours, min, sec to 23, 59, 59 + // Parsing dates to moment + const nowMoment = new moment(now); + const momentOfReset = new moment(dateOfReset); + // Creating the date difference string. + const diffDays = momentOfReset.diff(nowMoment, 'days'); + const diffHours = momentOfReset.diff(nowMoment, 'hours'); + const diffMinutes = momentOfReset.diff(nowMoment, 'minutes'); + // Converting into a String + const parsedTime = ' ' + diffDays + Text.commands.TopWeek.days + ' ' + + (diffHours - diffDays * 24) + Text.commands.TopWeek.hours + ' ' + + (diffMinutes - diffHours * 60) + Text.commands.TopWeek.minutes + '.'; + return parsedTime; } diff --git a/src/commands_old/admin/Reset.js b/src/commands_old/admin/Reset.js index eff4ec12e..71993917b 100644 --- a/src/commands_old/admin/Reset.js +++ b/src/commands_old/admin/Reset.js @@ -4,30 +4,29 @@ const Config = require('../../utils/Config'); * Allow an admin to restart the bot * @param message - The message that caused the function to be called. Used to retrieve the author of the message. */ -const resetCommand = async function (message, args, client) { - if (userIsNotTheOwnerOfTheBot(message)) { // the author of the command is not the owner of the bot - return console.log(message.author.username + " tried to use an admin command"); - } else { // the author of the command is the author of the bot - client.guilds.get(Config.MAIN_SERVER_ID).channels.get(Config.CONSOLE_CHANNEL_ID).send(":red_circle: **Bot éteint par commande admin**") - message.react("👋").then(() => { - client.destroy(); - client.login(Config.DISCORD_CLIENT_TOKEN); - }) - console.log("\n\n\n#### BOT ETEINT PAR COMMANDE ADMIN ####\n\n\n") - } +const resetCommand = async function(message, args, client) { + if (userIsNotTheOwnerOfTheBot(message)) { // the author of the command is not the owner of the bot + return console.log(message.author.username + ' tried to use an admin command'); + } else { // the author of the command is the author of the bot + client.guilds.get(Config.MAIN_SERVER_ID).channels.get(Config.CONSOLE_CHANNEL_ID).send(':red_circle: **Bot éteint par commande admin**'); + message.react('👋').then(() => { + client.destroy(); + client.login(Config.DISCORD_CLIENT_TOKEN); + }); + console.log('\n\n\n#### BOT ETEINT PAR COMMANDE ADMIN ####\n\n\n'); + } }; /** * Test if the person who sent the message is the owner of the bot. - * @returns {boolean} - A boolean containing false if the user is the owner. + * @return {boolean} - A boolean containing false if the user is the owner. * @param message - The message that caused the function to be called. Used to retrieve the author of the message. */ function userIsNotTheOwnerOfTheBot(message) { - return message.author.id != Config.BOT_OWNER_ID; + return message.author.id != Config.BOT_OWNER_ID; } - module.exports.ResetCommand = resetCommand; diff --git a/src/commands_old/admin/ResetBadge.js b/src/commands_old/admin/ResetBadge.js index bf29a227b..903bd51e5 100644 --- a/src/commands_old/admin/ResetBadge.js +++ b/src/commands_old/admin/ResetBadge.js @@ -5,30 +5,29 @@ const PlayerManager = require('../../core/PlayerManager'); * Allow an admin to reset the badges of somebody * @param message - The message that caused the function to be called. Used to retrieve the author of the message. */ -const resetBadgeCommand = async function (message, args) { - if (userIsNotTheOwnerOfTheBotOrABadgeManager(message)) { // the author of the command is not the owner of the bot - return console.log(message.author.username + " tried to use an admin command"); - } else { // the author of the command is the author of the bot - let playerManager = new PlayerManager(); - let playerId = message.mentions.users.last().id; - let player = await playerManager.getPlayerById(playerId,message); - player.badges = ""; - playerManager.updatePlayer(player); - message.channel.send(":white_check_mark: | Les badges ont été reset"); - } +const resetBadgeCommand = async function(message, args) { + if (userIsNotTheOwnerOfTheBotOrABadgeManager(message)) { // the author of the command is not the owner of the bot + return console.log(message.author.username + ' tried to use an admin command'); + } else { // the author of the command is the author of the bot + const playerManager = new PlayerManager(); + const playerId = message.mentions.users.last().id; + const player = await playerManager.getPlayerById(playerId, message); + player.badges = ''; + playerManager.updatePlayer(player); + message.channel.send(':white_check_mark: | Les badges ont été reset'); + } }; /** * Test if the person who sent the message is the owner of the bot. - * @returns {boolean} - A boolean containing false if the user is the owner. + * @return {boolean} - A boolean containing false if the user is the owner. * @param message - The message that caused the function to be called. Used to retrieve the author of the message. */ function userIsNotTheOwnerOfTheBotOrABadgeManager(message) { - return message.author.id != Config.BOT_OWNER_ID && !Config.BADGE_MANAGER_ID.includes(message.author.id) ; + return message.author.id != Config.BOT_OWNER_ID && !Config.BADGE_MANAGER_ID.includes(message.author.id); } - module.exports.ResetBadgeCommand = resetBadgeCommand; diff --git a/src/commands_old/admin/Send.js b/src/commands_old/admin/Send.js index 92600b938..86c7b4d2e 100644 --- a/src/commands_old/admin/Send.js +++ b/src/commands_old/admin/Send.js @@ -4,36 +4,34 @@ const Config = require('../../utils/Config'); * Allow an admin to send a dm to somebody * @param message - The message that caused the function to be called. Used to retrieve the author of the message. */ -const sendCommand = async function (message, args, client) { - message.delete(); - if (userIsNotTheOwnerOfTheBotOrASupportMember(message)) { // the author of the command is not the owner of the bot - return console.log(message.author.username + " tried to use an admin command"); - } else { // the author of the command is the author of the bot - let playerId = args[1]; - let user = client.users.get(playerId) - let string = message.content.substr(message.content.indexOf(" ") + 2); - let finalmessage = string.substr(string.indexOf(" ") + 1); - finalmessage = finalmessage +"\n\n- "+ message.author.username; - user.send(finalmessage).then(err => { - message.channel.send(":white_check_mark: | DM envoyé à **" + client.users.get(playerId).username + "** :\n\n>>> " + finalmessage + ""); - }).catch(err => { - message.channel.send(":x: | La personne a désactivé ses messages privés !") - }); - - } +const sendCommand = async function(message, args, client) { + message.delete(); + if (userIsNotTheOwnerOfTheBotOrASupportMember(message)) { // the author of the command is not the owner of the bot + return console.log(message.author.username + ' tried to use an admin command'); + } else { // the author of the command is the author of the bot + const playerId = args[1]; + const user = client.users.get(playerId); + const string = message.content.substr(message.content.indexOf(' ') + 2); + let finalmessage = string.substr(string.indexOf(' ') + 1); + finalmessage = finalmessage +'\n\n- '+ message.author.username; + user.send(finalmessage).then((err) => { + message.channel.send(':white_check_mark: | DM envoyé à **' + client.users.get(playerId).username + '** :\n\n>>> ' + finalmessage + ''); + }).catch((err) => { + message.channel.send(':x: | La personne a désactivé ses messages privés !'); + }); + } }; /** * Test if the person who sent the message is the owner of the bot or a support member. - * @returns {boolean} - A boolean containing false if the user is the owner. + * @return {boolean} - A boolean containing false if the user is the owner. * @param message - The message that caused the function to be called. Used to retrieve the author of the message. */ function userIsNotTheOwnerOfTheBotOrASupportMember(message) { - return message.author.id != Config.BOT_OWNER_ID && !Config.SUPPORT_ID.includes(message.author.id); + return message.author.id != Config.BOT_OWNER_ID && !Config.SUPPORT_ID.includes(message.author.id); } - module.exports.SendCommand = sendCommand; diff --git a/src/commands_old/admin/Servers.js b/src/commands_old/admin/Servers.js index 033642eca..35a7fc198 100644 --- a/src/commands_old/admin/Servers.js +++ b/src/commands_old/admin/Servers.js @@ -5,41 +5,40 @@ const ServerManager = require('../../core/ServerManager'); * Allow an admin to check the server list * @param message - The message that caused the function to be called. Used to retrieve the author of the message. */ -const serversCommand = async function (message, args, client) { - if (userIsNotTheOwnerOfTheBot(message)) { // the author of the command is not the owner of the bot - return console.log(message.author.username + " tried to use an admin command"); - } else { // the author of the command is the author of the bot - let compteur = 0; - let total = 0; - let resultat = ""; - function logMapElements(guilde) { - compteur++; - let serverManager = new ServerManager; - let { validation, nbMembres, nbBot, ratio } = serverManager.getValidationInfos(guilde); - total += nbMembres; - resultat += `${validation} Server ${compteur} : **${guilde}** | :bust_in_silhouette: : \`${nbMembres}\` | :robot: : \`${nbBot}\` | Ratio bot/Humain : \`${ratio}\` %\n`; - if (resultat.length > 1800) { - message.channel.send(resultat); - resultat = ""; - } - } - client.guilds.forEach(logMapElements); - resultat += `\n**Nombre total d'utilisateurs :** \`${total}\`` +const serversCommand = async function(message, args, client) { + if (userIsNotTheOwnerOfTheBot(message)) { // the author of the command is not the owner of the bot + return console.log(message.author.username + ' tried to use an admin command'); + } else { // the author of the command is the author of the bot + let compteur = 0; + let total = 0; + let resultat = ''; + function logMapElements(guilde) { + compteur++; + const serverManager = new ServerManager; + const {validation, nbMembres, nbBot, ratio} = serverManager.getValidationInfos(guilde); + total += nbMembres; + resultat += `${validation} Server ${compteur} : **${guilde}** | :bust_in_silhouette: : \`${nbMembres}\` | :robot: : \`${nbBot}\` | Ratio bot/Humain : \`${ratio}\` %\n`; + if (resultat.length > 1800) { message.channel.send(resultat); + resultat = ''; + } } + client.guilds.forEach(logMapElements); + resultat += `\n**Nombre total d'utilisateurs :** \`${total}\``; + message.channel.send(resultat); + } }; /** * Test if the person who sent the message is the owner of the bot. - * @returns {boolean} - A boolean containing false if the user is the owner. + * @return {boolean} - A boolean containing false if the user is the owner. * @param message - The message that caused the function to be called. Used to retrieve the author of the message. */ function userIsNotTheOwnerOfTheBot(message) { - return message.author.id != Config.BOT_OWNER_ID; + return message.author.id != Config.BOT_OWNER_ID; } - module.exports.ServersCommand = serversCommand; diff --git a/src/core/Command.js b/src/core/Command.js index 63f60eb0c..c164b9a5d 100644 --- a/src/core/Command.js +++ b/src/core/Command.js @@ -1,7 +1,9 @@ const fs = require('fs'); +/** + * @class + */ class Command { - /** * @return {Promise} */ @@ -9,19 +11,22 @@ class Command { Command.commands = new Map(); Command.players = JsonReader.app.BLACKLIST_IDS.split('-'); - const folders = ['src/commands/admin', 'src/commands/guild', 'src/commands/player']; + const folders = [ + 'src/commands/admin', + 'src/commands/guild', + 'src/commands/player']; for (let folder of folders) { - let commandsFiles = await fs.promises.readdir(folder); + const commandsFiles = await fs.promises.readdir(folder); for (const commandFile of commandsFiles) { if (!commandFile.endsWith('.js')) continue; folder = folder.replace('src/', ''); - let commandName = commandFile.split('.')[0]; - let commandKeys = Object.keys(require(`${folder}/${commandName}`)); + const commandName = commandFile.split('.')[0]; + const commandKeys = Object.keys(require(`${folder}/${commandName}`)); for (const commandKey of commandKeys) { await Command.commands.set( - commandKey, - require(`${folder}/${commandName}`)[commandKey], + commandKey, + require(`${folder}/${commandName}`)[commandKey], ); } } @@ -71,17 +76,18 @@ class Command { * @param {module:"discord.js".Message} message - Message from the discord server */ static async handleMessage(message) { - let [server] = await Servers.findOrCreate({ + const [server] = await Servers.findOrCreate({ where: { - discordGuild_id: message.guild.id - } + discordGuild_id: message.guild.id, + }, }); if (server.prefix === Command.getUsedPrefix(message, server.prefix)) { - - if (message.author.id !== JsonReader.app.BOT_OWNER_ID && JsonReader.app.MODE_MAINTENANCE) - return message.channel.send(JsonReader.bot.getTranslation(server.language).maintenance); - + if (message.author.id !== JsonReader.app.BOT_OWNER_ID && + JsonReader.app.MODE_MAINTENANCE) { + return message.channel.send( + JsonReader.bot.getTranslation(server.language).maintenance); + } // TODO 2.0 // const diffMinutes = getMinutesBeforeReset(); @@ -92,8 +98,12 @@ class Command { await Command.launchCommand(server.language, server.prefix, message); } else { - if (Command.getUsedPrefix(message, JsonReader.app.BOT_OWNER_PREFIX) === JsonReader.app.BOT_OWNER_PREFIX && message.author.id === JsonReader.app.BOT_OWNER_ID) - await Command.launchCommand(server.language, JsonReader.app.BOT_OWNER_PREFIX, message); + if (Command.getUsedPrefix(message, JsonReader.app.BOT_OWNER_PREFIX) === + JsonReader.app.BOT_OWNER_PREFIX && message.author.id === + JsonReader.app.BOT_OWNER_ID) { + await Command.launchCommand(server.language, + JsonReader.app.BOT_OWNER_PREFIX, message); + } } } @@ -102,7 +112,8 @@ class Command { * @param {module:"discord.js".Message} message - Message from the discord user */ static async handlePrivateMessage(message) { - await Command.sendSupportMessage(message, Command.hasBlockedPlayer(message.author.id)); + await Command.sendSupportMessage(message, + Command.hasBlockedPlayer(message.author.id)); } /** @@ -113,21 +124,29 @@ class Command { static async sendSupportMessage(message, isBlacklisted = false) { if (message.content === '') return; const mainServer = client.guilds.cache.get(JsonReader.app.MAIN_SERVER_ID); - const supportChannel = mainServer.channels.cache.get(JsonReader.app.SUPPORT_CHANNEL_ID); - const trashChannel = mainServer.channels.cache.get(JsonReader.app.TRASH_DM_CHANNEL_ID); + const supportChannel = mainServer.channels.cache.get( + JsonReader.app.SUPPORT_CHANNEL_ID); + const trashChannel = mainServer.channels.cache.get( + JsonReader.app.TRASH_DM_CHANNEL_ID); const channel = isBlacklisted ? trashChannel : supportChannel; const language = message.author.locale === 'fr' ? 'fr' : 'en'; const sentence = format(JsonReader.bot.dm.supportAlert, { - roleMention: isBlacklisted ? '' : idToMention(JsonReader.app.SUPPORT_ROLE), + roleMention: isBlacklisted ? '' : idToMention( + JsonReader.app.SUPPORT_ROLE), username: message.author.username, id: message.author.id, - isBlacklisted: isBlacklisted ? JsonReader.bot.dm.blacklisted : '' + isBlacklisted: isBlacklisted ? JsonReader.bot.dm.blacklisted : '', }); - - channel.send(message.author.id).catch(JsonReader.bot.getTranslation(language).noSpeakPermission); - channel.send(sentence + message.content).catch(JsonReader.bot.getTranslation(language).noSpeakPermission); - if (message.attachments.size > 0) await sendMessageAttachments(message, channel); + + channel.send(message.author.id) + .catch(JsonReader.bot.getTranslation(language).noSpeakPermission); + channel.send(sentence + message.content) + .catch(JsonReader.bot.getTranslation(language).noSpeakPermission); + if (message.attachments.size > 0) { + await sendMessageAttachments(message, + channel); + } } /** @@ -147,27 +166,25 @@ class Command { * @param {('fr'|'en')} language - The language for the current server */ static async launchCommand(language, prefix, message) { - let args = message.content.slice(prefix.length).trim().split(/ +/g); - let command = args.shift().toLowerCase(); + const args = message.content.slice(prefix.length).trim().split(/ +/g); + const command = args.shift().toLowerCase(); if (Command.commands.has(command)) { if (!message.channel.permissionsFor(client.user) - .serialize().SEND_MESSAGES || - !message.channel.permissionsFor(client.user) - .serialize().EMBED_LINKS || - !message.channel.permissionsFor(client.user) - .serialize().ADD_REACTIONS || - !message.channel.permissionsFor(client.user) - .serialize().USE_EXTERNAL_EMOJIS) { - - await message.author.send(JsonReader.bot.getTranslation(language).noSpeakPermission); - + .serialize().SEND_MESSAGES || + !message.channel.permissionsFor(client.user) + .serialize().EMBED_LINKS || + !message.channel.permissionsFor(client.user) + .serialize().ADD_REACTIONS || + !message.channel.permissionsFor(client.user) + .serialize().USE_EXTERNAL_EMOJIS) { + await message.author.send( + JsonReader.bot.getTranslation(language).noSpeakPermission); } else { await Command.commands.get(command)(language, message, args); } } } - } // /** @@ -206,6 +223,9 @@ class Command { // return diffMinutes; // } +/** + * @type {{init: Command.init}} + */ module.exports = { init: Command.init, }; @@ -216,4 +236,4 @@ global.hasBlockedPlayer = Command.hasBlockedPlayer; global.addBlockedPlayer = Command.addBlockedPlayer; global.removeBlockedPlayer = Command.removeBlockedPlayer; global.handleMessage = Command.handleMessage; -global.handlePrivateMessage = Command.handlePrivateMessage; \ No newline at end of file +global.handlePrivateMessage = Command.handlePrivateMessage; diff --git a/src/core/Constant.js b/src/core/Constant.js index 1f20594aa..f005d08a3 100644 --- a/src/core/Constant.js +++ b/src/core/Constant.js @@ -1,29 +1,29 @@ // Defines allowed datasource global.DATASOURCE = { - SQLITE: "sqlite", - JSON: "json" + SQLITE: 'sqlite', + JSON: 'json', }; // Effect global.EFFECT = { - BABY: ":baby:", - SMILEY: ":smiley:", - AWAITINGANSWER: ":clock10:", // may be deleted : is used to avoir interaction when the bot is awaiting an answer - DEAD: ":skull:", - SLEEPING: ":sleeping: ", - DRUNK: ":zany_face:", - FROZEN: ":cold_face:", - HURT: ":head_bandage:", - SICK: ":sick:", - LOCKED: ":lock:", - INJURED: ":dizzy_face:", - OCCUPIED: ":clock2:", - CONFOUNDED: ":confounded:" + BABY: ':baby:', + SMILEY: ':smiley:', + AWAITINGANSWER: ':clock10:', // may be deleted : is used to avoir interaction when the bot is awaiting an answer + DEAD: ':skull:', + SLEEPING: ':sleeping: ', + DRUNK: ':zany_face:', + FROZEN: ':cold_face:', + HURT: ':head_bandage:', + SICK: ':sick:', + LOCKED: ':lock:', + INJURED: ':dizzy_face:', + OCCUPIED: ':clock2:', + CONFOUNDED: ':confounded:', }; global.LANGUAGE = { - FRENCH : 'fr', - ENGLISH : 'en', + FRENCH: 'fr', + ENGLISH: 'en', }; // Object nature @@ -34,46 +34,46 @@ global.NATURE = { DEFENSE: 3, ATTACK: 4, HOSPITAL: 5, - MONEY: 6 + MONEY: 6, }; global.PERMISSION = { ROLE: { - BOTOWNER: 'owner', //is the owner of the bot - BADGEMANAGER: 'manager', //has the badge manager role - SUPPORT: 'support', //has the support role - ADMINISTRATOR: 'administrator', //has the admin permission in a server where the bot is. - ALL: 'all' - } + BOTOWNER: 'owner', // is the owner of the bot + BADGEMANAGER: 'manager', // has the badge manager role + SUPPORT: 'support', // has the support role + ADMINISTRATOR: 'administrator', // has the admin permission in a server where the bot is. + ALL: 'all', + }, }; global.REWARD_TYPES = { - PERSONAL_XP: "personalXP", - GUILD_XP: "guildXp", - MONEY: "money", - RANDOM_ITEM: "randomItem", - BADGE: "badge", - FULL_HEAL: "fullHeal", - PARTIAL_HEAL: "partialHeal", - ALTERATION: "alterationHeal" + PERSONAL_XP: 'personalXP', + GUILD_XP: 'guildXp', + MONEY: 'money', + RANDOM_ITEM: 'randomItem', + BADGE: 'badge', + FULL_HEAL: 'fullHeal', + PARTIAL_HEAL: 'partialHeal', + ALTERATION: 'alterationHeal', }; global.ITEMTYPE = { POTION: 'potions', WEAPON: 'weapons', ARMOR: 'armors', - OBJECT: 'objects' + OBJECT: 'objects', }; global.GUILD = { MAX_GUILD_MEMBER: 5, MAX_GUILDNAME_SIZE: 15, - MIN_GUILDNAME_SIZE: 2 + MIN_GUILDNAME_SIZE: 2, }; global.MENU_REACTION = { - ACCEPT: "✅", - DENY: "❌" + ACCEPT: '✅', + DENY: '❌', }; global.PROGRESSBARS_SIZE = 20; @@ -89,8 +89,8 @@ global.FIGHT = { POWERFUL_ATTACK: 2, IMPROVE_DEFENSE: 3, IMPROVE_SPEED: 4, - ULTIMATE_ATTACK: 5 - } + ULTIMATE_ATTACK: 5, + }, }; global.SHOP = { @@ -98,6 +98,6 @@ global.SHOP = { HOSPITAL: '🏥', HEART: '💗', MONEY_MOUTH: '🤑', - STAR: '⭐' + STAR: '⭐', }; diff --git a/src/core/Database.js b/src/core/Database.js index e364b154c..f243223c6 100644 --- a/src/core/Database.js +++ b/src/core/Database.js @@ -1,9 +1,11 @@ const fs = require('fs'); -const path = require("path"); +const path = require('path'); const Sequelize = require('sequelize'); +/** + * @class + */ class Database { - /** * @return {Promise} */ @@ -11,20 +13,20 @@ class Database { Database.sequelize = new Sequelize({ dialect: 'sqlite', storage: 'database/database.sqlite', - logging: false + logging: false, }); await Database.migrate(); - let modelsFiles = await fs.promises.readdir('src/core/models'); - for (let modelFile of modelsFiles) { - let modelName = modelFile.split('.')[0]; + const modelsFiles = await fs.promises.readdir('src/core/models'); + for (const modelFile of modelsFiles) { + const modelName = modelFile.split('.')[0]; global[modelName] = Database.sequelize['import'](`models/${modelName}`); } await Database.setAssociations(); await Database.populateJsonFilesTables([ - 'Armors', 'Weapons', 'Objects', 'Potions' + 'Armors', 'Weapons', 'Objects', 'Potions', ]); await Database.setEverybodyAsUnOccupied(); } @@ -36,9 +38,9 @@ class Database { const config = { force: false, table: 'migrations', - migrationsPath: 'database/migrations' + migrationsPath: 'database/migrations', }; - const { force, table, migrationsPath } = config; + const {force, table, migrationsPath} = config; const location = path.resolve(migrationsPath); const migrations = await new Promise((resolve, reject) => { fs.readdir(location, (err, files) => { @@ -46,56 +48,60 @@ class Database { return reject(err); } resolve(files - .map(x => x.match(/^(\d+).(.*?)\.sql$/)) - .filter(x => x !== null) - .map(x => ({ id: Number(x[1]), name: x[2], filename: x[0] })) + .map((x) => x.match(/^(\d+).(.*?)\.sql$/)) + .filter((x) => x !== null) + .map((x) => ({id: Number(x[1]), name: x[2], filename: x[0]})) .sort((a, b) => Math.sign(a.id - b.id))); }); }); if (!migrations.length) { throw new Error(`No migration files found in '${location}'.`); } - await Promise.all(migrations.map(migration => new Promise((resolve, reject) => { - const filename = path.join(location, migration.filename); - fs.readFile(filename, 'utf-8', (err, data) => { - if (err) { - return reject(err); - } - const [up, down] = data.split(/^--\s+?down\b/im); - if (!down) { - const message = `The ${migration.filename} file does not contain '-- Down' separator.`; - return reject(new Error(message)); - } - /* eslint-disable no-param-reassign */ - migration.up = up.replace(/^-- .*?$/gm, '').trim(); // Remove comments - migration.down = down.trim(); // and trim whitespaces - /* eslint-enable no-param-reassign */ - resolve(); - }); - }))); + await Promise.all( + migrations.map((migration) => new Promise((resolve, reject) => { + const filename = path.join(location, migration.filename); + fs.readFile(filename, 'utf-8', (err, data) => { + if (err) { + return reject(err); + } + const [up, down] = data.split(/^--\s+?down\b/im); + if (!down) { + const message = `The ${migration.filename} file does not contain '-- Down' separator.`; + return reject(new Error(message)); + } + /* eslint-disable no-param-reassign */ + migration.up = up.replace(/^-- .*?$/gm, '').trim(); // Remove comments + migration.down = down.trim(); // and trim whitespaces + /* eslint-enable no-param-reassign */ + resolve(); + }); + }))); await Database.sequelize.query(`CREATE TABLE IF NOT EXISTS "${table}" ( id INTEGER PRIMARY KEY, name TEXT NOT NULL, up TEXT NOT NULL, down TEXT NOT NULL )`); - let dbMigrations = await Database.sequelize.query(`SELECT id, name, up, down FROM "${table}" ORDER BY id ASC`); + const dbMigrations = await Database.sequelize.query( + `SELECT id, name, up, down FROM "${table}" ORDER BY id ASC`); - const lastMigrationId = dbMigrations[0].length ? dbMigrations[0][dbMigrations[0].length - 1].id : 0; + const lastMigrationId = dbMigrations[0].length ? + dbMigrations[0][dbMigrations[0].length - 1].id : + 0; for (const migration of migrations) { if (migration.id > lastMigrationId) { await Database.sequelize.query('BEGIN'); try { - let queries = migration.up.split((require('os')).EOL); + const queries = migration.up.split((require('os')).EOL); for (const entry of queries) { if (entry !== '') { Database.sequelize.query(entry); } } - await Database.sequelize.query(`INSERT INTO "${table}" (id, name, up, down) VALUES ("${migration.id}", "${migration.name}", "${migration.up}", "${migration.down}")`); + await Database.sequelize.query( + `INSERT INTO "${table}" (id, name, up, down) VALUES ("${migration.id}", "${migration.name}", "${migration.up}", "${migration.down}")`); await Database.sequelize.query('COMMIT'); - } - catch (err) { + } catch (err) { await Database.sequelize.query('ROLLBACK'); throw err; } @@ -109,75 +115,75 @@ class Database { static async setAssociations() { Entities.hasOne(Players, { foreignKey: 'entity_id', - as: 'Player' + as: 'Player', }); Players.belongsTo(Entities, { foreignKey: 'entity_id', - as: 'Entity' + as: 'Entity', }); Players.belongsTo(Guilds, { foreignKey: 'guild_id', - as: 'Guild' + as: 'Guild', }); Players.belongsTo(Guilds, { foreignKey: 'id', targetKey: 'chief_id', - as: 'Chief' + as: 'Chief', }); Players.hasOne(Inventories, { foreignKey: 'player_id', - as: 'Inventory' + as: 'Inventory', }); Guilds.hasMany(Players, { foreignKey: 'guild_id', - as: 'Members' + as: 'Members', }); Guilds.hasOne(Players, { foreignKey: 'id', sourceKey: 'chief_id', - as: 'Chief' + as: 'Chief', }); Inventories.belongsTo(Players, { foreignKey: 'player_id', - as: 'Player' + as: 'Player', }); Inventories.hasOne(Weapons, { foreignKey: 'id', sourceKey: 'weapon_id', - as: 'Weapon' + as: 'Weapon', }); Inventories.hasOne(Armors, { foreignKey: 'id', sourceKey: 'armor_id', - as: 'Armor' + as: 'Armor', }); Inventories.hasOne(Potions, { foreignKey: 'id', sourceKey: 'potion_id', - as: 'Potion' + as: 'Potion', }); Inventories.hasOne(Objects, { foreignKey: 'id', sourceKey: 'object_id', - as: 'ActiveObject' + as: 'ActiveObject', }); Inventories.hasOne(Objects, { foreignKey: 'id', sourceKey: 'backup_id', - as: 'BackupObject' + as: 'BackupObject', }); Events.hasMany(Possibilities, { foreignKey: 'event_id', - as: 'Possibilities' + as: 'Possibilities', }); Possibilities.belongsTo(Events, { foreignKey: 'event_id', - as: 'Event' + as: 'Event', }); } @@ -187,15 +193,16 @@ class Database { */ static async populateJsonFilesTables(folders) { for (const folder of folders) { - await global[folder].destroy({truncate: true}); - let files = await fs.promises.readdir(`ressources/text/${folder.toLowerCase()}`); + const files = await fs.promises.readdir( + `ressources/text/${folder.toLowerCase()}`); - let filesContent = []; + const filesContent = []; for (const file of files) { - let fileName = file.split('.')[0]; - let fileContent = (require(`ressources/text/${folder.toLowerCase()}/${file}`)); + const fileName = file.split('.')[0]; + const fileContent = (require( + `ressources/text/${folder.toLowerCase()}/${file}`)); fileContent.id = fileName; fileContent.fr = fileContent.translations.fr; fileContent.en = fileContent.translations.en; @@ -209,12 +216,12 @@ class Database { await Events.destroy({truncate: true}); await Possibilities.destroy({truncate: true}); - let files = await fs.promises.readdir(`ressources/text/events`); - let eventsContent = []; - let possibilitiesContent = []; + const files = await fs.promises.readdir(`ressources/text/events`); + const eventsContent = []; + const possibilitiesContent = []; for (const file of files) { - let fileName = file.split('.')[0]; - let fileContent = (require(`ressources/text/events/${file}`)); + const fileName = file.split('.')[0]; + const fileContent = (require(`ressources/text/events/${file}`)); fileContent.id = fileName; fileContent.fr = fileContent.translations.fr; @@ -223,7 +230,7 @@ class Database { for (const possibilityKey of Object.keys(fileContent.possibilities)) { for (const possibility of fileContent.possibilities[possibilityKey]) { - let possibilityContent = { + const possibilityContent = { possibilityKey: possibilityKey, lostTime: possibility.lostTime, health: possibility.health, @@ -249,14 +256,13 @@ class Database { */ static async setEverybodyAsUnOccupied() { Entities.update({ - effect: EFFECT.SMILEY + effect: EFFECT.SMILEY, }, { where: { - effect: EFFECT.AWAITINGANSWER - } + effect: EFFECT.AWAITINGANSWER, + }, }); } - } module.exports = { diff --git a/src/core/DraftBot.js b/src/core/DraftBot.js index 554b0a715..800461de6 100644 --- a/src/core/DraftBot.js +++ b/src/core/DraftBot.js @@ -1,5 +1,10 @@ +/** + * @class + */ class DraftBot { - + /** + * @return {Promise} + */ static async init() { await (require('core/JsonReader')).init({ folders: ['ressources/text/commands', 'ressources/text/models'], @@ -48,12 +53,19 @@ class DraftBot { // 'Ignore this message if you don\'t have the key to decrypt the file.'); // } // } - } +/** + * @type {{init: (function(): DraftBot)}} + */ module.exports = { - init: DraftBot.init + init: DraftBot.init, }; - +/** + * @type {module:"discord.js"} + */ global.discord = (require('discord.js')); +/** + * @type {module:"discord.js".Client} + */ global.client = new (require('discord.js')).Client(); diff --git a/src/core/Fight.js b/src/core/Fight.js index 7e956c383..89721ba15 100644 --- a/src/core/Fight.js +++ b/src/core/Fight.js @@ -10,78 +10,77 @@ * @param {FIGHT.ACTION} chargeAct */ class Fighter { - - /** + /** * @param entity */ - constructor(entity) { - this.entity = entity; - } + constructor(entity) { + this.entity = entity; + } - /** + /** * Calculate all the stats of a fighter. Must be done outside of the constructor because of asynchronicity * @return {Promise} */ - async calculateStats() { - let inv = this.entity.Player.Inventory; - let w = await inv.getWeapon(); - let a = await inv.getArmor(); - let p = await inv.getPotion(); - let o = await inv.getActiveObject(); - this.attack = this.entity.getCumulativeAttack(w, a, p, o); - this.defense = this.entity.getCumulativeDefense(w, a, p, o); - this.speed = this.entity.getCumulativeSpeed(w, a, p, o); - this.power = this.entity.getCumulativeHealth(this.entity.Player); - this.maxDefenseImprovement = FIGHT.MAX_DEFENSE_IMPROVEMENT; - this.maxSpeedImprovement = FIGHT.MAX_SPEED_IMPROVEMENT; - this.chargeTurns = -1; - this.chargeAct = null; - } - - /** + async calculateStats() { + const inv = this.entity.Player.Inventory; + const w = await inv.getWeapon(); + const a = await inv.getArmor(); + const p = await inv.getPotion(); + const o = await inv.getActiveObject(); + this.attack = this.entity.getCumulativeAttack(w, a, p, o); + this.defense = this.entity.getCumulativeDefense(w, a, p, o); + this.speed = this.entity.getCumulativeSpeed(w, a, p, o); + this.power = this.entity.getCumulativeHealth(this.entity.Player); + this.maxDefenseImprovement = FIGHT.MAX_DEFENSE_IMPROVEMENT; + this.maxSpeedImprovement = FIGHT.MAX_SPEED_IMPROVEMENT; + this.chargeTurns = -1; + this.chargeAct = null; + } + + /** * Drink the potion if it is a fight potion */ - async consumePotionIfNeeded() { - if ((await this.entity.Player.Inventory.getPotion()).isFightPotion()) { - this.entity.Player.Inventory.drinkPotion(); - this.entity.Player.Inventory.save(); - this.entity.Player.save(); - } + async consumePotionIfNeeded() { + if ((await this.entity.Player.Inventory.getPotion()).isFightPotion()) { + this.entity.Player.Inventory.drinkPotion(); + this.entity.Player.Inventory.save(); + this.entity.Player.save(); } + } - /** + /** * Improve defense of the fighter and update max improvement * @return {number} Added defense */ - improveDefense() { - this.maxDefenseImprovement += randInt(0, Math.round(this.maxDefenseImprovement / 2)); - this.defense += this.maxDefenseImprovement; - let r = this.maxDefenseImprovement; - this.maxDefenseImprovement = Math.floor(this.maxDefenseImprovement * 0.5); - return r; - } - - /** + improveDefense() { + this.maxDefenseImprovement += randInt(0, Math.round(this.maxDefenseImprovement / 2)); + this.defense += this.maxDefenseImprovement; + const r = this.maxDefenseImprovement; + this.maxDefenseImprovement = Math.floor(this.maxDefenseImprovement * 0.5); + return r; + } + + /** * Improve speed of the fighter and update max improvement * @return {number} Added speed */ - improveSpeed() { - this.maxSpeedImprovement += randInt(0, Math.round(this.maxSpeedImprovement / 2)); - this.speed += this.maxSpeedImprovement; - let r = this.maxSpeedImprovement; - this.maxSpeedImprovement = Math.floor(this.maxSpeedImprovement * 0.5); - return r; - } - - /** + improveSpeed() { + this.maxSpeedImprovement += randInt(0, Math.round(this.maxSpeedImprovement / 2)); + this.speed += this.maxSpeedImprovement; + const r = this.maxSpeedImprovement; + this.maxSpeedImprovement = Math.floor(this.maxSpeedImprovement * 0.5); + return r; + } + + /** * Make a player charge an action for a certain number of turns * @param {FIGHT.ACTION} action * @param {number} turns */ - chargeAction(action, turns) { - this.chargeTurns = turns; - this.chargeAct = action; - } + chargeAction(action, turns) { + this.chargeTurns = turns; + this.chargeAct = action; + } } /** @@ -91,13 +90,12 @@ class Fighter { * @param {Boolean} fullSuccess */ class FightActionResult { - - constructor() { - this.damage = 0; - this.defenseImprovement = 0; - this.speedImprovement = 0; - this.fullSuccess = false; - } + constructor() { + this.damage = 0; + this.defenseImprovement = 0; + this.speedImprovement = 0; + this.fullSuccess = false; + } } /** @@ -110,8 +108,7 @@ class FightActionResult { * @param {Number} points */ class Fight { - - /** + /** * * @param player1 * @param player2 @@ -119,546 +116,542 @@ class Fight { * @param {("fr"|"en")} language - Language to use in the response * @returns {Promise} */ - constructor(player1, player2, message, language) { - if (randInt(0, 1) === 0) { - this.fighters = [new Fighter(player1), new Fighter(player2)]; - } else { - this.fighters = [new Fighter(player2), new Fighter(player1)]; - } - this.turn = 0; - this.message = message; - this.language = language; - this.lastSummary = undefined; - this.actionMessages = undefined; + constructor(player1, player2, message, language) { + if (randInt(0, 1) === 0) { + this.fighters = [new Fighter(player1), new Fighter(player2)]; + } else { + this.fighters = [new Fighter(player2), new Fighter(player1)]; } + this.turn = 0; + this.message = message; + this.language = language; + this.lastSummary = undefined; + this.actionMessages = undefined; + } - /********************************************************** EXTERNAL MECHANICS FUNCTIONS **********************************************************/ + /** ******************************************************** EXTERNAL MECHANICS FUNCTIONS **********************************************************/ - /** + /** * Starts the fight. Is not called automatically. Also calculates stats, consume potions, block players and proceed to next turn. * @return {Promise} */ - async startFight() { - if (this.hasStarted()) { - throw new Error("The fight already started !"); - } else if (this.hasEnded()) { - throw new Error("The fight cannot be started twice !"); - } - for (let i = 0; i < this.fighters.length; i++) { - await this.fighters[i].calculateStats(); - await this.fighters[i].consumePotionIfNeeded(); - global.addBlockedPlayer(this.fighters[i].entity.discordUser_id, "fight"); - } - this.introduceFight(); - this.actionMessages = [ - await this.message.channel.send("_ _") - ]; - await this.nextTurn(); - }; + async startFight() { + if (this.hasStarted()) { + throw new Error('The fight already started !'); + } else if (this.hasEnded()) { + throw new Error('The fight cannot be started twice !'); + } + for (let i = 0; i < this.fighters.length; i++) { + await this.fighters[i].calculateStats(); + await this.fighters[i].consumePotionIfNeeded(); + global.addBlockedPlayer(this.fighters[i].entity.discordUser_id, 'fight'); + } + this.introduceFight(); + this.actionMessages = [ + await this.message.channel.send('_ _'), + ]; + await this.nextTurn(); + }; - /********************************************************** MESSAGE RELATED FUNCTIONS **********************************************************/ + /** ******************************************************** MESSAGE RELATED FUNCTIONS **********************************************************/ - /** + /** * Send the fight intro message */ - introduceFight() { - this.message.channel.send(format(JsonReader.commands.fight.getTranslation(this.language).intro, { - player1: this.fighters[0].entity.getMention(), - player2: this.fighters[1].entity.getMention() - })); - } - - /** + introduceFight() { + this.message.channel.send(format(JsonReader.commands.fight.getTranslation(this.language).intro, { + player1: this.fighters[0].entity.getMention(), + player2: this.fighters[1].entity.getMention(), + })); + } + + /** * Send the fight outro message */ - outroFight() { - let loser = this.getLoser(); - if (loser != null) { - this.message.channel.send(format(JsonReader.commands.fight.getTranslation(this.language).end.win, { - winner: this.getWinner().entity.getMention(), - loser: loser.entity.getMention(), - elo: this.elo, - points: this.points - })); - } else { - this.message.channel.send(format(JsonReader.commands.fight.getTranslation(this.language).end.draw, { - player1: this.fighters[0].entity.getMention(), - player2: this.fighters[1].entity.getMention() - })); - } + outroFight() { + const loser = this.getLoser(); + if (loser != null) { + this.message.channel.send(format(JsonReader.commands.fight.getTranslation(this.language).end.win, { + winner: this.getWinner().entity.getMention(), + loser: loser.entity.getMention(), + elo: this.elo, + points: this.points, + })); + } else { + this.message.channel.send(format(JsonReader.commands.fight.getTranslation(this.language).end.draw, { + player1: this.fighters[0].entity.getMention(), + player2: this.fighters[1].entity.getMention(), + })); } + } - /** + /** * Send the turn indications in order to choose an action * @return {Promise} */ - async sendTurnIndications() { - - let playingId = this.getPlayingFighter().entity.discordUser_id; - let fight = this; + async sendTurnIndications() { + const playingId = this.getPlayingFighter().entity.discordUser_id; + const fight = this; - let embed = new discord.MessageEmbed(); - /*embed.setThumbnail(await this.message.guild.members.cache.get(playingId).user.avatarURL()) + const embed = new discord.MessageEmbed(); + /* embed.setThumbnail(await this.message.guild.members.cache.get(playingId).user.avatarURL()) .setTitle(format(JsonReader.commands.fight.getTranslation(this.language).turnIndicationsTitle, {pseudo: await this.getPlayingFighter().entity.Player.getPseudo(this.language)})) .setDescription(JsonReader.commands.fight.getTranslation(this.language).turnIndicationsDescription);*/ - embed.setDescription(JsonReader.commands.fight.getTranslation(this.language).turnIndicationsDescription) - .setAuthor(format(JsonReader.commands.fight.getTranslation(this.language).turnIndicationsTitle, {pseudo: await this.getPlayingFighter().entity.Player.getPseudo(this.language)}), - await this.message.guild.members.cache.get(playingId).user.avatarURL()); - this.message.channel.send(embed) - .then(async function (message) { - - const filter = (reaction, user) => { - return user.id === playingId; - }; - - const collector = message.createReactionCollector(filter, {time: 30000}); - - collector.on('collect', async (reaction) => { - switch (reaction.emoji.name) { - case "⚔": - await message.delete().catch(); - await fight.useAction(FIGHT.ACTION.SIMPLE_ATTACK); - break; - case "🗡": - await message.delete().catch(); - await fight.useAction(FIGHT.ACTION.QUICK_ATTACK); - break; - case "🪓": - await message.delete().catch(); - await fight.useAction(FIGHT.ACTION.POWERFUL_ATTACK); - break; - case "🛡": - await message.delete().catch(); - await fight.useAction(FIGHT.ACTION.IMPROVE_DEFENSE); - break; - case "🚀": - await message.delete().catch(); - await fight.useAction(FIGHT.ACTION.IMPROVE_SPEED); - break; - case "💣": - await message.delete().catch(); - await fight.useAction(FIGHT.ACTION.ULTIMATE_ATTACK); - break; - default: - return; - } - }); - - collector.on('end', () => { - if (!message.deleted) { - message.delete().catch(); - fight.getPlayingFighter().power = 0; - fight.endFight(); - } - }); - - try { - await message.react("⚔"); - await message.react("🗡"); - await message.react("🪓"); - await message.react("💣"); - await message.react("🛡"); - await message.react("🚀"); - } catch (e) { - } - }); - } + embed.setDescription(JsonReader.commands.fight.getTranslation(this.language).turnIndicationsDescription) + .setAuthor(format(JsonReader.commands.fight.getTranslation(this.language).turnIndicationsTitle, {pseudo: await this.getPlayingFighter().entity.Player.getPseudo(this.language)}), + await this.message.guild.members.cache.get(playingId).user.avatarURL()); + this.message.channel.send(embed) + .then(async function(message) { + const filter = (reaction, user) => { + return user.id === playingId; + }; + + const collector = message.createReactionCollector(filter, {time: 30000}); + + collector.on('collect', async (reaction) => { + switch (reaction.emoji.name) { + case '⚔': + await message.delete().catch(); + await fight.useAction(FIGHT.ACTION.SIMPLE_ATTACK); + break; + case '🗡': + await message.delete().catch(); + await fight.useAction(FIGHT.ACTION.QUICK_ATTACK); + break; + case '🪓': + await message.delete().catch(); + await fight.useAction(FIGHT.ACTION.POWERFUL_ATTACK); + break; + case '🛡': + await message.delete().catch(); + await fight.useAction(FIGHT.ACTION.IMPROVE_DEFENSE); + break; + case '🚀': + await message.delete().catch(); + await fight.useAction(FIGHT.ACTION.IMPROVE_SPEED); + break; + case '💣': + await message.delete().catch(); + await fight.useAction(FIGHT.ACTION.ULTIMATE_ATTACK); + break; + default: + return; + } + }); - /** + collector.on('end', () => { + if (!message.deleted) { + message.delete().catch(); + fight.getPlayingFighter().power = 0; + fight.endFight(); + } + }); + + try { + await message.react('⚔'); + await message.react('🗡'); + await message.react('🪓'); + await message.react('💣'); + await message.react('🛡'); + await message.react('🚀'); + } catch (e) { + } + }); + } + + /** * Get summarize embed message * @param {Fight} fight * @param {Fighter} attacker * @param {Fighter} defender * @return {Promise<{embed: {}}>} */ - async getSummarizeEmbed(fight, attacker, defender) { - return { - embed: { - title: JsonReader.commands.fight.getTranslation(this.language).summarize.title, - description: + async getSummarizeEmbed(fight, attacker, defender) { + return { + embed: { + title: JsonReader.commands.fight.getTranslation(this.language).summarize.title, + description: JsonReader.commands.fight.getTranslation(this.language).summarize.intro + format(JsonReader.commands.fight.getTranslation(this.language).summarize.attacker, { - pseudo: await attacker.entity.Player.getPseudo(this.language), - charging: attacker.chargeTurns > 0 ? JsonReader.commands.fight.getTranslation(this.language).actions.chargingEmote : "" + pseudo: await attacker.entity.Player.getPseudo(this.language), + charging: attacker.chargeTurns > 0 ? JsonReader.commands.fight.getTranslation(this.language).actions.chargingEmote : '', }) + format(JsonReader.commands.fight.getTranslation(this.language).summarize.stats, { - power: attacker.power, - attack: attacker.attack, - defense: attacker.defense, - speed: attacker.speed + power: attacker.power, + attack: attacker.attack, + defense: attacker.defense, + speed: attacker.speed, }) + format(JsonReader.commands.fight.getTranslation(this.language).summarize.defender, { - pseudo: await defender.entity.Player.getPseudo(this.language), - charging: defender.chargeTurns > 0 ? JsonReader.commands.fight.getTranslation(this.language).actions.chargingEmote : "" + pseudo: await defender.entity.Player.getPseudo(this.language), + charging: defender.chargeTurns > 0 ? JsonReader.commands.fight.getTranslation(this.language).actions.chargingEmote : '', }) + format(JsonReader.commands.fight.getTranslation(this.language).summarize.stats, { - power: defender.power, - attack: defender.attack, - defense: defender.defense, - speed: defender.speed + power: defender.power, + attack: defender.attack, + defense: defender.defense, + speed: defender.speed, }), - } - }; - } + }, + }; + } - /** + /** * Summarize the fight * @return {Promise} */ - async summarizeFight() { - let attacker = this.getPlayingFighter(); - let defender = this.getDefendingFighter(); - - if (this.lastSummary === undefined) { - this.lastSummary = await this.message.channel.send(await this.getSummarizeEmbed(this, attacker, defender)); - } else { - await this.lastSummary.edit(await this.getSummarizeEmbed(this, attacker, defender)); - } + async summarizeFight() { + const attacker = this.getPlayingFighter(); + const defender = this.getDefendingFighter(); + + if (this.lastSummary === undefined) { + this.lastSummary = await this.message.channel.send(await this.getSummarizeEmbed(this, attacker, defender)); + } else { + await this.lastSummary.edit(await this.getSummarizeEmbed(this, attacker, defender)); } + } - /** + /** * Send the result of the action * @param {FIGHT.ACTION} action * @param {FightActionResult} fightActionResult * @return {Promise} */ - async sendActionMessage(action, fightActionResult) { - - let msg = JsonReader.commands.fight.getTranslation(this.language).actions.intro; - let player = await this.getPlayingFighter().entity.Player.getPseudo(this.language); - let section; - switch (action) { - case FIGHT.ACTION.IMPROVE_DEFENSE: - await this.addActionMessage(format(msg + JsonReader.commands.fight.getTranslation(this.language).actions.defense, { - emote: JsonReader.commands.fight.getTranslation(this.language).actions.defenseEmote, - defense: fightActionResult.defenseImprovement, - player: player - })); - return; - case FIGHT.ACTION.IMPROVE_SPEED: - await this.addActionMessage(format(msg + JsonReader.commands.fight.getTranslation(this.language).actions.speed, { - emote: JsonReader.commands.fight.getTranslation(this.language).actions.speedEmote, - speed: fightActionResult.speedImprovement, - player: player - })); - return; - case FIGHT.ACTION.POWERFUL_ATTACK: - section = JsonReader.commands.fight.getTranslation(this.language).actions.attacks.powerful; - break; - case FIGHT.ACTION.QUICK_ATTACK: - section = JsonReader.commands.fight.getTranslation(this.language).actions.attacks.quick; - break; - case FIGHT.ACTION.SIMPLE_ATTACK: - section = JsonReader.commands.fight.getTranslation(this.language).actions.attacks.simple; - break; - case FIGHT.ACTION.ULTIMATE_ATTACK: - section = JsonReader.commands.fight.getTranslation(this.language).actions.attacks.ultimate; - break; - default: - return; - } - let resMsg; - if (fightActionResult.damage === 0) { - resMsg = "failed"; - } else if (fightActionResult.fullSuccess) { - resMsg = "succeed"; - } else { - resMsg = "notGood"; - } - let resultSection = JsonReader.commands.fight.getTranslation(this.language).actions.attacksResults[resMsg]; - msg += resultSection[randInt(0, resultSection.length - 1)]; - await this.addActionMessage(format(msg, {emote: section.emote, player: player, attack: section.name}) - + section.end[resMsg] - + format(JsonReader.commands.fight.getTranslation(this.language).actions.damages, {damages: fightActionResult.damage})); + async sendActionMessage(action, fightActionResult) { + let msg = JsonReader.commands.fight.getTranslation(this.language).actions.intro; + const player = await this.getPlayingFighter().entity.Player.getPseudo(this.language); + let section; + switch (action) { + case FIGHT.ACTION.IMPROVE_DEFENSE: + await this.addActionMessage(format(msg + JsonReader.commands.fight.getTranslation(this.language).actions.defense, { + emote: JsonReader.commands.fight.getTranslation(this.language).actions.defenseEmote, + defense: fightActionResult.defenseImprovement, + player: player, + })); + return; + case FIGHT.ACTION.IMPROVE_SPEED: + await this.addActionMessage(format(msg + JsonReader.commands.fight.getTranslation(this.language).actions.speed, { + emote: JsonReader.commands.fight.getTranslation(this.language).actions.speedEmote, + speed: fightActionResult.speedImprovement, + player: player, + })); + return; + case FIGHT.ACTION.POWERFUL_ATTACK: + section = JsonReader.commands.fight.getTranslation(this.language).actions.attacks.powerful; + break; + case FIGHT.ACTION.QUICK_ATTACK: + section = JsonReader.commands.fight.getTranslation(this.language).actions.attacks.quick; + break; + case FIGHT.ACTION.SIMPLE_ATTACK: + section = JsonReader.commands.fight.getTranslation(this.language).actions.attacks.simple; + break; + case FIGHT.ACTION.ULTIMATE_ATTACK: + section = JsonReader.commands.fight.getTranslation(this.language).actions.attacks.ultimate; + break; + default: + return; } - - /** + let resMsg; + if (fightActionResult.damage === 0) { + resMsg = 'failed'; + } else if (fightActionResult.fullSuccess) { + resMsg = 'succeed'; + } else { + resMsg = 'notGood'; + } + const resultSection = JsonReader.commands.fight.getTranslation(this.language).actions.attacksResults[resMsg]; + msg += resultSection[randInt(0, resultSection.length - 1)]; + await this.addActionMessage(format(msg, {emote: section.emote, player: player, attack: section.name}) + + section.end[resMsg] + + format(JsonReader.commands.fight.getTranslation(this.language).actions.damages, {damages: fightActionResult.damage})); + } + + /** * Add the action to an action message * @param {string} msg * @return {Promise} */ - async addActionMessage(msg) { - let amsg = this.actionMessages[this.actionMessages.length - 1]; - if (amsg.content.length + msg.length > 1950) { - await this.lastSummary.delete(); - this.lastSummary = undefined; - amsg = await this.message.channel.send(msg); - this.actionMessages.push(amsg); - } else if (amsg.content === "_ _") { - await amsg.edit(msg); - } else { - await amsg.edit(amsg.content + "\n" + msg); - } + async addActionMessage(msg) { + let amsg = this.actionMessages[this.actionMessages.length - 1]; + if (amsg.content.length + msg.length > 1950) { + await this.lastSummary.delete(); + this.lastSummary = undefined; + amsg = await this.message.channel.send(msg); + this.actionMessages.push(amsg); + } else if (amsg.content === '_ _') { + await amsg.edit(msg); + } else { + await amsg.edit(amsg.content + '\n' + msg); } + } - /** + /** * Scroll the messages down if needed * @return {Promise} */ - async scrollIfNeeded() { - let messages = await this.message.channel.messages.fetch({limit: 1}); - if (this.lastSummary !== undefined && messages.first().createdTimestamp !== this.lastSummary.createdTimestamp) { - for (let i = 0; i < this.actionMessages.length; ++i) { - let content = this.actionMessages[i].content; - await this.actionMessages[i].delete(); - this.actionMessages[i] = await this.message.channel.send(content); - } - await this.lastSummary.delete(); - this.lastSummary = undefined; - await this.summarizeFight(); - } + async scrollIfNeeded() { + const messages = await this.message.channel.messages.fetch({limit: 1}); + if (this.lastSummary !== undefined && messages.first().createdTimestamp !== this.lastSummary.createdTimestamp) { + for (let i = 0; i < this.actionMessages.length; ++i) { + const content = this.actionMessages[i].content; + await this.actionMessages[i].delete(); + this.actionMessages[i] = await this.message.channel.send(content); + } + await this.lastSummary.delete(); + this.lastSummary = undefined; + await this.summarizeFight(); } + } - /********************************************************** INTERNAL MECHANICS FUNCTIONS **********************************************************/ + /** ******************************************************** INTERNAL MECHANICS FUNCTIONS **********************************************************/ - /** + /** * Proceed to next turn or end the fight if there is a loser or the max turn is reached * @return {Promise} */ - async nextTurn() { - this.turn++; - if (this.getLoser() != null || this.turn >= FIGHT.MAX_TURNS) { - this.endFight(); - return; - } - let playing = this.getPlayingFighter(); - if (playing.chargeTurns > -1) { - playing.chargeTurns--; - } - await this.scrollIfNeeded(); - if (playing.chargeTurns === 0) { - await this.useAction(playing.chargeAct, true); - } else if (playing.chargeTurns > 0) { - await this.nextTurn(); - } else { - await this.summarizeFight(); - await this.sendTurnIndications(); - } + async nextTurn() { + this.turn++; + if (this.getLoser() != null || this.turn >= FIGHT.MAX_TURNS) { + this.endFight(); + return; + } + const playing = this.getPlayingFighter(); + if (playing.chargeTurns > -1) { + playing.chargeTurns--; } + await this.scrollIfNeeded(); + if (playing.chargeTurns === 0) { + await this.useAction(playing.chargeAct, true); + } else if (playing.chargeTurns > 0) { + await this.nextTurn(); + } else { + await this.summarizeFight(); + await this.sendTurnIndications(); + } + } - /** + /** * End the fight. Change fighters' score if there is a loser and unblock players */ - endFight() { - if (!this.hasStarted()) { - throw new Error("The fight has not started yet !"); - } else if (this.hasEnded()) { - throw new Error("The fight already ended !"); - } - let loser = this.getLoser(); - if (loser != null) { - this.calculateElo(); - this.calculatePoints(); - loser.entity.Player.addScore(-this.points); - loser.entity.Player.save(); - let winner = this.getWinner(); - winner.entity.Player.addScore(this.points); - winner.entity.Player.save(); - } - for (let i = 0; i < this.fighters.length; i++) { - global.removeBlockedPlayer(this.fighters[i].entity.discordUser_id); - } - if (this.lastSummary !== undefined) { - this.lastSummary.delete({timeout: 5000}).catch(); - } - this.outroFight(); - this.turn = -1; + endFight() { + if (!this.hasStarted()) { + throw new Error('The fight has not started yet !'); + } else if (this.hasEnded()) { + throw new Error('The fight already ended !'); + } + const loser = this.getLoser(); + if (loser != null) { + this.calculateElo(); + this.calculatePoints(); + loser.entity.Player.addScore(-this.points); + loser.entity.Player.save(); + const winner = this.getWinner(); + winner.entity.Player.addScore(this.points); + winner.entity.Player.save(); + } + for (let i = 0; i < this.fighters.length; i++) { + global.removeBlockedPlayer(this.fighters[i].entity.discordUser_id); } + if (this.lastSummary !== undefined) { + this.lastSummary.delete({timeout: 5000}).catch(); + } + this.outroFight(); + this.turn = -1; + } - /** + /** * Makes the playing fighter use an action * @param {FIGHT.ACTION} action * @param {Boolean} charged If used after a charge * @return {Promise} */ - async useAction(action, charged = false) { - - let success = Math.random(); - let attacker = this.getPlayingFighter(); - let defender = this.getDefendingFighter(); - let far = new FightActionResult(); - let powerChanger; - - switch (action) { - case FIGHT.ACTION.QUICK_ATTACK: - powerChanger = 0.1; - if (defender.speed > attacker.speed && success < 0.1) { - powerChanger = 0.6; - } else if (defender.speed < attacker.speed && success < 0.95) { - powerChanger = 0.65; - } - far.damage = Math.round(attacker.attack * powerChanger - Math.round(defender.defense * 0.1)); - far.fullSuccess = far.damage >= attacker.attack - defender.power; - break; - - case FIGHT.ACTION.SIMPLE_ATTACK: - powerChanger = 0.1; - if ((defender.speed > attacker.speed && success <= 0.6) || (defender.speed < attacker.speed && success < 0.8)) { - powerChanger = 1.0; - } else if ((defender.speed > attacker.speed && success <= 0.9)) { - powerChanger = 0.5; - } - far.damage = Math.round(attacker.attack * powerChanger - defender.defense); - far.fullSuccess = far.damage >= 100; - break; - - case FIGHT.ACTION.POWERFUL_ATTACK: - powerChanger = 0.0; - if ((defender.speed > attacker.speed && success <= 0.15) || (defender.speed < attacker.speed && success < 0.4)) { - powerChanger = 1.4; - } else if ((defender.speed > attacker.speed && success <= 0.5) || (defender.speed < attacker.speed && success < 0.7)) { - powerChanger = 2.15; - } - if (powerChanger > 1) { - attacker.speed = Math.round(attacker.speed * 0.75); - } else { - attacker.speed = Math.round(attacker.speed * 0.9); - } - far.damage = Math.round(attacker.attack * powerChanger - Math.round(defender.defense * 2.5)); - far.fullSuccess = powerChanger === 2; - break; - - case FIGHT.ACTION.IMPROVE_DEFENSE: - far.defenseImprovement = attacker.improveDefense(); - break; - - case FIGHT.ACTION.IMPROVE_SPEED: - far.speedImprovement = attacker.improveSpeed(); - break; - - case FIGHT.ACTION.ULTIMATE_ATTACK: - if (!charged) { - await this.addActionMessage(format(JsonReader.commands.fight.getTranslation(this.language).actions.intro + JsonReader.commands.fight.getTranslation(this.language).actions.charging, { - emote: JsonReader.commands.fight.getTranslation(this.language).actions.chargingEmote, - player: await attacker.entity.Player.getPseudo(this.language) - })); - attacker.chargeAction(FIGHT.ACTION.ULTIMATE_ATTACK, 1); - await this.nextTurn(); - return; - } - if ((defender.speed < attacker.speed && success <= 0.1) || (defender.speed > attacker.speed && success < 0.5)) { - far.damage = Math.round(2.0 * defender.power / 3.0); - far.fullSuccess = true; - } else { - far.damage = 0; - far.fullSuccess = false; - } - break; - - default: - return; + async useAction(action, charged = false) { + const success = Math.random(); + const attacker = this.getPlayingFighter(); + const defender = this.getDefendingFighter(); + const far = new FightActionResult(); + let powerChanger; + + switch (action) { + case FIGHT.ACTION.QUICK_ATTACK: + powerChanger = 0.1; + if (defender.speed > attacker.speed && success < 0.1) { + powerChanger = 0.6; + } else if (defender.speed < attacker.speed && success < 0.95) { + powerChanger = 0.65; } - if (far.damage > 0) { - defender.power -= far.damage; - if (defender.power < 0) { - defender.power = 0; - } + far.damage = Math.round(attacker.attack * powerChanger - Math.round(defender.defense * 0.1)); + far.fullSuccess = far.damage >= attacker.attack - defender.power; + break; + + case FIGHT.ACTION.SIMPLE_ATTACK: + powerChanger = 0.1; + if ((defender.speed > attacker.speed && success <= 0.6) || (defender.speed < attacker.speed && success < 0.8)) { + powerChanger = 1.0; + } else if ((defender.speed > attacker.speed && success <= 0.9)) { + powerChanger = 0.5; + } + far.damage = Math.round(attacker.attack * powerChanger - defender.defense); + far.fullSuccess = far.damage >= 100; + break; + + case FIGHT.ACTION.POWERFUL_ATTACK: + powerChanger = 0.0; + if ((defender.speed > attacker.speed && success <= 0.15) || (defender.speed < attacker.speed && success < 0.4)) { + powerChanger = 1.4; + } else if ((defender.speed > attacker.speed && success <= 0.5) || (defender.speed < attacker.speed && success < 0.7)) { + powerChanger = 2.15; + } + if (powerChanger > 1) { + attacker.speed = Math.round(attacker.speed * 0.75); + } else { + attacker.speed = Math.round(attacker.speed * 0.9); + } + far.damage = Math.round(attacker.attack * powerChanger - Math.round(defender.defense * 2.5)); + far.fullSuccess = powerChanger === 2; + break; + + case FIGHT.ACTION.IMPROVE_DEFENSE: + far.defenseImprovement = attacker.improveDefense(); + break; + + case FIGHT.ACTION.IMPROVE_SPEED: + far.speedImprovement = attacker.improveSpeed(); + break; + + case FIGHT.ACTION.ULTIMATE_ATTACK: + if (!charged) { + await this.addActionMessage(format(JsonReader.commands.fight.getTranslation(this.language).actions.intro + JsonReader.commands.fight.getTranslation(this.language).actions.charging, { + emote: JsonReader.commands.fight.getTranslation(this.language).actions.chargingEmote, + player: await attacker.entity.Player.getPseudo(this.language), + })); + attacker.chargeAction(FIGHT.ACTION.ULTIMATE_ATTACK, 1); + await this.nextTurn(); + return; + } + if ((defender.speed < attacker.speed && success <= 0.1) || (defender.speed > attacker.speed && success < 0.5)) { + far.damage = Math.round(2.0 * defender.power / 3.0); + far.fullSuccess = true; } else { - far.damage = 0; + far.damage = 0; + far.fullSuccess = false; } - await this.sendActionMessage(action, far); - await this.nextTurn(); + break; + + default: + return; + } + if (far.damage > 0) { + defender.power -= far.damage; + if (defender.power < 0) { + defender.power = 0; + } + } else { + far.damage = 0; } + await this.sendActionMessage(action, far); + await this.nextTurn(); + } - /** + /** * Calculate elo of the fight and set the attribute elo */ - calculateElo() { - let loser = this.getLoser(); - let winner = this.getWinner(); - if (loser !== null && winner !== null && winner.entity.Player.score !== 0) { - this.elo = Math.round((loser.entity.Player.score / winner.entity.Player.score) * 100) / 100; - } else { - this.elo = 0; - } + calculateElo() { + const loser = this.getLoser(); + const winner = this.getWinner(); + if (loser !== null && winner !== null && winner.entity.Player.score !== 0) { + this.elo = Math.round((loser.entity.Player.score / winner.entity.Player.score) * 100) / 100; + } else { + this.elo = 0; } + } - /** + /** * Calculate points of the fight based on elo and set the attribute points */ - calculatePoints() { - let loser = this.getLoser(); - if (loser !== null) { - this.points = Math.round(100 + 10 * loser.entity.Player.level * this.elo); - if (this.points > 2000) { - this.points = Math.round(2000 - randInt(5, 1000)); - } - } else { - this.points = 0; - } + calculatePoints() { + const loser = this.getLoser(); + if (loser !== null) { + this.points = Math.round(100 + 10 * loser.entity.Player.level * this.elo); + if (this.points > 2000) { + this.points = Math.round(2000 - randInt(5, 1000)); + } + } else { + this.points = 0; } + } - /********************************************************** GETTERS **********************************************************/ + /** ******************************************************** GETTERS **********************************************************/ - /** + /** * @return {boolean} */ - hasStarted() { - return this.turn !== 0; - } + hasStarted() { + return this.turn !== 0; + } - /** + /** * @return {boolean} */ - hasEnded() { - return this.turn === -1; - } + hasEnded() { + return this.turn === -1; + } - /** + /** * @return {boolean} If the fight is currently running */ - isRunning() { - return this.hasStarted() && !this.hasEnded(); - } + isRunning() { + return this.hasStarted() && !this.hasEnded(); + } - /** + /** * Get the playing fighter or null if the fight is not running * @return {Fighter|null} */ - getPlayingFighter() { - return this.isRunning() ? this.fighters[(this.turn - 1) % 2] : null; - } + getPlayingFighter() { + return this.isRunning() ? this.fighters[(this.turn - 1) % 2] : null; + } - /** + /** * Get the defending fighter or null if the fight is not running * @return {Fighter|null} */ - getDefendingFighter() { - return this.isRunning() ? this.fighters[this.turn % 2] : null; - } + getDefendingFighter() { + return this.isRunning() ? this.fighters[this.turn % 2] : null; + } - /** + /** * Get the loser of the fight or null if there is none * @return {null|Fighter} */ - getLoser() { - for (let i = 0; i < this.fighters.length; ++i) { - if (this.fighters[i].power <= 0) { - return this.fighters[i]; - } - } - return null; + getLoser() { + for (let i = 0; i < this.fighters.length; ++i) { + if (this.fighters[i].power <= 0) { + return this.fighters[i]; + } } + return null; + } - /** + /** * Get the winner of the fight or null if there is none * @return {null|Fighter} */ - getWinner() { - let loser = this.getLoser(); - if (loser == null) { - return null; - } - return loser === this.fighters[0] ? this.fighters[1] : this.fighters[0]; + getWinner() { + const loser = this.getLoser(); + if (loser == null) { + return null; } + return loser === this.fighters[0] ? this.fighters[1] : this.fighters[0]; + } - /** + /** * @return {number} */ - getTurn() { - return this.turn; - } + getTurn() { + return this.turn; + } } -module.exports = Fight; \ No newline at end of file +module.exports = Fight; diff --git a/src/core/JsonReader.js b/src/core/JsonReader.js index 7e0d1a404..a9757efcf 100644 --- a/src/core/JsonReader.js +++ b/src/core/JsonReader.js @@ -1,19 +1,22 @@ const fs = require('fs'); +/** + * @class + */ class JsonReader { - /** * @param {String[]} folders - Folders to load * @param {String[]} files - Files to load * @return {Promise} */ static async init({folders, files}) { - if (folders !== undefined && typeof folders[Symbol.iterator] === "function") { + if (folders !== undefined && typeof folders[Symbol.iterator] === + 'function') { for (const folder of folders) { await JsonReader.loadFolder(folder); } } - if (files !== undefined && typeof files[Symbol.iterator] === "function") { + if (files !== undefined && typeof files[Symbol.iterator] === 'function') { for (const file of files) { await JsonReader.loadFile(file); } @@ -25,11 +28,12 @@ class JsonReader { * @return {Promise} */ static async loadFolder(folder) { - let files = await fs.promises.readdir(folder); + const files = await fs.promises.readdir(folder); for (const file of files) { if (!file.endsWith('.json')) continue; - let folderName = folder.split('/')[folder.split('/').length - 1]; - let fileName = (file.split('.')[0]).split('/')[(file.split('.')[0]).split( + const folderName = folder.split('/')[folder.split('/').length - 1]; + const fileName = (file.split('.')[0]).split('/')[(file.split( + '.')[0]).split( '/').length - 1]; if (this[folderName] === undefined) { this[folderName] = {}; @@ -47,7 +51,7 @@ class JsonReader { */ static async loadFile(file) { if (!file.endsWith('.json')) return; - let fileName = (file.split('.')[0]).split('/')[(file.split('.')[0]).split( + const fileName = (file.split('.')[0]).split('/')[(file.split('.')[0]).split( '/').length - 1]; this[fileName] = (require(file)); if (this[fileName].hasOwnProperty('translations')) { @@ -62,10 +66,15 @@ class JsonReader { static getTranslation(language) { return this.translations[language]; } - } +/** + * @type {{init: JsonReader.init}} + */ module.exports = { - init: JsonReader.init + init: JsonReader.init, }; +/** + * @type {JsonReader} + */ global.JsonReader = JsonReader; diff --git a/src/core/MessageError.js b/src/core/MessageError.js index ae8b7cc41..72c34b7c2 100644 --- a/src/core/MessageError.js +++ b/src/core/MessageError.js @@ -1,5 +1,4 @@ class MessageError { - /** * @param {module:"discord.js".Message} message - Message from the discord server * @param {String} permission @@ -9,8 +8,6 @@ class MessageError { * @return {Promise} */ static async canPerformCommand(message, language, permission, disallowEffects = null, entity = null) { - - if (permission === PERMISSION.ROLE.BADGEMANAGER) { if (!message.member.roles.cache.has(JsonReader.app.BADGE_MANAGER_ROLE)) { return await MessageError.permissionErrorMe(message, language, permission); @@ -24,7 +21,7 @@ class MessageError { } if (permission === PERMISSION.ROLE.ADMINISTRATOR) { - if (!message.member.hasPermission("ADMINISTRATOR")) { + if (!message.member.hasPermission('ADMINISTRATOR')) { return await MessageError.permissionErrorMe(message, language, permission); } } @@ -36,8 +33,10 @@ class MessageError { } // Check disallowEffects on entity - if(disallowEffects == null){return true;} - let disallowEffect = disallowEffects.indexOf(entity.effect); + if (disallowEffects == null) { + return true; + } + const disallowEffect = disallowEffects.indexOf(entity.effect); if (disallowEffect !== -1) { if (message.author.id === entity.discordUser_id) { return await MessageError.effectsErrorMe(message, language, entity, disallowEffects[disallowEffect]); @@ -56,31 +55,31 @@ class MessageError { * @return {Promise} */ static async permissionErrorMe(message, language, permission) { - let embed = new discord.MessageEmbed() - .setColor(JsonReader.bot.embed.error); + const embed = new discord.MessageEmbed() + .setColor(JsonReader.bot.embed.error); if (permission === PERMISSION.ROLE.BADGEMANAGER) { embed - .setAuthor(format(JsonReader.error.getTranslation(language).titlePermissionError, { pseudo: message.author.username }), message.author.displayAvatarURL()) - .setDescription(JsonReader.error.getTranslation(language).badgeManagerPermissionMissing); + .setAuthor(format(JsonReader.error.getTranslation(language).titlePermissionError, {pseudo: message.author.username}), message.author.displayAvatarURL()) + .setDescription(JsonReader.error.getTranslation(language).badgeManagerPermissionMissing); } if (permission === PERMISSION.ROLE.SUPPORT) { embed - .setAuthor(format(JsonReader.error.getTranslation(language).titlePermissionError, { pseudo: message.author.username }), message.author.displayAvatarURL()) - .setDescription(JsonReader.error.getTranslation(language).dmSupportPermissionMissing); + .setAuthor(format(JsonReader.error.getTranslation(language).titlePermissionError, {pseudo: message.author.username}), message.author.displayAvatarURL()) + .setDescription(JsonReader.error.getTranslation(language).dmSupportPermissionMissing); } if (permission === PERMISSION.ROLE.ADMINISTRATOR) { embed - .setAuthor(format(JsonReader.error.getTranslation(language).titlePermissionError, { pseudo: message.author.username }), message.author.displayAvatarURL()) - .setDescription(JsonReader.error.getTranslation(language).administratorPermissionMissing); + .setAuthor(format(JsonReader.error.getTranslation(language).titlePermissionError, {pseudo: message.author.username}), message.author.displayAvatarURL()) + .setDescription(JsonReader.error.getTranslation(language).administratorPermissionMissing); } if (permission === PERMISSION.ROLE.BOTOWNER) { embed - .setAuthor(format(JsonReader.error.getTranslation(language).titlePermissionError, { pseudo: message.author.username }), message.author.displayAvatarURL()) - .setDescription(JsonReader.error.getTranslation(language).botOwnerPermissionMissing); + .setAuthor(format(JsonReader.error.getTranslation(language).titlePermissionError, {pseudo: message.author.username}), message.author.displayAvatarURL()) + .setDescription(JsonReader.error.getTranslation(language).botOwnerPermissionMissing); } return await message.channel.send(embed); @@ -94,71 +93,71 @@ class MessageError { * @return {Promise} */ static async effectsErrorMe(message, language, entity, effect) { - let embed = new discord.MessageEmbed() - .setColor(JsonReader.bot.embed.error); + const embed = new discord.MessageEmbed() + .setColor(JsonReader.bot.embed.error); if (entity.effect === EFFECT.SMILEY) { embed - .setAuthor(format(JsonReader.error.getTranslation(language).titleMeIsFine, { pseudo: message.author.username }), message.author.displayAvatarURL()) - .setDescription(entity.effect + JsonReader.error.getTranslation(language).notPossibleWithoutStatus); + .setAuthor(format(JsonReader.error.getTranslation(language).titleMeIsFine, {pseudo: message.author.username}), message.author.displayAvatarURL()) + .setDescription(entity.effect + JsonReader.error.getTranslation(language).notPossibleWithoutStatus); } if (entity.effect === EFFECT.BABY) { embed - .setAuthor(format(JsonReader.error.getTranslation(language).titleMeIsBaby, { pseudo: message.author.username }), message.author.displayAvatarURL()) - .setDescription(entity.effect + JsonReader.error.getTranslation(language).meIsBaby); + .setAuthor(format(JsonReader.error.getTranslation(language).titleMeIsBaby, {pseudo: message.author.username}), message.author.displayAvatarURL()) + .setDescription(entity.effect + JsonReader.error.getTranslation(language).meIsBaby); } if (effect === EFFECT.DEAD) { embed - .setAuthor(format(JsonReader.error.getTranslation(language).titleMeIsDead, { pseudo: message.author.username }), message.author.displayAvatarURL()) - .setDescription(entity.effect + JsonReader.error.getTranslation(language).meIsDead); + .setAuthor(format(JsonReader.error.getTranslation(language).titleMeIsDead, {pseudo: message.author.username}), message.author.displayAvatarURL()) + .setDescription(entity.effect + JsonReader.error.getTranslation(language).meIsDead); } if (effect === EFFECT.SLEEPING) { embed - .setAuthor(format(JsonReader.error.getTranslation(language).titleMeIsSleeping, { pseudo: message.author.username }), message.author.displayAvatarURL()) - .setDescription(entity.effect + JsonReader.error.getTranslation(language).pleaseWaitForHeal); + .setAuthor(format(JsonReader.error.getTranslation(language).titleMeIsSleeping, {pseudo: message.author.username}), message.author.displayAvatarURL()) + .setDescription(entity.effect + JsonReader.error.getTranslation(language).pleaseWaitForHeal); } if (effect === EFFECT.DRUNK) { embed - .setAuthor(format(JsonReader.error.getTranslation(language).titleMeIsDrunk, { pseudo: message.author.username }), message.author.displayAvatarURL()) - .setDescription(entity.effect + JsonReader.error.getTranslation(language).pleaseWaitForHeal); + .setAuthor(format(JsonReader.error.getTranslation(language).titleMeIsDrunk, {pseudo: message.author.username}), message.author.displayAvatarURL()) + .setDescription(entity.effect + JsonReader.error.getTranslation(language).pleaseWaitForHeal); } if (effect === EFFECT.HURT) { embed - .setAuthor(format(JsonReader.error.getTranslation(language).titleMeIsHurt, { pseudo: message.author.username }), message.author.displayAvatarURL()) - .setDescription(entity.effect + JsonReader.error.getTranslation(language).pleaseWaitForHeal); + .setAuthor(format(JsonReader.error.getTranslation(language).titleMeIsHurt, {pseudo: message.author.username}), message.author.displayAvatarURL()) + .setDescription(entity.effect + JsonReader.error.getTranslation(language).pleaseWaitForHeal); } if (effect === EFFECT.SICK) { embed - .setAuthor(format(JsonReader.error.getTranslation(language).titleMeIsSick, { pseudo: message.author.username }), message.author.displayAvatarURL()) - .setDescription(entity.effect + JsonReader.error.getTranslation(language).pleaseWaitForHeal); + .setAuthor(format(JsonReader.error.getTranslation(language).titleMeIsSick, {pseudo: message.author.username}), message.author.displayAvatarURL()) + .setDescription(entity.effect + JsonReader.error.getTranslation(language).pleaseWaitForHeal); } if (effect === EFFECT.LOCKED) { embed - .setAuthor(format(JsonReader.error.getTranslation(language).titleMeIsLocked, { pseudo: message.author.username }), message.author.displayAvatarURL()) - .setDescription(entity.effect + JsonReader.error.getTranslation(language).pleaseWait); + .setAuthor(format(JsonReader.error.getTranslation(language).titleMeIsLocked, {pseudo: message.author.username}), message.author.displayAvatarURL()) + .setDescription(entity.effect + JsonReader.error.getTranslation(language).pleaseWait); } if (effect === EFFECT.INJURED) { embed - .setAuthor(format(JsonReader.error.getTranslation(language).titleMeIsInjured, { pseudo: message.author.username }), message.author.displayAvatarURL()) - .setDescription(entity.effect + JsonReader.error.getTranslation(language).pleaseWaitForHeal); + .setAuthor(format(JsonReader.error.getTranslation(language).titleMeIsInjured, {pseudo: message.author.username}), message.author.displayAvatarURL()) + .setDescription(entity.effect + JsonReader.error.getTranslation(language).pleaseWaitForHeal); } if (effect === EFFECT.OCCUPIED) { embed - .setAuthor(format(JsonReader.error.getTranslation(language).titleMeIsOccupied, { pseudo: message.author.username }), message.author.displayAvatarURL()) - .setDescription(entity.effect + JsonReader.error.getTranslation(language).pleaseWaitForHeal); + .setAuthor(format(JsonReader.error.getTranslation(language).titleMeIsOccupied, {pseudo: message.author.username}), message.author.displayAvatarURL()) + .setDescription(entity.effect + JsonReader.error.getTranslation(language).pleaseWaitForHeal); } if (effect === EFFECT.CONFOUNDED) { embed - .setAuthor(format(JsonReader.error.getTranslation(language).titleMeIsConfounded, { pseudo: message.author.username }), message.author.displayAvatarURL()) - .setDescription(entity.effect + JsonReader.error.getTranslation(language).pleaseWaitForHeal); + .setAuthor(format(JsonReader.error.getTranslation(language).titleMeIsConfounded, {pseudo: message.author.username}), message.author.displayAvatarURL()) + .setDescription(entity.effect + JsonReader.error.getTranslation(language).pleaseWaitForHeal); } return await message.channel.send(embed); @@ -168,82 +167,81 @@ class MessageError { * Handle error if needed */ static async errorPlayer(message, language, player) { - let embed = new discord.MessageEmbed() - .setColor(JsonReader.bot.embed.error) - .setTitle(format(JsonReader.error.getTranslation(language).title, { pseudo: message.author.username })) - .setAuthor(message.author.username, message.author.displayAvatarURL()); + const embed = new discord.MessageEmbed() + .setColor(JsonReader.bot.embed.error) + .setTitle(format(JsonReader.error.getTranslation(language).title, {pseudo: message.author.username})) + .setAuthor(message.author.username, message.author.displayAvatarURL()); if (player.effect === EFFECT.BABY) { embed - .setDescription(JsonReader.error.getTranslation(language).playerIsBaby, { - askedPseudo: player.getPseudo(language) - }); + .setDescription(JsonReader.error.getTranslation(language).playerIsBaby, { + askedPseudo: player.getPseudo(language), + }); } if (player.effect === EFFECT.DEAD) { embed - .setDescription(JsonReader.error.getTranslation(language).playerIsDead, { - askedPseudo: player.getPseudo(language) - }); + .setDescription(JsonReader.error.getTranslation(language).playerIsDead, { + askedPseudo: player.getPseudo(language), + }); } if (player.effect === EFFECT.SLEEPING) { embed - .setDescription(JsonReader.error.getTranslation(language).playerIsSleeping, { - askedPseudo: player.getPseudo(language) - }); + .setDescription(JsonReader.error.getTranslation(language).playerIsSleeping, { + askedPseudo: player.getPseudo(language), + }); } if (player.effect === EFFECT.DRUNK) { embed - .setDescription(JsonReader.error.getTranslation(language).playerIsDrunk, { - askedPseudo: player.getPseudo(language) - }); + .setDescription(JsonReader.error.getTranslation(language).playerIsDrunk, { + askedPseudo: player.getPseudo(language), + }); } if (player.effect === EFFECT.HURT) { embed - .setDescription(JsonReader.error.getTranslation(language).playerIsHurt, { - askedPseudo: player.getPseudo(language) - }); + .setDescription(JsonReader.error.getTranslation(language).playerIsHurt, { + askedPseudo: player.getPseudo(language), + }); } if (player.effect === EFFECT.SICK) { embed - .setDescription(JsonReader.error.getTranslation(language).playerIsSick, { - askedPseudo: player.getPseudo(language) - }); + .setDescription(JsonReader.error.getTranslation(language).playerIsSick, { + askedPseudo: player.getPseudo(language), + }); } if (player.effect === EFFECT.LOCKED) { embed - .setDescription(JsonReader.error.getTranslation(language).playerIsLocked, { - askedPseudo: player.getPseudo(language) - }); + .setDescription(JsonReader.error.getTranslation(language).playerIsLocked, { + askedPseudo: player.getPseudo(language), + }); } if (player.effect === EFFECT.INJURED) { embed - .setDescription(JsonReader.error.getTranslation(language).playerIsInjured, { - askedPseudo: player.getPseudo(language) - }); + .setDescription(JsonReader.error.getTranslation(language).playerIsInjured, { + askedPseudo: player.getPseudo(language), + }); } if (player.effect === EFFECT.OCCUPIED) { embed - .setDescription(JsonReader.error.getTranslation(language).playerIsOccupied, { - askedPseudo: player.getPseudo(language) - }); + .setDescription(JsonReader.error.getTranslation(language).playerIsOccupied, { + askedPseudo: player.getPseudo(language), + }); } if (player.effect === EFFECT.CONFOUNDED) { embed - .setDescription(JsonReader.error.getTranslation(language).playerIsCondounded, { - askedPseudo: player.getPseudo(language) - }); + .setDescription(JsonReader.error.getTranslation(language).playerIsCondounded, { + askedPseudo: player.getPseudo(language), + }); } return await message.channel.send(embed); } - } global.canPerformCommand = MessageError.canPerformCommand; diff --git a/src/core/Shop.js b/src/core/Shop.js index cea179df1..ddf9a1ce0 100644 --- a/src/core/Shop.js +++ b/src/core/Shop.js @@ -1,380 +1,375 @@ class Shop { - - constructor(customer, entity, message, language) { - this.customer = customer; - this.entity = entity; - this.message = message; - this.language = language; - } - - /** + constructor(customer, entity, message, language) { + this.customer = customer; + this.entity = entity; + this.message = message; + this.language = language; + } + + /** * Open the shop * @return {Promise} */ - async open() { - - const shopTranslations = JsonReader.commands.shop.getTranslation(this.language); - const numberOfPotions = await Potions.count(); - - //Formatting intems data into a string - const randomItem = format(shopTranslations.display, { - name: shopTranslations.permanentItems.randomItem.name, - price: shopTranslations.permanentItems.randomItem.price - }); - const healAlterations = format(shopTranslations.display, { - name: shopTranslations.permanentItems.healAlterations.name, - price: shopTranslations.permanentItems.healAlterations.price - }); - const regen = format(shopTranslations.display, { - name: shopTranslations.permanentItems.regen.name, - price: shopTranslations.permanentItems.regen.price - }); - const badge = format(shopTranslations.display, { - name: shopTranslations.permanentItems.badge.name, - price: shopTranslations.permanentItems.badge.price - }); - const guildXp = format(shopTranslations.display, { - name: shopTranslations.permanentItems.guildXp.name, - price: shopTranslations.permanentItems.guildXp.price - }); - - //Fetching potion infos - const potion = await Potions.findOne({ - where: { - id: Math.round((Date.now() / (1000 * 60 * 60 * 24)) % (numberOfPotions - 1) + 1) - } - }); - const potionPrice = Math.round((parseInt(JsonReader.values.raritiesValues[potion.rarity]) + parseInt(potion.power)) * 0.7); - - //Creating shop message - const message = await this.message.channel.send( - new discord.MessageEmbed() - .setColor(JsonReader.bot.embed.default) - .setTitle(shopTranslations.title) - .addField(shopTranslations.dailyItem, format(shopTranslations.display, { - name: potion.toString(this.language), - price: potionPrice - })) - .addField(shopTranslations.permanentItem, [randomItem, healAlterations, regen, badge, guildXp].join('\n') + format(shopTranslations.moneyQuantity, { - money: this.entity.Player.money - }))); - - //Creating maps to get shop items everywhere - this.dailyPotion = new Map().set('price', potionPrice).set('potion', potion); - this.shopItems = new Map() - .set(SHOP.QUESTION, shopTranslations.permanentItems.randomItem) - .set(SHOP.HOSPITAL, shopTranslations.permanentItems.healAlterations) - .set(SHOP.HEART, shopTranslations.permanentItems.regen) - .set(SHOP.MONEY_MOUTH, shopTranslations.permanentItems.badge) - .set(SHOP.STAR, shopTranslations.permanentItems.guildXp); - - //Asking for the user interaction - this.createItemSelector(message); - - //Adding reactions - await Promise.all([ - message.react(potion.getEmoji()), - message.react(SHOP.QUESTION), - message.react(SHOP.HOSPITAL), - message.react(SHOP.HEART), - message.react(SHOP.MONEY_MOUTH), - message.react(SHOP.STAR) - ]); - } - - /** + async open() { + const shopTranslations = JsonReader.commands.shop.getTranslation(this.language); + const numberOfPotions = await Potions.count(); + + // Formatting intems data into a string + const randomItem = format(shopTranslations.display, { + name: shopTranslations.permanentItems.randomItem.name, + price: shopTranslations.permanentItems.randomItem.price, + }); + const healAlterations = format(shopTranslations.display, { + name: shopTranslations.permanentItems.healAlterations.name, + price: shopTranslations.permanentItems.healAlterations.price, + }); + const regen = format(shopTranslations.display, { + name: shopTranslations.permanentItems.regen.name, + price: shopTranslations.permanentItems.regen.price, + }); + const badge = format(shopTranslations.display, { + name: shopTranslations.permanentItems.badge.name, + price: shopTranslations.permanentItems.badge.price, + }); + const guildXp = format(shopTranslations.display, { + name: shopTranslations.permanentItems.guildXp.name, + price: shopTranslations.permanentItems.guildXp.price, + }); + + // Fetching potion infos + const potion = await Potions.findOne({ + where: { + id: Math.round((Date.now() / (1000 * 60 * 60 * 24)) % (numberOfPotions - 1) + 1), + }, + }); + const potionPrice = Math.round((parseInt(JsonReader.values.raritiesValues[potion.rarity]) + parseInt(potion.power)) * 0.7); + + // Creating shop message + const message = await this.message.channel.send( + new discord.MessageEmbed() + .setColor(JsonReader.bot.embed.default) + .setTitle(shopTranslations.title) + .addField(shopTranslations.dailyItem, format(shopTranslations.display, { + name: potion.toString(this.language), + price: potionPrice, + })) + .addField(shopTranslations.permanentItem, [randomItem, healAlterations, regen, badge, guildXp].join('\n') + format(shopTranslations.moneyQuantity, { + money: this.entity.Player.money, + }))); + + // Creating maps to get shop items everywhere + this.dailyPotion = new Map().set('price', potionPrice).set('potion', potion); + this.shopItems = new Map() + .set(SHOP.QUESTION, shopTranslations.permanentItems.randomItem) + .set(SHOP.HOSPITAL, shopTranslations.permanentItems.healAlterations) + .set(SHOP.HEART, shopTranslations.permanentItems.regen) + .set(SHOP.MONEY_MOUTH, shopTranslations.permanentItems.badge) + .set(SHOP.STAR, shopTranslations.permanentItems.guildXp); + + // Asking for the user interaction + this.createItemSelector(message); + + // Adding reactions + await Promise.all([ + message.react(potion.getEmoji()), + message.react(SHOP.QUESTION), + message.react(SHOP.HOSPITAL), + message.react(SHOP.HEART), + message.react(SHOP.MONEY_MOUTH), + message.react(SHOP.STAR), + ]); + } + + /** * Collect reactions on a message. Used to get the item the customer wants * @param {*} message - The message where the collector will listen */ - async createItemSelector(message) { - const customer = this.customer; - const shop = this; - const collector = message.createReactionCollector((reaction, user) => { - return (user.id == customer.id); - }, { - time: 120000 - }); - - collector.on('collect', async (reaction) => { - collector.stop(); - shop.checkForMoney(message, reaction); - }); - } - - /** + async createItemSelector(message) { + const customer = this.customer; + const shop = this; + const collector = message.createReactionCollector((reaction, user) => { + return (user.id == customer.id); + }, { + time: 120000, + }); + + collector.on('collect', async (reaction) => { + collector.stop(); + shop.checkForMoney(message, reaction); + }); + } + + /** * Collect reactions on a message. Used to confirm purchase * @param {*} message - The message where the collector will listen */ - async createConfirmSelector(message) { - const customer = this.customer; - const shop = this; - const collector = message.createReactionCollector((reaction, user) => { - return (user.id == customer.id); - }, { - time: 120000 - }); - - collector.on('collect', async (reaction) => { - collector.stop(); - if (reaction.emoji.name === MENU_REACTION.ACCEPT) - shop.sellItem(message, reaction); - else if (reaction.emoji.name === MENU_REACTION.DENY) - shop.cancelPurchase(message); - }); - - collector.on('end', async (reaction) => { - if (!reaction.first()) { - shop.cancelPurchase(message); - } - }); - } - - /** + async createConfirmSelector(message) { + const customer = this.customer; + const shop = this; + const collector = message.createReactionCollector((reaction, user) => { + return (user.id == customer.id); + }, { + time: 120000, + }); + + collector.on('collect', async (reaction) => { + collector.stop(); + if (reaction.emoji.name === MENU_REACTION.ACCEPT) { + shop.sellItem(message, reaction); + } else if (reaction.emoji.name === MENU_REACTION.DENY) { + shop.cancelPurchase(message); + } + }); + + collector.on('end', async (reaction) => { + if (!reaction.first()) { + shop.cancelPurchase(message); + } + }); + } + + /** * @param {*} message - The message where the react event trigerred * @param {*} reaction - The reaction */ - async sellItem(message, reaction) { - const shopTranslations = JsonReader.commands.shop.getTranslation(this.language); - if (this.selectedItem.name) { //This is not a potion - if (this.selectedItem.name === shopTranslations.permanentItems.randomItem.name) { - await giveRandomItem(this.message.author, this.message.channel, this.language, this.entity); - } else if (this.selectedItem.name === shopTranslations.permanentItems.healAlterations.name) { - this.healAlterations(message); - } else if (this.selectedItem.name === shopTranslations.permanentItems.regen.name) { - this.regenPlayer(message); - } else if (this.selectedItem.name === shopTranslations.permanentItems.badge.name) { - this.giveMoneyMouthBadge(message); - } else if (this.selectedItem.name === shopTranslations.permanentItems.guildXp.name) { - await this.giveGuildXp(message); - } - } else { - this.giveDailyPotion(message); - } + async sellItem(message, reaction) { + const shopTranslations = JsonReader.commands.shop.getTranslation(this.language); + if (this.selectedItem.name) { // This is not a potion + if (this.selectedItem.name === shopTranslations.permanentItems.randomItem.name) { + await giveRandomItem(this.message.author, this.message.channel, this.language, this.entity); + } else if (this.selectedItem.name === shopTranslations.permanentItems.healAlterations.name) { + this.healAlterations(message); + } else if (this.selectedItem.name === shopTranslations.permanentItems.regen.name) { + this.regenPlayer(message); + } else if (this.selectedItem.name === shopTranslations.permanentItems.badge.name) { + this.giveMoneyMouthBadge(message); + } else if (this.selectedItem.name === shopTranslations.permanentItems.guildXp.name) { + await this.giveGuildXp(message); + } + } else { + this.giveDailyPotion(message); } + } - /** + /** * Check if user has enough money to buy * @param {*} message - The message where the react event trigerred * @param {*} reaction - The reaction */ - async checkForMoney(message, reaction) { - const potion = this.dailyPotion.get('potion'); - const potionPrice = this.dailyPotion.get('price'); - - if (this.shopItems.has(reaction.emoji.name)) { - - const item = this.shopItems.get(reaction.emoji.name); - if (this.canBuy(item.price)) { - await this.confirmPurchase(item.name, item.price, item.info); - this.selectedItem = item; - } else { - this.cannotBuy(item.price); - } - } else if (potion.getEmoji() === reaction.emoji.id || potion.getEmoji() === reaction.emoji.name) { - - if (this.canBuy(potionPrice)) { - await this.confirmPurchase(potion.toString(this.language), potionPrice, JsonReader.commands.shop.getTranslation(this.language).potion.info); - this.selectedItem = potion; - } else { - this.cannotBuy(potionPrice); - } - } + async checkForMoney(message, reaction) { + const potion = this.dailyPotion.get('potion'); + const potionPrice = this.dailyPotion.get('price'); + + if (this.shopItems.has(reaction.emoji.name)) { + const item = this.shopItems.get(reaction.emoji.name); + if (this.canBuy(item.price)) { + await this.confirmPurchase(item.name, item.price, item.info); + this.selectedItem = item; + } else { + this.cannotBuy(item.price); + } + } else if (potion.getEmoji() === reaction.emoji.id || potion.getEmoji() === reaction.emoji.name) { + if (this.canBuy(potionPrice)) { + await this.confirmPurchase(potion.toString(this.language), potionPrice, JsonReader.commands.shop.getTranslation(this.language).potion.info); + this.selectedItem = potion; + } else { + this.cannotBuy(potionPrice); + } } + } - /** + /** * @param {*} name - The item name * @param {*} price - The item price * @param {*} info - The info to display while trying to buy the item */ - async confirmPurchase(name, price, info) { - let confirmEmbed = new discord.MessageEmbed() - .setColor(JsonReader.bot.embed.default) - .setAuthor(format(JsonReader.commands.shop.getTranslation(this.language).confirm, { - pseudo: this.customer.username - }), this.customer.displayAvatarURL()) - .setDescription("\n\u200b\n" + format(JsonReader.commands.shop.getTranslation(this.language).display, { - name: name, - price: price - }) + info); - - const confirmMessage = await this.message.channel.send(confirmEmbed); - this.createConfirmSelector(confirmMessage); - - await Promise.all([ - confirmMessage.react(MENU_REACTION.ACCEPT), - confirmMessage.react(MENU_REACTION.DENY) - ]); - } - - /** + async confirmPurchase(name, price, info) { + const confirmEmbed = new discord.MessageEmbed() + .setColor(JsonReader.bot.embed.default) + .setAuthor(format(JsonReader.commands.shop.getTranslation(this.language).confirm, { + pseudo: this.customer.username, + }), this.customer.displayAvatarURL()) + .setDescription('\n\u200b\n' + format(JsonReader.commands.shop.getTranslation(this.language).display, { + name: name, + price: price, + }) + info); + + const confirmMessage = await this.message.channel.send(confirmEmbed); + this.createConfirmSelector(confirmMessage); + + await Promise.all([ + confirmMessage.react(MENU_REACTION.ACCEPT), + confirmMessage.react(MENU_REACTION.DENY), + ]); + } + + /** * @param {*} price - The item price */ - canBuy(price) { - return this.entity.Player.money >= price; - } + canBuy(price) { + return this.entity.Player.money >= price; + } - /********************************************************** GIVE FUNCTIONS **********************************************************/ + /** ******************************************************** GIVE FUNCTIONS **********************************************************/ - /** + /** * Give the daily potion to player */ - giveDailyPotion(message) { - this.entity.Player.Inventory.giveObject(this.dailyPotion.get('potion').id, ITEMTYPE.POTION); //Give potion - this.entity.Player.addMoney(-this.dailyPotion.get('price')); //Remove money - this.entity.Player.Inventory.save(); //Save - this.entity.Player.save(); //Save - message.delete(); - message.channel.send(new discord.MessageEmbed() - .setColor(JsonReader.bot.embed.default) - .setAuthor(format(JsonReader.commands.shop.getTranslation(this.language).potion.give, { - pseudo: this.customer.username - }), this.customer.displayAvatarURL()) - .setDescription("\n\n" + this.dailyPotion.get('potion').toString(this.language))); - } - - giveRandomItem(message) { - - } - - /** + giveDailyPotion(message) { + this.entity.Player.Inventory.giveObject(this.dailyPotion.get('potion').id, ITEMTYPE.POTION); // Give potion + this.entity.Player.addMoney(-this.dailyPotion.get('price')); // Remove money + this.entity.Player.Inventory.save(); // Save + this.entity.Player.save(); // Save + message.delete(); + message.channel.send(new discord.MessageEmbed() + .setColor(JsonReader.bot.embed.default) + .setAuthor(format(JsonReader.commands.shop.getTranslation(this.language).potion.give, { + pseudo: this.customer.username, + }), this.customer.displayAvatarURL()) + .setDescription('\n\n' + this.dailyPotion.get('potion').toString(this.language))); + } + + giveRandomItem(message) { + + } + + /** * Clear all player alterations */ - healAlterations(message) { - this.entity.effect = EFFECT.SMILEY; //Clear alterations - this.entity.Player.addMoney(-this.selectedItem.price); //Remove money - this.entity.save(); //Save - this.entity.Player.save(); //Save - message.delete(); - message.channel.send(new discord.MessageEmbed() - .setColor(JsonReader.bot.embed.default) - .setAuthor(format(JsonReader.commands.shop.getTranslation(this.language).success, { - pseudo: this.customer.username - }), this.customer.displayAvatarURL()) - .setDescription("\n\n" + this.selectedItem.give)); - } - - /** + healAlterations(message) { + this.entity.effect = EFFECT.SMILEY; // Clear alterations + this.entity.Player.addMoney(-this.selectedItem.price); // Remove money + this.entity.save(); // Save + this.entity.Player.save(); // Save + message.delete(); + message.channel.send(new discord.MessageEmbed() + .setColor(JsonReader.bot.embed.default) + .setAuthor(format(JsonReader.commands.shop.getTranslation(this.language).success, { + pseudo: this.customer.username, + }), this.customer.displayAvatarURL()) + .setDescription('\n\n' + this.selectedItem.give)); + } + + /** * Completely restore player life */ - regenPlayer(message) { - this.entity.setHealth(this.entity.maxHealth); //Heal Player - this.entity.Player.addMoney(-this.selectedItem.price); //Remove money - this.entity.save(); //Save - this.entity.Player.save(); //Save - message.delete(); - message.channel.send(new discord.MessageEmbed() - .setColor(JsonReader.bot.embed.default) - .setAuthor(format(JsonReader.commands.shop.getTranslation(this.language).success, { - pseudo: this.customer.username - }), this.customer.displayAvatarURL()) - .setDescription("\n\n" + this.selectedItem.give)); - } - - /** + regenPlayer(message) { + this.entity.setHealth(this.entity.maxHealth); // Heal Player + this.entity.Player.addMoney(-this.selectedItem.price); // Remove money + this.entity.save(); // Save + this.entity.Player.save(); // Save + message.delete(); + message.channel.send(new discord.MessageEmbed() + .setColor(JsonReader.bot.embed.default) + .setAuthor(format(JsonReader.commands.shop.getTranslation(this.language).success, { + pseudo: this.customer.username, + }), this.customer.displayAvatarURL()) + .setDescription('\n\n' + this.selectedItem.give)); + } + + /** * Give "MoneyMouth" badge to the player */ - giveMoneyMouthBadge(message) { - if (this.entity.Player.hasBadge('🤑')) { - this.alreadyHasItem(message); - message.delete(); - } else { - this.entity.Player.addBadge('🤑'); //Give badge - this.entity.Player.addMoney(-this.selectedItem.price); //Remove money - this.entity.Player.save(); //Save - - message.delete(); - message.channel.send(new discord.MessageEmbed() - .setColor(JsonReader.bot.embed.default) - .setAuthor(format(this.selectedItem.give, { - pseudo: this.customer.username - }), this.customer.displayAvatarURL()) - .setDescription("\n\n" + this.selectedItem.name)); - } + giveMoneyMouthBadge(message) { + if (this.entity.Player.hasBadge('🤑')) { + this.alreadyHasItem(message); + message.delete(); + } else { + this.entity.Player.addBadge('🤑'); // Give badge + this.entity.Player.addMoney(-this.selectedItem.price); // Remove money + this.entity.Player.save(); // Save + + message.delete(); + message.channel.send(new discord.MessageEmbed() + .setColor(JsonReader.bot.embed.default) + .setAuthor(format(this.selectedItem.give, { + pseudo: this.customer.username, + }), this.customer.displayAvatarURL()) + .setDescription('\n\n' + this.selectedItem.name)); } + } - /** + /** * Give guild xp */ - async giveGuildXp(message) { - //TODO test this - try { - const guild = await Guilds.getById(this.entity.Player.guild_id); - const toAdd = randInt(50, 450); - guild.addExperience(toAdd); //Add xp - this.entity.Player.addMoney(-this.selectedItem.price); //Remove money - this.entity.Player.save(); //Save - guild.save(); - - message.delete(); - message.channel.send(new discord.MessageEmbed() - .setColor(JsonReader.bot.embed.default) - .setAuthor(format(JsonReader.commands.shop.getTranslation(this.language).success, { - pseudo: this.customer.username - }), this.customer.displayAvatarURL()) - .setDescription("\n\n" + format(this.selectedItem.give, { - experience: toAdd - }))); - } catch (err) { - this.notInAGuild(message); - } + async giveGuildXp(message) { + // TODO test this + try { + const guild = await Guilds.getById(this.entity.Player.guild_id); + const toAdd = randInt(50, 450); + guild.addExperience(toAdd); // Add xp + this.entity.Player.addMoney(-this.selectedItem.price); // Remove money + this.entity.Player.save(); // Save + guild.save(); + + message.delete(); + message.channel.send(new discord.MessageEmbed() + .setColor(JsonReader.bot.embed.default) + .setAuthor(format(JsonReader.commands.shop.getTranslation(this.language).success, { + pseudo: this.customer.username, + }), this.customer.displayAvatarURL()) + .setDescription('\n\n' + format(this.selectedItem.give, { + experience: toAdd, + }))); + } catch (err) { + this.notInAGuild(message); } + } - /********************************************************** ERROR FUNCTIONS **********************************************************/ + /** ******************************************************** ERROR FUNCTIONS **********************************************************/ - /** + /** * @param {*} price - The item price */ - cannotBuy(price, message) { - let embed = new discord.MessageEmbed(); - embed.setColor(JsonReader.bot.embed.error) - .setAuthor(format(JsonReader.commands.shop.getTranslation(this.language).error.title, { - pseudo: this.message.author.username - }), this.message.author.displayAvatarURL()) - .setDescription(format(JsonReader.commands.shop.getTranslation(this.language).error.cannotBuy, { - missingMoney: price - this.entity.Player.money - })); - this.message.channel.send(embed); - } + cannotBuy(price, message) { + const embed = new discord.MessageEmbed(); + embed.setColor(JsonReader.bot.embed.error) + .setAuthor(format(JsonReader.commands.shop.getTranslation(this.language).error.title, { + pseudo: this.message.author.username, + }), this.message.author.displayAvatarURL()) + .setDescription(format(JsonReader.commands.shop.getTranslation(this.language).error.cannotBuy, { + missingMoney: price - this.entity.Player.money, + })); + this.message.channel.send(embed); + } - /** + /** * @param {*} message - The message where the react event trigerred */ - alreadyHasItem(message) { - message.delete(); - let embed = new discord.MessageEmbed(); - embed.setColor(JsonReader.bot.embed.error) - .setAuthor(format(JsonReader.commands.shop.getTranslation(this.language).error.title, { - pseudo: this.message.author.username - }), this.message.author.displayAvatarURL()) - .setDescription(JsonReader.commands.shop.getTranslation(this.language).error.alreadyHasItem); - this.message.channel.send(embed); - } - - /** + alreadyHasItem(message) { + message.delete(); + const embed = new discord.MessageEmbed(); + embed.setColor(JsonReader.bot.embed.error) + .setAuthor(format(JsonReader.commands.shop.getTranslation(this.language).error.title, { + pseudo: this.message.author.username, + }), this.message.author.displayAvatarURL()) + .setDescription(JsonReader.commands.shop.getTranslation(this.language).error.alreadyHasItem); + this.message.channel.send(embed); + } + + /** * @param {*} message - The message where the react event trigerred */ - notInAGuild(message) { - message.delete(); - let embed = new discord.MessageEmbed(); - embed.setColor(JsonReader.bot.embed.error) - .setAuthor(format(JsonReader.commands.shop.getTranslation(this.language).error.title, { - pseudo: this.message.author.username - }), this.message.author.displayAvatarURL()) - .setDescription(JsonReader.commands.guild.getTranslation(this.language).noGuildException); - this.message.channel.send(embed); - } - - /** + notInAGuild(message) { + message.delete(); + const embed = new discord.MessageEmbed(); + embed.setColor(JsonReader.bot.embed.error) + .setAuthor(format(JsonReader.commands.shop.getTranslation(this.language).error.title, { + pseudo: this.message.author.username, + }), this.message.author.displayAvatarURL()) + .setDescription(JsonReader.commands.guild.getTranslation(this.language).noGuildException); + this.message.channel.send(embed); + } + + /** * @param {*} message - The message where the reaction has been clicked on */ - cancelPurchase(message) { - message.delete(); - this.message.channel.send(format(JsonReader.commands.shop.getTranslation(this.language).error.canceledPurchase, { - mention: this.customer.toString() - })); - } - - + cancelPurchase(message) { + message.delete(); + this.message.channel.send(format(JsonReader.commands.shop.getTranslation(this.language).error.canceledPurchase, { + mention: this.customer.toString(), + })); + } } -module.exports = Shop; \ No newline at end of file +module.exports = Shop; diff --git a/src/core/Tools.js b/src/core/Tools.js index 7cad8f185..a2d24da43 100644 --- a/src/core/Tools.js +++ b/src/core/Tools.js @@ -12,99 +12,98 @@ global.idToMention = (id) => { * @param {module:"discord.js".TextChannel} channel - The channel where all attachments will be sent */ global.sendMessageAttachments = (message, channel) => { - message.attachments.forEach(element => { + message.attachments.forEach((element) => { channel.send({ files: [{ attachment: element.url, - name: element.filename - }] + name: element.filename, + }], }); }); }; /** * Send an error in a channel - * @param {module:"discord.js".User} user + * @param {module:"discord.js".User} user * @param {module:"discord.js".TextChannel} channel * @param {("fr"|"en")} language - Language to use in the response * @param {String} reason */ global.sendErrorMessage = (user, channel, language, reason) => { - let embed = new discord.MessageEmbed(); + const embed = new discord.MessageEmbed(); embed.setColor(JsonReader.bot.embed.error) - .setAuthor(format(JsonReader.error.getTranslation(language).title, { - pseudo: user.username - }), user.displayAvatarURL()) - .setDescription(reason); + .setAuthor(format(JsonReader.error.getTranslation(language).title, { + pseudo: user.username, + }), user.displayAvatarURL()) + .setDescription(reason); return channel.send(embed); }; /** * give a random item - * @param {module:"discord.js".User} discordUser + * @param {module:"discord.js".User} discordUser * @param {module:"discord.js".TextChannel} channel * @param {("fr"|"en")} language - Language to use in the response * @param {Entity} entity */ global.giveRandomItem = async (discordUser, channel, language, entity) => { - let item = await entity.Player.Inventory.generateRandomItem(); + const item = await entity.Player.Inventory.generateRandomItem(); let embed = new discord.MessageEmbed(); embed.setAuthor(format(JsonReader.commands.inventory.getTranslation(language).randomItemTitle, { - pseudo: discordUser.username + pseudo: discordUser.username, }), discordUser.displayAvatarURL()) - .setDescription(item.toString(language)); + .setDescription(item.toString(language)); if (item instanceof Potions) { - let potion = await entity.Player.Inventory.getPotion(); + const potion = await entity.Player.Inventory.getPotion(); embed.addField(format(JsonReader.commands.inventory.getTranslation(language).randomItemFooter, { - actualItem: potion.toString(language) + actualItem: potion.toString(language), }), format(JsonReader.commands.inventory.getTranslation(language).randomItemDesc, { - actualItem: potion.toString(language) + actualItem: potion.toString(language), })); } if (item instanceof Objects) { - let object = await entity.Player.Inventory.getBackupObject(); + const object = await entity.Player.Inventory.getBackupObject(); embed.addField(format(JsonReader.commands.inventory.getTranslation(language).randomItemFooter, { - actualItem: object.toString(language) + actualItem: object.toString(language), }), format(JsonReader.commands.inventory.getTranslation(language).randomItemDesc, { - actualItem: object.toString(language) + actualItem: object.toString(language), })); } if (item instanceof Weapons) { - let weapon = await entity.Player.Inventory.getWeapon(); + const weapon = await entity.Player.Inventory.getWeapon(); embed.addField(format(JsonReader.commands.inventory.getTranslation(language).randomItemFooter, { - actualItem: weapon.toString(language) + actualItem: weapon.toString(language), }), format(JsonReader.commands.inventory.getTranslation(language).randomItemDesc, { - actualItem: weapon.toString(language) + actualItem: weapon.toString(language), })); } if (item instanceof Armors) { - let armor = await entity.Player.Inventory.getArmor(); + const armor = await entity.Player.Inventory.getArmor(); embed.addField(format(JsonReader.commands.inventory.getTranslation(language).randomItemFooter, { - actualItem: armor.toString(language) + actualItem: armor.toString(language), }), format(JsonReader.commands.inventory.getTranslation(language).randomItemDesc, { - actualItem: armor.toString(language) + actualItem: armor.toString(language), })); } - let msg = await channel.send(embed); + const msg = await channel.send(embed); const filterConfirm = (reaction, user) => { return ((reaction.emoji.name == MENU_REACTION.ACCEPT || reaction.emoji.name == MENU_REACTION.DENY) && user.id === discordUser.id); }; const collector = msg.createReactionCollector(filterConfirm, { time: 120000, - max: 1 + max: 1, }); collector.on('end', async (reaction) => { - if (reaction.first()) { // a reaction exist if (reaction.first().emoji.name == MENU_REACTION.ACCEPT) { embed = new discord.MessageEmbed(); embed.setAuthor(format(JsonReader.commands.inventory.getTranslation(language).acceptedTitle, { - pseudo: discordUser.username + pseudo: discordUser.username, }), discordUser.displayAvatarURL()) - .setDescription(item.toString(language)); + .setDescription(item.toString(language)); if (item instanceof Potions) { entity.Player.Inventory.potion_id = item.id; } @@ -120,26 +119,26 @@ global.giveRandomItem = async (discordUser, channel, language, entity) => { await Promise.all([ entity.save(), entity.Player.save(), - entity.Player.Inventory.save() + entity.Player.Inventory.save(), ]); return channel.send(embed); } } - //TODO : Sell the item (je le fait demain) + // TODO : Sell the item (je le fait demain) }); await Promise.all([ msg.react(MENU_REACTION.ACCEPT), - msg.react(MENU_REACTION.DENY) + msg.react(MENU_REACTION.DENY), ]); }; /** * Generate a random rarity. Legendary is very rare and common is not rare at all - * @returns {Number} + * @return {Number} */ global.generateRandomRarity = () => { - let randomValue = Math.round( - Math.random() * JsonReader.values.raritiesGenerator.maxValue); + const randomValue = Math.round( + Math.random() * JsonReader.values.raritiesGenerator.maxValue); if (randomValue <= JsonReader.values.raritiesGenerator['0']) { return 1; @@ -162,7 +161,7 @@ global.generateRandomRarity = () => { /** * Generate a random itemType - * @returns {Number} + * @return {Number} */ global.generateRandomItemType = () => { return JsonReader.values.itemGenerator.tab[Math.round(Math.random() * (JsonReader.values.itemGenerator.max - 1) + 1)]; @@ -192,7 +191,7 @@ global.minutesToMilliseconds = (minutes) => { * @return {String} */ global.minutesToString = (minutes) => { - let hours = Math.floor(minutes / 60); + const hours = Math.floor(minutes / 60); minutes = minutes - (hours * 60); let display = (hours > 0) ? hours + ' H ' : ''; @@ -234,7 +233,7 @@ global.format = (string, replacement) => { * Generates a random int between min and max both included * @param {Number} min * @param {Number} max - * @returns {number} + * @return {number} */ global.randInt = (min, max) => { return Math.round(Math.random() * (max - min) + min); @@ -245,27 +244,27 @@ global.randInt = (min, max) => { * Create a text progress bar * @param {Number} value * @param {Number} maxValue - * @returns {String} - The bar + * @return {String} - The bar */ global.progressBar = (value, maxValue) => { - let percentage = value / maxValue; //Calculate the percentage of the bar - let progress = Math.round((PROGRESSBARS_SIZE * percentage)); //Calculate the number of square caracters to fill the progress side. - let emptyProgress = PROGRESSBARS_SIZE - progress; //Calculate the number of dash caracters to fill the empty progress side. + const percentage = value / maxValue; // Calculate the percentage of the bar + const progress = Math.round((PROGRESSBARS_SIZE * percentage)); // Calculate the number of square caracters to fill the progress side. + const emptyProgress = PROGRESSBARS_SIZE - progress; // Calculate the number of dash caracters to fill the empty progress side. - let progressText = '▇'.repeat(progress); //Repeat is creating a string with progress * caracters in it - let emptyProgressText = '—'.repeat(emptyProgress); //Repeat is creating a string with empty progress * caracters in it - let percentageText = Math.round(percentage * 100) + '%'; //Displaying the percentage of the bar + const progressText = '▇'.repeat(progress); // Repeat is creating a string with progress * caracters in it + const emptyProgressText = '—'.repeat(emptyProgress); // Repeat is creating a string with empty progress * caracters in it + const percentageText = Math.round(percentage * 100) + '%'; // Displaying the percentage of the bar - let bar = '[' + progressText + emptyProgressText + '] ' + percentageText; //Creating the bar + const bar = '[' + progressText + emptyProgressText + '] ' + percentageText; // Creating the bar return bar; }; /** * Return the value of the item * @param {Objects|Armors|Weapons|Potions} item - * @returns {Number} - The value of the item + * @return {Number} - The value of the item */ -global.getItemValue = function (item) { +global.getItemValue = function(item) { return parseInt(JsonReader.values.raritiesValues[item.rarity]) + parseInt(item.power); }; @@ -276,7 +275,7 @@ global.getItemValue = function (item) { * @param {"fr"|"en"} language * @returns {boolean} */ -global.sendBlockedError = async function (user, channel, language) { +global.sendBlockedError = async function(user, channel, language) { if (hasBlockedPlayer(user.id)) { await sendErrorMessage(user, channel, language, JsonReader.error.getTranslation(language).playerBlocked); return true; @@ -303,4 +302,4 @@ global.sendBlockedError = async function (user, channel, language) { // message.guild.members.forEach(member => idlist += member.id + ","); // return idlist.substring(0, idlist.length - 1); // -// } \ No newline at end of file +// } diff --git a/src/core/models/Armors.js b/src/core/models/Armors.js index 0d613a35b..93c3c555b 100644 --- a/src/core/models/Armors.js +++ b/src/core/models/Armors.js @@ -1,74 +1,82 @@ -module.exports = (sequelize, DataTypes) => { - - const Armors = sequelize.define('Armors', { +/** + * @typedef {import('sequelize').Sequelize} Sequelize + * @typedef {import('sequelize/types')} DataTypes + * + * @param {Sequelize} Sequelize + * @param {DataTypes} DataTypes + * @returns + */ +module.exports = (Sequelize, DataTypes) => { + const Armors = Sequelize.define('Armors', { id: { type: DataTypes.INTEGER, primaryKey: true, - autoIncrement: true + autoIncrement: true, }, rarity: { type: DataTypes.INTEGER, - defaultValue: JsonReader.models.armors.rarity + defaultValue: JsonReader.models.armors.rarity, }, rawAttack: { type: DataTypes.INTEGER, - defaultValue: JsonReader.models.armors.rawAttack + defaultValue: JsonReader.models.armors.rawAttack, }, rawDefense: { type: DataTypes.INTEGER, - defaultValue: JsonReader.models.armors.rawDefense + defaultValue: JsonReader.models.armors.rawDefense, }, rawSpeed: { type: DataTypes.INTEGER, - defaultValue: JsonReader.models.armors.rawSpeed + defaultValue: JsonReader.models.armors.rawSpeed, }, attack: { type: DataTypes.INTEGER, - defaultValue: JsonReader.models.armors.attack + defaultValue: JsonReader.models.armors.attack, }, defense: { type: DataTypes.INTEGER, - defaultValue: JsonReader.models.armors.defense + defaultValue: JsonReader.models.armors.defense, }, speed: { type: DataTypes.INTEGER, - defaultValue: JsonReader.models.armors.speed + defaultValue: JsonReader.models.armors.speed, }, fr: { - type: DataTypes.TEXT + type: DataTypes.TEXT, }, en: { - type: DataTypes.TEXT + type: DataTypes.TEXT, }, updatedAt: { type: DataTypes.DATE, - defaultValue: require('moment')().format('YYYY-MM-DD HH:mm:ss') + defaultValue: require('moment')().format('YYYY-MM-DD HH:mm:ss'), }, createdAt: { type: DataTypes.DATE, - defaultValue: require('moment')().format('YYYY-MM-DD HH:mm:ss') - } + defaultValue: require('moment')().format('YYYY-MM-DD HH:mm:ss'), + }, }, { tableName: 'armors', - freezeTableName: true + freezeTableName: true, }); Armors.beforeSave((instance, options) => { - instance.setDataValue('updatedAt', require('moment')().format('YYYY-MM-DD HH:mm:ss')); + instance.setDataValue('updatedAt', + require('moment')().format('YYYY-MM-DD HH:mm:ss')); }); /** * @param {("fr"|"en")} language - The language the inventory has to be displayed in */ - Armors.prototype.toFieldObject = async function (language) { + Armors.prototype.toFieldObject = async function(language) { return { name: JsonReader.items.getTranslation(language).armors.fieldName, value: (this.id === 0) ? this[language] : format( - JsonReader.items.getTranslation(language).armors.fieldValue, { - name: this[language], - rarity: this.getRarityTranslation(language), - values: this.getValues(language), - }), + JsonReader.items.getTranslation(language).armors.fieldValue, { + name: this[language], + rarity: this.getRarityTranslation(language), + values: this.getValues(language), + }), }; }; @@ -76,44 +84,44 @@ module.exports = (sequelize, DataTypes) => { * @param {("fr"|"en")} language - The language the weapon has to be displayed in * @return {String} */ - Armors.prototype.toString = function (language) { + Armors.prototype.toString = function(language) { return (this.id === 0) ? this[language] : format( - JsonReader.items.getTranslation(language).weapons.fieldValue, { - name: this[language], - rarity: this.getRarityTranslation(language), - values: this.getValues(language), - }); + JsonReader.items.getTranslation(language).weapons.fieldValue, { + name: this[language], + rarity: this.getRarityTranslation(language), + values: this.getValues(language), + }); }; /** * @param {("fr"|"en")} language * @return {String} */ - Armors.prototype.getRarityTranslation = function (language) { + Armors.prototype.getRarityTranslation = function(language) { return JsonReader.items.getTranslation(language).rarities[this.rarity]; }; /** * Return the property from rawProperty and property modifier - * @returns {Number} + * @return {Number} */ - Armors.prototype.getAttack = function () { + Armors.prototype.getAttack = function() { return JsonReader.items.power[this.rarity][this.rawAttack] + this.attack; }; /** * Return the property from rawProperty and property modifier - * @returns {Number} + * @return {Number} */ - Armors.prototype.getDefense = function () { + Armors.prototype.getDefense = function() { return JsonReader.items.power[this.rarity][this.rawDefense] + this.defense; }; /** * Return the property from rawProperty and property modifier - * @returns {Number} + * @return {Number} */ - Armors.prototype.getSpeed = function () { + Armors.prototype.getSpeed = function() { return JsonReader.items.power[this.rarity][this.rawSpeed] + this.speed; }; @@ -121,19 +129,22 @@ module.exports = (sequelize, DataTypes) => { * @param {("fr"|"en")} language * @return {String} */ - Armors.prototype.getValues = function (language) { - let values = []; + Armors.prototype.getValues = function(language) { + const values = []; if (this.getAttack() !== 0) { - values.push(format(JsonReader.items.getTranslation(language).attack, { attack: this.getAttack() })); + values.push(format(JsonReader.items.getTranslation(language).attack, + {attack: this.getAttack()})); } if (this.getDefense() !== 0) { - values.push(format(JsonReader.items.getTranslation(language).defense, { defense: this.getDefense() })); + values.push(format(JsonReader.items.getTranslation(language).defense, + {defense: this.getDefense()})); } if (this.getSpeed() !== 0) { - values.push(format(JsonReader.items.getTranslation(language).speed, { speed: this.getSpeed() })); + values.push(format(JsonReader.items.getTranslation(language).speed, + {speed: this.getSpeed()})); } return values.join(' '); diff --git a/src/core/models/Databases.js b/src/core/models/Databases.js index 56127ca00..e7ceff90b 100644 --- a/src/core/models/Databases.js +++ b/src/core/models/Databases.js @@ -1,30 +1,38 @@ -module.exports = (sequelize, DataTypes) => { +/** + * @typedef {import('sequelize').Sequelize} Sequelize + * @typedef {import('sequelize/types')} DataTypes + * + * @param {Sequelize} Sequelize + * @param {DataTypes} DataTypes + * @returns + */ +module.exports = (Sequelize, DataTypes) => { + const Databases = Sequelize.define('Databases', { + id: { + type: DataTypes.INTEGER, + primaryKey: true, + autoIncrement: true, + }, + lastResetAt: { + type: DataTypes.DATE, + }, + updatedAt: { + type: DataTypes.DATE, + defaultValue: require('moment')().format('YYYY-MM-DD HH:mm:ss'), + }, + createdAt: { + type: DataTypes.DATE, + defaultValue: require('moment')().format('YYYY-MM-DD HH:mm:ss'), + }, + }, { + tableName: 'databases', + freezeTableName: true, + }); - const Databases = sequelize.define('Databases', { - id: { - type: DataTypes.INTEGER, - primaryKey: true, - autoIncrement: true - }, - lastResetAt: { - type: DataTypes.DATE - }, - updatedAt: { - type: DataTypes.DATE, - defaultValue: require('moment')().format('YYYY-MM-DD HH:mm:ss') - }, - createdAt: { - type: DataTypes.DATE, - defaultValue: require('moment')().format('YYYY-MM-DD HH:mm:ss') - } - }, { - tableName: 'databases', - freezeTableName: true - }); + Databases.beforeSave((instance, options) => { + instance.setDataValue('updatedAt', + require('moment')().format('YYYY-MM-DD HH:mm:ss')); + }); - Databases.beforeSave((instance, options) => { - instance.setDataValue('updatedAt', require('moment')().format('YYYY-MM-DD HH:mm:ss')); - }); - - return Databases; + return Databases; }; diff --git a/src/core/models/Entities.js b/src/core/models/Entities.js index ddede432a..c4ec721cf 100644 --- a/src/core/models/Entities.js +++ b/src/core/models/Entities.js @@ -1,6 +1,13 @@ -module.exports = (sequelize, DataTypes) => { - - const Entities = sequelize.define('entities', { +/** + * @typedef {import('sequelize').Sequelize} Sequelize + * @typedef {import('sequelize/types')} DataTypes + * + * @param {Sequelize} Sequelize + * @param {DataTypes} DataTypes + * @returns + */ +module.exports = (Sequelize, DataTypes) => { + const Entities = Sequelize.define('entities', { id: { type: DataTypes.INTEGER, primaryKey: true, @@ -59,15 +66,17 @@ module.exports = (sequelize, DataTypes) => { where: { discordUser_id: discordUser_id, }, - defaults: { Player: { Inventory: {} } }, - include: [{ - model: Players, - as: 'Player', - include: [{ - model: Inventories, - as: 'Inventory' - }] - }], + defaults: {Player: {Inventory: {}}}, + include: [ + { + model: Players, + as: 'Player', + include: [ + { + model: Inventories, + as: 'Inventory', + }], + }], }); }; @@ -76,22 +85,23 @@ module.exports = (sequelize, DataTypes) => { */ Entities.getByGuild = (guildId) => { return Entities.findAll({ - defaults: { Player: { Inventory: {} } }, - include: [{ - model: Players, - as: 'Player', - where: { - guild_id: guildId - }, - include: [{ - model: Inventories, - as: 'Inventory' - }] - }], + defaults: {Player: {Inventory: {}}}, + include: [ + { + model: Players, + as: 'Player', + where: { + guild_id: guildId, + }, + include: [ + { + model: Inventories, + as: 'Inventory', + }], + }], }); }; - /** * @param {String} discordUser_id */ @@ -142,13 +152,13 @@ module.exports = (sequelize, DataTypes) => { */ Entities.getByArgs = async (args, message) => { if (isNaN(args[0])) { - let lastMention = message.mentions.users.last(); + const lastMention = message.mentions.users.last(); if (lastMention === undefined) { return null; } return Entities.getByDiscordUserId(lastMention.id); } else { - let [player] = await Players.getByRank(parseInt(args[0])); + const [player] = await Players.getByRank(parseInt(args[0])); return Entities.getById(player.entity_id); } }; @@ -163,7 +173,7 @@ module.exports = (sequelize, DataTypes) => { */ Entities.prototype.getCumulativeAttack = function( weapon, armor, potion, object) { - let attack = this.attack + weapon.getAttack() + armor.getAttack() + + const attack = this.attack + weapon.getAttack() + armor.getAttack() + potion.getAttack() + object.getAttack(); return (attack > 0) ? attack : 0; }; @@ -178,7 +188,7 @@ module.exports = (sequelize, DataTypes) => { */ Entities.prototype.getCumulativeDefense = function( weapon, armor, potion, object) { - let defense = this.defense + weapon.getDefense() + armor.getDefense() + + const defense = this.defense + weapon.getDefense() + armor.getDefense() + potion.getDefense() + object.getDefense(); return (defense > 0) ? defense : 0; }; @@ -193,7 +203,7 @@ module.exports = (sequelize, DataTypes) => { */ Entities.prototype.getCumulativeSpeed = function( weapon, armor, potion, object) { - let speed = this.speed + weapon.getSpeed() + armor.getSpeed() + + const speed = this.speed + weapon.getSpeed() + armor.getSpeed() + potion.getSpeed() + object.getSpeed(); return (speed > 0) ? speed : 0; }; @@ -203,7 +213,7 @@ module.exports = (sequelize, DataTypes) => { * @param {Players} player * @return {Number} */ - Entities.prototype.getCumulativeHealth = function (player) { + Entities.prototype.getCumulativeHealth = function(player) { return this.health + (player.level * 10); }; @@ -211,7 +221,7 @@ module.exports = (sequelize, DataTypes) => { * @param {module:"discord.js".Message} message * @return {Boolean|String} */ - Entities.prototype.checkEffect = function () { + Entities.prototype.checkEffect = function() { if ([EFFECT.BABY, EFFECT.SMILEY, EFFECT.DEAD].indexOf(this.effect) !== -1) { return true; } @@ -253,12 +263,12 @@ module.exports = (sequelize, DataTypes) => { // message.channel.send(Text.entity.killPublicIntro + message.author.username + Text.entity.killPublicMessage) // message.author.send(Text.entity.killMessage) }; - + /** - * @returns {String} + * @return {String} */ Entities.prototype.getMention = function() { - return "<@" + this.discordUser_id + ">"; + return '<@' + this.discordUser_id + '>'; }; return Entities; diff --git a/src/core/models/Events.js b/src/core/models/Events.js index 4dcf176d0..3df699dae 100644 --- a/src/core/models/Events.js +++ b/src/core/models/Events.js @@ -1,40 +1,48 @@ -module.exports = (sequelize, DataTypes) => { - - const Events = sequelize.define('Events', { +/** + * @typedef {import('sequelize').Sequelize} Sequelize + * @typedef {import('sequelize/types')} DataTypes + * + * @param {Sequelize} Sequelize + * @param {DataTypes} DataTypes + * @returns + */ +module.exports = (Sequelize, DataTypes) => { + const Events = Sequelize.define('Events', { id: { type: DataTypes.INTEGER, primaryKey: true, - autoIncrement: true + autoIncrement: true, }, fr: { - type: DataTypes.TEXT + type: DataTypes.TEXT, }, en: { - type: DataTypes.TEXT + type: DataTypes.TEXT, }, updatedAt: { type: DataTypes.DATE, - defaultValue: require('moment')().format('YYYY-MM-DD HH:mm:ss') + defaultValue: require('moment')().format('YYYY-MM-DD HH:mm:ss'), }, createdAt: { type: DataTypes.DATE, - defaultValue: require('moment')().format('YYYY-MM-DD HH:mm:ss') - } + defaultValue: require('moment')().format('YYYY-MM-DD HH:mm:ss'), + }, }, { tableName: 'events', - freezeTableName: true + freezeTableName: true, }); Events.beforeSave((instance, options) => { - instance.setDataValue('updatedAt', require('moment')().format('YYYY-MM-DD HH:mm:ss')); + instance.setDataValue('updatedAt', + require('moment')().format('YYYY-MM-DD HH:mm:ss')); }); /** * @return {Promise} */ Events.prototype.getReactions = async function() { - let possibilities = await this.getPossibilities(); - let reactions = []; + const possibilities = await this.getPossibilities(); + const reactions = []; for (const possibility of possibilities) { reactions.push(possibility.possibilityKey); } diff --git a/src/core/models/Guilds.js b/src/core/models/Guilds.js index 626205479..67d74e522 100644 --- a/src/core/models/Guilds.js +++ b/src/core/models/Guilds.js @@ -1,105 +1,112 @@ -module.exports = (sequelize, DataTypes) => { +/** + * @typedef {import('sequelize').Sequelize} Sequelize + * @typedef {import('sequelize/types')} DataTypes + * + * @param {Sequelize} Sequelize + * @param {DataTypes} DataTypes + * @returns + */ +module.exports = (Sequelize, DataTypes) => { + const Guilds = Sequelize.define('Guilds', { + id: { + type: DataTypes.INTEGER, + primaryKey: true, + autoIncrement: true, + }, + name: { + type: DataTypes.STRING(32), + }, + score: { + type: DataTypes.INTEGER, + defaultValue: JsonReader.models.guilds.score, + }, + level: { + type: DataTypes.INTEGER, + defaultValue: JsonReader.models.guilds.level, + }, + experience: { + type: DataTypes.INTEGER, + defaultValue: JsonReader.models.guilds.experience, + }, + lastDailyAt: { + type: DataTypes.DATE, + defaultValue: JsonReader.models.guilds.lastDailyAt, + }, + chief_id: { + type: DataTypes.INTEGER, + }, + updatedAt: { + type: DataTypes.DATE, + defaultValue: require('moment')().format('YYYY-MM-DD HH:mm:ss'), + }, + createdAt: { + type: DataTypes.DATE, + defaultValue: require('moment')().format('YYYY-MM-DD HH:mm:ss'), + }, + }, { + tableName: 'guilds', + freezeTableName: true, + }); - const Guilds = sequelize.define('Guilds', { - id: { - type: DataTypes.INTEGER, - primaryKey: true, - autoIncrement: true - }, - name: { - type: DataTypes.STRING(32) - }, - score: { - type: DataTypes.INTEGER, - defaultValue: JsonReader.models.guilds.score - }, - level: { - type: DataTypes.INTEGER, - defaultValue: JsonReader.models.guilds.level - }, - experience: { - type: DataTypes.INTEGER, - defaultValue: JsonReader.models.guilds.experience - }, - lastDailyAt: { - type: DataTypes.DATE, - defaultValue: JsonReader.models.guilds.lastDailyAt - }, - chief_id: { - type: DataTypes.INTEGER - }, - updatedAt: { - type: DataTypes.DATE, - defaultValue: require('moment')().format('YYYY-MM-DD HH:mm:ss') - }, - createdAt: { - type: DataTypes.DATE, - defaultValue: require('moment')().format('YYYY-MM-DD HH:mm:ss') - } - }, { - tableName: 'guilds', - freezeTableName: true - }); + Guilds.beforeSave((instance, options) => { + instance.setDataValue('updatedAt', + require('moment')().format('YYYY-MM-DD HH:mm:ss')); + }); - Guilds.beforeSave((instance, options) => { - instance.setDataValue('updatedAt', require('moment')().format('YYYY-MM-DD HH:mm:ss')); + /** + * @param {Number} id + */ + Guilds.getById = (id) => { + return Guilds.findOne({ + where: { + id: id, + }, }); + }; + /** + * @param {String} name + y*/ + Guilds.getByName = (name) => { + return Guilds.findOne({ + where: { + name: name, + }, + }); + }; - /** - * @param {Number} id - */ - Guilds.getById = (id) => { - return Guilds.findOne({ - where: { - id: id - }, - }); - }; - - /** - * @param {String} name - y*/ - Guilds.getByName = (name) => { - return Guilds.findOne({ - where: { - name: name - }, - }); - }; - - /** - * @return {Number} Return the experience needed to level up. - */ - Guilds.prototype.getExperienceNeededToLevelUp = function () { - return JsonReader.models.guilds.xp[this.level + 1]; - }; + /** + * @return {Number} Return the experience needed to level up. + */ + Guilds.prototype.getExperienceNeededToLevelUp = function() { + return JsonReader.models.guilds.xp[this.level + 1]; + }; - /** - * @returns {Number} Return the experience used to level up. - */ - Guilds.prototype.getExperienceUsedToLevelUp = function () { - return JsonReader.models.guilds.xp[this.level]; - }; + /** + * @return {Number} Return the experience used to level up. + */ + Guilds.prototype.getExperienceUsedToLevelUp = function() { + return JsonReader.models.guilds.xp[this.level]; + }; - /** - * @param {Number} experience - */ - Guilds.prototype.addExperience = function (experience) { - this.experience += experience; - this.setExperience(this.experience); - }; + /** + * @param {Number} experience + */ + Guilds.prototype.addExperience = function(experience) { + this.experience += experience; + this.setExperience(this.experience); + }; - /** - * @param {Number} experience - */ - Guilds.prototype.setExperience = function (experience) { - if (experience > 0) { - this.experience = experience; - } else { - this.experience = 0; - } - }; + /** + * @param {Number} experience + */ + Guilds.prototype.setExperience = function(experience) { + if (experience > 0) { + this.experience = experience; + } else { + this.experience = 0; + } + }; - return Guilds; -}; \ No newline at end of file + return Guilds; +}; diff --git a/src/core/models/Inventories.js b/src/core/models/Inventories.js index b477bafd6..69606040a 100644 --- a/src/core/models/Inventories.js +++ b/src/core/models/Inventories.js @@ -1,141 +1,155 @@ -module.exports = (sequelize, DataTypes) => { - - const Inventories = sequelize.define('Inventories', { +/** + * @typedef {import('sequelize').Sequelize} Sequelize + * @typedef {import('sequelize/types')} DataTypes + * + * @param {Sequelize} Sequelize + * @param {DataTypes} DataTypes + * @returns + */ +module.exports = (Sequelize, DataTypes) => { + const Inventories = Sequelize.define('Inventories', { id: { type: DataTypes.INTEGER, primaryKey: true, - autoIncrement: true + autoIncrement: true, }, lastDailyAt: { type: DataTypes.DATE, - defaultValue: JsonReader.models.inventories.lastDailyAt + defaultValue: JsonReader.models.inventories.lastDailyAt, }, player_id: { - type: DataTypes.INTEGER + type: DataTypes.INTEGER, }, weapon_id: { type: DataTypes.INTEGER, - defaultValue: JsonReader.models.inventories.weapon_id + defaultValue: JsonReader.models.inventories.weapon_id, }, armor_id: { type: DataTypes.INTEGER, - defaultValue: JsonReader.models.inventories.armor_id + defaultValue: JsonReader.models.inventories.armor_id, }, potion_id: { type: DataTypes.INTEGER, - defaultValue: JsonReader.models.inventories.potion_id + defaultValue: JsonReader.models.inventories.potion_id, }, object_id: { type: DataTypes.INTEGER, - defaultValue: JsonReader.models.inventories.object_id + defaultValue: JsonReader.models.inventories.object_id, }, backup_id: { type: DataTypes.INTEGER, - defaultValue: JsonReader.models.inventories.backup_id + defaultValue: JsonReader.models.inventories.backup_id, }, updatedAt: { type: DataTypes.DATE, - defaultValue: require('moment')().format('YYYY-MM-DD HH:mm:ss') + defaultValue: require('moment')().format('YYYY-MM-DD HH:mm:ss'), }, createdAt: { type: DataTypes.DATE, - defaultValue: require('moment')().format('YYYY-MM-DD HH:mm:ss') - } + defaultValue: require('moment')().format('YYYY-MM-DD HH:mm:ss'), + }, }, { tableName: 'inventories', - freezeTableName: true + freezeTableName: true, }); /** * @param {("itemID")} itemID - The itemID * @param {("itemType")} itemType - The itemType to know what kind of object is updated */ - Inventories.prototype.giveObject = function (itemID, itemType) { - if (ITEMTYPE.POTION == itemType) { this.potion_id = itemID; } - if (ITEMTYPE.WEAPON == itemType) { this.weapon_id = itemID; } - if (ITEMTYPE.ARMOR == itemType) { this.armor_id = itemID; } - if (ITEMTYPE.OBJECT == itemType) { this.backup_id = itemID; } + Inventories.prototype.giveObject = function(itemID, itemType) { + if (ITEMTYPE.POTION == itemType) { + this.potion_id = itemID; + } + if (ITEMTYPE.WEAPON == itemType) { + this.weapon_id = itemID; + } + if (ITEMTYPE.ARMOR == itemType) { + this.armor_id = itemID; + } + if (ITEMTYPE.OBJECT == itemType) { + this.backup_id = itemID; + } }; - Inventories.prototype.generateRandomItem = async function () { - - //generate a random item - let rarity = generateRandomRarity(); - let itemType = generateRandomItemType(); + Inventories.prototype.generateRandomItem = async function() { + // generate a random item + const rarity = generateRandomRarity(); + const itemType = generateRandomItemType(); const query = `SELECT id FROM :itemType WHERE rarity = :rarity`; - let itemsIds = await sequelize.query(query, { + const itemsIds = await sequelize.query(query, { replacements: { itemType: itemType, - rarity: rarity + rarity: rarity, }, - type: sequelize.QueryTypes.SELECT + type: sequelize.QueryTypes.SELECT, }); let item; if (ITEMTYPE.POTION == itemType) { item = await Potions.findOne({ where: { id: itemsIds[ - Math.floor(Math.random() * itemsIds.length) - ].id - } + Math.floor(Math.random() * itemsIds.length) + ].id, + }, }); } if (ITEMTYPE.WEAPON == itemType) { item = await Weapons.findOne({ where: { id: itemsIds[ - Math.floor(Math.random() * itemsIds.length) - ].id - } + Math.floor(Math.random() * itemsIds.length) + ].id, + }, }); } if (ITEMTYPE.ARMOR == itemType) { item = await Armors.findOne({ where: { id: itemsIds[ - Math.floor(Math.random() * itemsIds.length) - ].id - } + Math.floor(Math.random() * itemsIds.length) + ].id, + }, }); } if (ITEMTYPE.OBJECT == itemType) { item = await Objects.findOne({ where: { id: itemsIds[ - Math.floor(Math.random() * itemsIds.length) - ].id - } + Math.floor(Math.random() * itemsIds.length) + ].id, + }, }); } return item; }; Inventories.beforeSave((instance, options) => { - instance.setDataValue('updatedAt', require('moment')().format('YYYY-MM-DD HH:mm:ss')); + instance.setDataValue('updatedAt', + require('moment')().format('YYYY-MM-DD HH:mm:ss')); }); - Inventories.prototype.updateLastDailyAt = function () { - let moment = require('moment'); + Inventories.prototype.updateLastDailyAt = function() { + const moment = require('moment'); this.lastDailyAt = new moment(); }; - Inventories.prototype.drinkPotion = function () { + Inventories.prototype.drinkPotion = function() { this.potion_id = JsonReader.models.inventories.potion_id; }; - /** * @param {("fr"|"en")} language - The language the inventory has to be displayed in */ - Inventories.prototype.toEmbedObject = async function (language) { + Inventories.prototype.toEmbedObject = async function(language) { return [ await (await this.getWeapon()).toFieldObject(language), await (await this.getArmor()).toFieldObject(language), await (await this.getPotion()).toFieldObject(language), await (await this.getActiveObject()).toFieldObject(language, 'active'), - await (await this.getBackupObject()).toFieldObject(language, 'backup') + await (await this.getBackupObject()).toFieldObject(language, 'backup'), ]; }; @@ -144,7 +158,7 @@ module.exports = (sequelize, DataTypes) => { * @param {("fr"|"en")} language * @return {boolean} */ - Inventories.prototype.hasItemToSell = function () { + Inventories.prototype.hasItemToSell = function() { return this.backup_id !== JsonReader.models.inventories.backup_id; }; diff --git a/src/core/models/Objects.js b/src/core/models/Objects.js index 1fce07788..de224698c 100644 --- a/src/core/models/Objects.js +++ b/src/core/models/Objects.js @@ -1,51 +1,59 @@ -module.exports = (sequelize, DataTypes) => { - - const Objects = sequelize.define('Objects', { +/** + * @typedef {import('sequelize').Sequelize} Sequelize + * @typedef {import('sequelize/types')} DataTypes + * + * @param {Sequelize} Sequelize + * @param {DataTypes} DataTypes + * @returns + */ +module.exports = (Sequelize, DataTypes) => { + const Objects = Sequelize.define('Objects', { id: { type: DataTypes.INTEGER, primaryKey: true, - autoIncrement: true + autoIncrement: true, }, rarity: { type: DataTypes.INTEGER, - defaultValue: JsonReader.models.objects.rarity + defaultValue: JsonReader.models.objects.rarity, }, power: { type: DataTypes.INTEGER, - defaultValue: JsonReader.models.objects.power + defaultValue: JsonReader.models.objects.power, }, nature: { type: DataTypes.INTEGER, - defaultValue: JsonReader.models.objects.nature + defaultValue: JsonReader.models.objects.nature, }, fr: { - type: DataTypes.TEXT + type: DataTypes.TEXT, }, en: { - type: DataTypes.TEXT + type: DataTypes.TEXT, }, updatedAt: { type: DataTypes.DATE, - defaultValue: require('moment')().format('YYYY-MM-DD HH:mm:ss') + defaultValue: require('moment')().format('YYYY-MM-DD HH:mm:ss'), }, createdAt: { type: DataTypes.DATE, - defaultValue: require('moment')().format('YYYY-MM-DD HH:mm:ss') - } + defaultValue: require('moment')().format('YYYY-MM-DD HH:mm:ss'), + }, }, { tableName: 'objects', - freezeTableName: true + freezeTableName: true, }); Objects.beforeSave((instance, options) => { - instance.setDataValue('updatedAt', require('moment')().format('YYYY-MM-DD HH:mm:ss')); + instance.setDataValue('updatedAt', + require('moment')().format('YYYY-MM-DD HH:mm:ss')); }); /** * @param {("fr"|"en")} language - The language the inventory has to be displayed in * @param {("active"|"backup")} slot */ - Objects.prototype.toFieldObject = async function (language, slot) { + Objects.prototype.toFieldObject = async function(language, slot) { return { name: JsonReader.items.getTranslation(language).objects[slot].fieldName, value: (this.id === 0) ? this[language] : this.toString(language), @@ -57,13 +65,13 @@ module.exports = (sequelize, DataTypes) => { * @param {("fr"|"en")} language - The language the potion has to be displayed in * @return {String} */ - Objects.prototype.toString = function (language) { + Objects.prototype.toString = function(language) { return (this.id === 0) ? this[language] : format( - JsonReader.items.getTranslation(language).objects.active.fieldValue, { - name: this[language], - rarity: this.getRarityTranslation(language), - nature: this.getNatureTranslation(language), - }); + JsonReader.items.getTranslation(language).objects.active.fieldValue, { + name: this[language], + rarity: this.getRarityTranslation(language), + nature: this.getNatureTranslation(language), + }); }; /** @@ -71,7 +79,7 @@ module.exports = (sequelize, DataTypes) => { * @param {("fr"|"en")} language * @return {String} */ - Objects.prototype.getName = function (language) { + Objects.prototype.getName = function(language) { return this[language]; }; @@ -87,14 +95,16 @@ module.exports = (sequelize, DataTypes) => { * @param {("fr"|"en")} language * @return {String} */ - Objects.prototype.getNatureTranslation = function (language) { - return format(JsonReader.items.getTranslation(language).objects.natures[this.nature], { power: this.power }); + Objects.prototype.getNatureTranslation = function(language) { + return format( + JsonReader.items.getTranslation(language).objects.natures[this.nature], + {power: this.power}); }; /** * @return {Number} */ - Objects.prototype.getAttack = function () { + Objects.prototype.getAttack = function() { if (this.nature === 3) { return this.power; } @@ -104,7 +114,7 @@ module.exports = (sequelize, DataTypes) => { /** * @return {Number} */ - Objects.prototype.getDefense = function () { + Objects.prototype.getDefense = function() { if (this.nature === 4) { return this.power; } @@ -114,7 +124,7 @@ module.exports = (sequelize, DataTypes) => { /** * @return {Number} */ - Objects.prototype.getSpeed = function () { + Objects.prototype.getSpeed = function() { if (this.nature === 2) { return this.power; } diff --git a/src/core/models/Players.js b/src/core/models/Players.js index 2e72c6143..80cb463a6 100644 --- a/src/core/models/Players.js +++ b/src/core/models/Players.js @@ -1,6 +1,13 @@ -module.exports = (sequelize, DataTypes) => { - - const Players = sequelize.define('players', { +/** + * @typedef {import('sequelize').Sequelize} Sequelize + * @typedef {import('sequelize/types')} DataTypes + * + * @param {Sequelize} Sequelize + * @param {DataTypes} DataTypes + * @returns + */ +module.exports = (Sequelize, DataTypes) => { + const Players = Sequelize.define('players', { id: { type: DataTypes.INTEGER, primaryKey: true, @@ -58,10 +65,11 @@ module.exports = (sequelize, DataTypes) => { * Add a badge to the player badges * @param {String} badge - The badge to be added to player */ - Players.prototype.addBadge = function (badge) { + Players.prototype.addBadge = function(badge) { if (this.badges !== null) { - if (!this.hasBadge(badge)) + if (!this.hasBadge(badge)) { this.badges += '-' + badge; + } } else { this.badges = badge; } @@ -70,15 +78,16 @@ module.exports = (sequelize, DataTypes) => { /** * @param {String} badge - The badge to be added to player */ - Players.prototype.hasBadge = function (badge) { - return this.badges === null ? false : this.badges.split('-').includes(badge); - } + Players.prototype.hasBadge = function(badge) { + return this.badges === null ? false : this.badges.split('-') + .includes(badge); + }; /** * @param {("points")} points - A number representating the score * @deprecated 2.1.0 Directly use score attribute from entity */ - Players.prototype.setPoints = function (points) { + Players.prototype.setPoints = function(points) { this.score = points; }; @@ -86,12 +95,13 @@ module.exports = (sequelize, DataTypes) => { * @param {("pointsWeek")} pointsWeek - A number representating the weekly score * @deprecated 2.1.0 Directly use weeklyScore attribute from entity */ - Players.prototype.setPointsWeek = function (points) { + Players.prototype.setPointsWeek = function(points) { this.weeklyScore = points; }; Players.beforeSave((instance, options) => { - instance.setDataValue('updatedAt', require('moment')().format('YYYY-MM-DD HH:mm:ss')); + instance.setDataValue('updatedAt', + require('moment')().format('YYYY-MM-DD HH:mm:ss')); }); /** @@ -100,15 +110,15 @@ module.exports = (sequelize, DataTypes) => { Players.getById = async (id) => { const query = `SELECT * FROM (SELECT id, - RANK() OVER (ORDER BY score desc) rank, + RANK() OVER (ORDER BY score desc) rank, RANK() OVER (ORDER BY weeklyScore desc) weeklyRank FROM players) WHERE id = :id`; return await sequelize.query(query, { replacements: { - id: id + id: id, }, - type: sequelize.QueryTypes.SELECT + type: sequelize.QueryTypes.SELECT, }); }; @@ -118,36 +128,36 @@ module.exports = (sequelize, DataTypes) => { Players.getByRank = async (rank) => { const query = `SELECT * FROM (SELECT entity_id, - RANK() OVER (ORDER BY score desc) rank, + RANK() OVER (ORDER BY score desc) rank, RANK() OVER (ORDER BY weeklyScore desc) weeklyRank FROM players) WHERE rank = :rank`; return await sequelize.query(query, { replacements: { - rank: rank + rank: rank, }, - type: sequelize.QueryTypes.SELECT + type: sequelize.QueryTypes.SELECT, }); }; /** * @return {Number} Return the experience needed to level up. */ - Players.prototype.getExperienceNeededToLevelUp = function () { + Players.prototype.getExperienceNeededToLevelUp = function() { return JsonReader.models.players.xp[this.level + 1]; }; /** - * @returns {Number} Return the experience used to level up. + * @return {Number} Return the experience used to level up. */ - Players.prototype.getExperienceUsedToLevelUp = function () { + Players.prototype.getExperienceUsedToLevelUp = function() { return JsonReader.models.players.xp[this.level]; }; /** * @param {Number} score */ - Players.prototype.addScore = function (score) { + Players.prototype.addScore = function(score) { this.score += score; this.setScore(this.score); }; @@ -155,7 +165,7 @@ module.exports = (sequelize, DataTypes) => { /** * @param {Number} score */ - Players.prototype.setScore = function (score) { + Players.prototype.setScore = function(score) { if (score > 0) { this.score = score; } else { @@ -166,7 +176,7 @@ module.exports = (sequelize, DataTypes) => { /** * @param {Number} money */ - Players.prototype.addMoney = function (money) { + Players.prototype.addMoney = function(money) { this.money += money; this.setMoney(this.money); }; @@ -174,7 +184,7 @@ module.exports = (sequelize, DataTypes) => { /** * @param {Number} money */ - Players.prototype.setMoney = function (money) { + Players.prototype.setMoney = function(money) { if (money > 0) { this.money = money; } else { @@ -185,7 +195,7 @@ module.exports = (sequelize, DataTypes) => { /** * @param {Number} weeklyScore */ - Players.prototype.addWeeklyScore = function (weeklyScore) { + Players.prototype.addWeeklyScore = function(weeklyScore) { this.weeklyScore += weeklyScore; this.setWeeklyScore(this.weeklyScore); }; @@ -193,7 +203,7 @@ module.exports = (sequelize, DataTypes) => { /** * @param {Number} weeklyScore */ - Players.prototype.setWeeklyScore = function (weeklyScore) { + Players.prototype.setWeeklyScore = function(weeklyScore) { if (weeklyScore > 0) { this.weeklyScore = weeklyScore; } else { @@ -204,7 +214,7 @@ module.exports = (sequelize, DataTypes) => { /** * @param {"fr"|"en"} language */ - Players.prototype.getPseudo = async function (language) { + Players.prototype.getPseudo = async function(language) { await this.setPseudo(language); return this.pseudo; }; @@ -212,30 +222,29 @@ module.exports = (sequelize, DataTypes) => { /** * @param {Number} hours */ - Players.prototype.fastForward = async function (hours) { - let moment = require('moment'); - let lastReport = new moment(this.lastReportAt).subtract(hours, 'h'); + Players.prototype.fastForward = async function(hours) { + const moment = require('moment'); + const lastReport = new moment(this.lastReportAt).subtract(hours, 'h'); this.lastReportAt = lastReport; }; /** * @param {"fr"|"en"} language */ - Players.prototype.setPseudo = async function (language) { - let entity = await this.getEntity(); + Players.prototype.setPseudo = async function(language) { + const entity = await this.getEntity(); if (entity.discordUser_id !== undefined && - client.users.cache.get(entity.discordUser_id) !== null) { + client.users.cache.get(entity.discordUser_id) !== null) { this.pseudo = client.users.cache.get(entity.discordUser_id).username; } else { this.pseudo = JsonReader.models.players.getTranslation(language).pseudo; } }; - /** * @return {Boolean} True if the player has levelUp false otherwise */ - Players.prototype.needLevelUp = function () { + Players.prototype.needLevelUp = function() { if ((this.experience >= this.getExperienceNeededToLevelUp())) { // TODO 2.0 Do the level up here ? return true; @@ -310,9 +319,11 @@ module.exports = (sequelize, DataTypes) => { * @param {Number} timeMalus * @param {String} effectMalus */ - Players.prototype.setLastReportWithEffect = function (time, timeMalus, effectMalus) { - this.lastReport = time + minutesToMilliseconds(timeMalus) + JsonReader.models.players.effectMalus[effectMalus]; + Players.prototype.setLastReportWithEffect = function( + time, timeMalus, effectMalus) { + this.lastReport = time + minutesToMilliseconds(timeMalus) + + JsonReader.models.players.effectMalus[effectMalus]; }; return Players; -}; \ No newline at end of file +}; diff --git a/src/core/models/Possibilities.js b/src/core/models/Possibilities.js index 2d7e2ae86..308a64a4f 100644 --- a/src/core/models/Possibilities.js +++ b/src/core/models/Possibilities.js @@ -1,10 +1,17 @@ -module.exports = (sequelize, DataTypes) => { - - const Possibilities = sequelize.define('Possibilities', { +/** + * @typedef {import('sequelize').Sequelize} Sequelize + * @typedef {import('sequelize/types')} DataTypes + * + * @param {Sequelize} Sequelize + * @param {DataTypes} DataTypes + * @returns + */ +module.exports = (Sequelize, DataTypes) => { + const Possibilities = Sequelize.define('Possibilities', { id: { type: DataTypes.INTEGER, primaryKey: true, - autoIncrement: true + autoIncrement: true, }, possibilityKey: { type: DataTypes.STRING(32), @@ -28,29 +35,30 @@ module.exports = (sequelize, DataTypes) => { type: DataTypes.BOOLEAN, }, fr: { - type: DataTypes.TEXT + type: DataTypes.TEXT, }, en: { - type: DataTypes.TEXT + type: DataTypes.TEXT, }, event_id: { type: DataTypes.INTEGER, }, updatedAt: { type: DataTypes.DATE, - defaultValue: require('moment')().format('YYYY-MM-DD HH:mm:ss') + defaultValue: require('moment')().format('YYYY-MM-DD HH:mm:ss'), }, createdAt: { type: DataTypes.DATE, - defaultValue: require('moment')().format('YYYY-MM-DD HH:mm:ss') - } + defaultValue: require('moment')().format('YYYY-MM-DD HH:mm:ss'), + }, }, { tableName: 'possibilities', - freezeTableName: true + freezeTableName: true, }); Possibilities.beforeSave((instance, options) => { - instance.setDataValue('updatedAt', require('moment')().format('YYYY-MM-DD HH:mm:ss')); + instance.setDataValue('updatedAt', + require('moment')().format('YYYY-MM-DD HH:mm:ss')); }); return Possibilities; diff --git a/src/core/models/Potions.js b/src/core/models/Potions.js index 1d7f9f4e0..3599949e0 100644 --- a/src/core/models/Potions.js +++ b/src/core/models/Potions.js @@ -1,58 +1,66 @@ -module.exports = (sequelize, DataTypes) => { - - const Potions = sequelize.define('Potions', { +/** + * @typedef {import('sequelize').Sequelize} Sequelize + * @typedef {import('sequelize/types')} DataTypes + * + * @param {Sequelize} Sequelize + * @param {DataTypes} DataTypes + * @returns + */ +module.exports = (Sequelize, DataTypes) => { + const Potions = Sequelize.define('Potions', { id: { type: DataTypes.INTEGER, primaryKey: true, - autoIncrement: true + autoIncrement: true, }, rarity: { type: DataTypes.INTEGER, - defaultValue: JsonReader.models.potions.rarity + defaultValue: JsonReader.models.potions.rarity, }, power: { type: DataTypes.INTEGER, - defaultValue: JsonReader.models.potions.power + defaultValue: JsonReader.models.potions.power, }, nature: { type: DataTypes.INTEGER, - defaultValue: JsonReader.models.potions.nature + defaultValue: JsonReader.models.potions.nature, }, fr: { - type: DataTypes.TEXT + type: DataTypes.TEXT, }, en: { - type: DataTypes.TEXT + type: DataTypes.TEXT, }, updatedAt: { type: DataTypes.DATE, - defaultValue: require('moment')().format('YYYY-MM-DD HH:mm:ss') + defaultValue: require('moment')().format('YYYY-MM-DD HH:mm:ss'), }, createdAt: { type: DataTypes.DATE, - defaultValue: require('moment')().format('YYYY-MM-DD HH:mm:ss') - } + defaultValue: require('moment')().format('YYYY-MM-DD HH:mm:ss'), + }, }, { tableName: 'potions', - freezeTableName: true + freezeTableName: true, }); Potions.beforeSave((instance, options) => { - instance.setDataValue('updatedAt', require('moment')().format('YYYY-MM-DD HH:mm:ss')); + instance.setDataValue('updatedAt', + require('moment')().format('YYYY-MM-DD HH:mm:ss')); }); /** * @param {("fr"|"en")} language - The language the inventory has to be displayed in */ - Potions.prototype.toFieldObject = async function (language) { + Potions.prototype.toFieldObject = async function(language) { return { name: JsonReader.items.getTranslation(language).potions.fieldName, value: (this.id === 0) ? this[language] : format( - JsonReader.items.getTranslation(language).potions.fieldValue, { - name: this[language], - rarity: this.getRarityTranslation(language), - nature: this.getNatureTranslation(language), - }), + JsonReader.items.getTranslation(language).potions.fieldValue, { + name: this[language], + rarity: this.getRarityTranslation(language), + nature: this.getNatureTranslation(language), + }), }; }; @@ -60,21 +68,21 @@ module.exports = (sequelize, DataTypes) => { * @param {("fr"|"en")} language - The language the potion has to be displayed in * @return {String} */ - Potions.prototype.toString = function (language) { + Potions.prototype.toString = function(language) { return (this.id === 0) ? this[language] : format( - JsonReader.items.getTranslation(language).potions.fieldValue, { - name: this[language], - rarity: this.getRarityTranslation(language), - nature: this.getNatureTranslation(language), - }); + JsonReader.items.getTranslation(language).potions.fieldValue, { + name: this[language], + rarity: this.getRarityTranslation(language), + nature: this.getNatureTranslation(language), + }); }; /** - * + * * @return {String} */ - Potions.prototype.getEmoji = function () { - let emoji = this.fr.split(' ')[0]; + Potions.prototype.getEmoji = function() { + const emoji = this.fr.split(' ')[0]; return emoji.includes('<') ? emoji.split(':')[2].replace('>', '') : emoji; }; @@ -82,7 +90,7 @@ module.exports = (sequelize, DataTypes) => { * @param {("fr"|"en")} language * @return {String} */ - Potions.prototype.getRarityTranslation = function (language) { + Potions.prototype.getRarityTranslation = function(language) { return JsonReader.items.getTranslation(language).rarities[this.rarity]; }; @@ -90,16 +98,18 @@ module.exports = (sequelize, DataTypes) => { * @param {("fr"|"en")} language * @return {String} */ - Potions.prototype.getNatureTranslation = function (language) { - return format(JsonReader.items.getTranslation(language).potions.natures[this.nature], { - power: this.power - }); + Potions.prototype.getNatureTranslation = function(language) { + return format( + JsonReader.items.getTranslation(language).potions.natures[this.nature], + { + power: this.power, + }); }; /** * @return {Number} */ - Potions.prototype.getAttack = function () { + Potions.prototype.getAttack = function() { if (this.nature === 3) { return this.power; } @@ -109,7 +119,7 @@ module.exports = (sequelize, DataTypes) => { /** * @return {Number} */ - Potions.prototype.getDefense = function () { + Potions.prototype.getDefense = function() { if (this.nature === 4) { return this.power; } @@ -119,7 +129,7 @@ module.exports = (sequelize, DataTypes) => { /** * @return {Number} */ - Potions.prototype.getSpeed = function () { + Potions.prototype.getSpeed = function() { if (this.nature === 2) { return this.power; } @@ -129,9 +139,10 @@ module.exports = (sequelize, DataTypes) => { /** * @return {Boolean} */ - Potions.prototype.isFightPotion = function () { - return this.getSpeed() !== 0 || this.getAttack() !== 0 || this.getDefense() !== 0; + Potions.prototype.isFightPotion = function() { + return this.getSpeed() !== 0 || this.getAttack() !== 0 || + this.getDefense() !== 0; }; return Potions; -}; \ No newline at end of file +}; diff --git a/src/core/models/Servers.js b/src/core/models/Servers.js index 6cc86cbc4..4cc16194d 100644 --- a/src/core/models/Servers.js +++ b/src/core/models/Servers.js @@ -1,47 +1,55 @@ -module.exports = (sequelize, DataTypes) => { - - const Servers = sequelize.define('Servers', { +/** + * @typedef {import('sequelize').Sequelize} Sequelize + * @typedef {import('sequelize/types')} DataTypes + * + * @param {Sequelize} Sequelize + * @param {DataTypes} DataTypes + * @returns + */ +module.exports = (Sequelize, DataTypes) => { + const Servers = Sequelize.define('Servers', { id: { type: DataTypes.INTEGER, primaryKey: true, - autoIncrement: true + autoIncrement: true, }, prefix: { type: DataTypes.STRING(10), - defaultValue: JsonReader.models.servers.prefix + defaultValue: JsonReader.models.servers.prefix, }, language: { type: DataTypes.STRING(2), - defaultValue: JsonReader.models.servers.language + defaultValue: JsonReader.models.servers.language, }, discordGuild_id: { - type: DataTypes.STRING(64) + type: DataTypes.STRING(64), }, updatedAt: { type: DataTypes.DATE, - defaultValue: require('moment')().format('YYYY-MM-DD HH:mm:ss') + defaultValue: require('moment')().format('YYYY-MM-DD HH:mm:ss'), }, createdAt: { type: DataTypes.DATE, - defaultValue: require('moment')().format('YYYY-MM-DD HH:mm:ss') - } + defaultValue: require('moment')().format('YYYY-MM-DD HH:mm:ss'), + }, }, { tableName: 'servers', - freezeTableName: true + freezeTableName: true, }); Servers.beforeSave((instance, options) => { - instance.setDataValue('updatedAt', require('moment')().format('YYYY-MM-DD HH:mm:ss')); + instance.setDataValue('updatedAt', + require('moment')().format('YYYY-MM-DD HH:mm:ss')); }); - /** - * @param {String} discordGuild_id + * @param {String} discordGuildId + * @return {Servers} */ - Servers.getOrRegister = (discordGuild_id) => { + Servers.getOrRegister = (discordGuildId) => { return Servers.findOrCreate({ where: { - discordGuild_id: discordGuild_id + discordGuild_id: discordGuildId, }, }); }; diff --git a/src/core/models/Weapons.js b/src/core/models/Weapons.js index 85b52c3df..8482b2879 100644 --- a/src/core/models/Weapons.js +++ b/src/core/models/Weapons.js @@ -1,74 +1,82 @@ -module.exports = (sequelize, DataTypes) => { - - const Weapons = sequelize.define('Weapons', { +/** + * @typedef {import('sequelize').Sequelize} Sequelize + * @typedef {import('sequelize/types')} DataTypes + * + * @param {Sequelize} Sequelize + * @param {DataTypes} DataTypes + * @returns + */ +module.exports = (Sequelize, DataTypes) => { + const Weapons = Sequelize.define('Weapons', { id: { type: DataTypes.INTEGER, primaryKey: true, - autoIncrement: true + autoIncrement: true, }, rarity: { type: DataTypes.INTEGER, - defaultValue: JsonReader.models.weapons.rarity + defaultValue: JsonReader.models.weapons.rarity, }, rawAttack: { type: DataTypes.INTEGER, - defaultValue: JsonReader.models.weapons.rawAttack + defaultValue: JsonReader.models.weapons.rawAttack, }, rawDefense: { type: DataTypes.INTEGER, - defaultValue: JsonReader.models.weapons.rawDefense + defaultValue: JsonReader.models.weapons.rawDefense, }, rawSpeed: { type: DataTypes.INTEGER, - defaultValue: JsonReader.models.weapons.rawSpeed + defaultValue: JsonReader.models.weapons.rawSpeed, }, attack: { type: DataTypes.INTEGER, - defaultValue: JsonReader.models.weapons.attack + defaultValue: JsonReader.models.weapons.attack, }, defense: { type: DataTypes.INTEGER, - defaultValue: JsonReader.models.weapons.defense + defaultValue: JsonReader.models.weapons.defense, }, speed: { type: DataTypes.INTEGER, - defaultValue: JsonReader.models.weapons.speed + defaultValue: JsonReader.models.weapons.speed, }, fr: { - type: DataTypes.TEXT + type: DataTypes.TEXT, }, en: { - type: DataTypes.TEXT + type: DataTypes.TEXT, }, updatedAt: { type: DataTypes.DATE, - defaultValue: require('moment')().format('YYYY-MM-DD HH:mm:ss') + defaultValue: require('moment')().format('YYYY-MM-DD HH:mm:ss'), }, createdAt: { type: DataTypes.DATE, - defaultValue: require('moment')().format('YYYY-MM-DD HH:mm:ss') - } + defaultValue: require('moment')().format('YYYY-MM-DD HH:mm:ss'), + }, }, { tableName: 'weapons', - freezeTableName: true + freezeTableName: true, }); Weapons.beforeSave((instance, options) => { - instance.setDataValue('updatedAt', require('moment')().format('YYYY-MM-DD HH:mm:ss')); + instance.setDataValue('updatedAt', + require('moment')().format('YYYY-MM-DD HH:mm:ss')); }); /** * @param {("fr"|"en")} language - The language the inventory has to be displayed in */ - Weapons.prototype.toFieldObject = async function (language) { + Weapons.prototype.toFieldObject = async function(language) { return { name: JsonReader.items.getTranslation(language).weapons.fieldName, value: (this.id === 0) ? this[language] : format( - JsonReader.items.getTranslation(language).weapons.fieldValue, { - name: this[language], - rarity: this.getRarityTranslation(language), - values: this.getValues(language), - }), + JsonReader.items.getTranslation(language).weapons.fieldValue, { + name: this[language], + rarity: this.getRarityTranslation(language), + values: this.getValues(language), + }), }; }; @@ -76,44 +84,44 @@ module.exports = (sequelize, DataTypes) => { * @param {("fr"|"en")} language - The language the weapon has to be displayed in * @return {String} */ - Weapons.prototype.toString = function (language) { + Weapons.prototype.toString = function(language) { return (this.id === 0) ? this[language] : format( - JsonReader.items.getTranslation(language).weapons.fieldValue, { - name: this[language], - rarity: this.getRarityTranslation(language), - values: this.getValues(language), - }); + JsonReader.items.getTranslation(language).weapons.fieldValue, { + name: this[language], + rarity: this.getRarityTranslation(language), + values: this.getValues(language), + }); }; /** * @param {("fr"|"en")} language * @return {String} */ - Weapons.prototype.getRarityTranslation = function (language) { + Weapons.prototype.getRarityTranslation = function(language) { return JsonReader.items.getTranslation(language).rarities[this.rarity]; }; /** * Return the property from rawProperty and property modifier - * @returns {Number} + * @return {Number} */ - Weapons.prototype.getAttack = function () { + Weapons.prototype.getAttack = function() { return JsonReader.items.power[this.rarity][this.rawAttack] + this.attack; }; /** * Return the property from rawProperty and property modifier - * @returns {Number} + * @return {Number} */ - Weapons.prototype.getDefense = function () { + Weapons.prototype.getDefense = function() { return JsonReader.items.power[this.rarity][this.rawDefense] + this.defense; }; /** * Return the property from rawProperty and property modifier - * @returns {Number} + * @return {Number} */ - Weapons.prototype.getSpeed = function () { + Weapons.prototype.getSpeed = function() { return JsonReader.items.power[this.rarity][this.rawSpeed] + this.speed; }; @@ -121,19 +129,22 @@ module.exports = (sequelize, DataTypes) => { * @param {("fr"|"en")} language * @return {String} */ - Weapons.prototype.getValues = function (language) { - let values = []; + Weapons.prototype.getValues = function(language) { + const values = []; if (this.getAttack() !== 0) { - values.push(format(JsonReader.items.getTranslation(language).attack, { attack: this.getAttack() })); + values.push(format(JsonReader.items.getTranslation(language).attack, + {attack: this.getAttack()})); } if (this.getDefense() !== 0) { - values.push(format(JsonReader.items.getTranslation(language).defense, { defense: this.getDefense() })); + values.push(format(JsonReader.items.getTranslation(language).defense, + {defense: this.getDefense()})); } if (this.getSpeed() !== 0) { - values.push(format(JsonReader.items.getTranslation(language).speed, { speed: this.getSpeed() })); + values.push(format(JsonReader.items.getTranslation(language).speed, + {speed: this.getSpeed()})); } return values.join(' '); diff --git a/src/core/repositories/GuildRepository.js b/src/core/repositories/GuildRepository.js index 14f63ece3..2ac1997e4 100644 --- a/src/core/repositories/GuildRepository.js +++ b/src/core/repositories/GuildRepository.js @@ -1,201 +1,196 @@ - - // TODO 2.0 Legacy code - // deleteGuild(guildId) { - // sql.all(`DELETE FROM guild WHERE guildId = ${guildId}`) - // } - // - // /** - // * Get the total number of players in the database - // * @returns {Integer} - The number of players - // */ - // async getNumberOfMembersWithGuildId(guildId) { - // return sql.get(`SELECT COUNT(*) as count FROM player WHERE guildId = ?`, ["" + guildId]).then(number => { - // return number.count - // }).catch(error => { //there is no database - // console.error(error) - // return 0; - // }) - // } - // - // /** - // * Allow to retrieve all players from a guild - // * @returns {*} - All players from the guild - // */ - // async getGuildMembers(guildId) { - // let MembersArray = Array(); - // let i = 0; - // return sql.all(`SELECT *FROM(SELECT *, ROW_NUMBER () OVER (ORDER BY score desc) as rank, ROW_NUMBER () OVER (ORDER BY weeklyScore desc) as weeklyRank FROM entity JOIN player on entity.id = player.discordId) WHERE guildId = ? ORDER BY score DESC`, [guildId]).then(data => { - // data.forEach(function (player) { - // MembersArray[i] = new Player(player.maxHealth, player.health, player.attack, player.defense, player.speed, - // player.discordId, player.score, player.level, player.experience, player.money, player.effect, player.lastReport, player.badges, player.rank, player.weeklyScore, - // player.weeklyRank, player.guildId) - // i++; - // }); - // return MembersArray; - // }); - // } - // - // /** - // * Return a promise that will contain the Guild that sent a message once it has been resolved - // * @param message - The message that caused the function to be called. Used to retrieve the author of the message - // * @returns {promise} - The promise that will be resolved into a Guild - // */ - // async getCurrentGuild(message) { - // return sql.get(`SELECT * FROM player WHERE discordId = ?`, ["" + message.author.id]).then(Player => { - // if (!Player) { //Player is not in the database - // return null; - // } else { //Player is in the database - // let guild = this.getGuildById(Player.guildId); - // return guild; - // } - // }).catch(error => { //there is no database - // console.error(error) - // return false; - // }) - // } - // - // /** - // * Return a promise that will contain the Guild - // * @param id - The user id - // * @returns {promise} - The promise that will be resolved into a Guild - // */ - // async getGuildByUserId(id) { - // return sql.get(`SELECT * FROM player WHERE discordId = ?`, ["" + id]).then(Player => { - // if (!Player) { //Player is not in the database - // return null; - // } else { //Player is in the database - // let guild = this.getGuildById(Player.guildId); - // return guild; - // } - // }).catch(error => { //there is no database - // console.error(error) - // return false; - // }) - // } - // - // /** - // * Return a promise that will contain the Guild that sent a message once it has been resolved - // * @param chief - The guild chief - // * @returns {promise} - The promise that will be resolved into a Guild - // */ - // async getGuildByChiefId(chief) { - // return sql.get(`SELECT * FROM guild WHERE chief = ?`, ["" + chief]).then(guild => { - // if (!guild) { //Guild is not in the database - // console.log(`unknown guild loaded from ${chief}`); - // return null; - // } else { //Guild is in the database - // console.log(`guild loaded from player ${chief}`); - // return new Guild(guild.guildId, guild.name, guild.chief, guild.score, guild.level, guild.experience, guild.lastInvocation); - // } - // }).catch(error => { //there is no database - // console.error(error) - // return false; - // }) - // } - // - // /** - // * Return a promise that will contain the Guild that sent a message once it has been resolved - // * @param name - The guild name - // * @returns {promise} - The promise that will be resolved into a Guild - // */ - // async getGuildByName(name) { - // return sql.get(`SELECT * FROM guild WHERE name = ?`, ["" + name]).then(guild => { - // if (!guild) { //Guild is not in the database - // console.log(`unknown guild loaded from name ${name}`); - // return null; - // } else { //Guild is in the database - // console.log(`guild loaded from name ${name}`); - // return new Guild(guild.guildId, guild.name, guild.chief, guild.score, guild.level, guild.experience, guild.lastInvocation); - // } - // }).catch(error => { //there is no database - // console.error(error) - // return false; - // }) - // } - // - // - // - // /** - // * Return a promise that will contain the Guild that sent a message once it has been resolved - // * @param id - The id of the guild - // * @returns {promise} - The promise that will be resolved into a Guild - // */ - // async getGuildById(id) { - // return sql.get(`SELECT * FROM guild WHERE guildId = ?`, ["" + id]).then(guild => { - // if (!guild) { //Guild is not in the database - // console.log(`guild unknown : ${id}`); - // return null; - // } else { //Guild is in the database - // console.log(`guild loaded : ${id}`); - // return new Guild(guild.guildId, guild.name, guild.chief, guild.score, guild.level, guild.experience, guild.lastInvocation); - // } - // }).catch(error => { //there is no database - // console.error(error) - // return false; - // }) - // } - // - // /** - // * Return a promise that will contain the Guild that sent a message once it has been resolved - // * @returns {boolean} - If guild name is available - // */ - // async checkNewNameAvailability(name) { - // return sql.get(`SELECT * FROM guild WHERE name = ?`, ["" + name]).then(name => { - // if (!name) { //name is not in the database - // return true; - // } else { //name is in the database - // return false; - // } - // }).catch(error => { //there is no database - // console.error(error) - // return false; - // }) - // } - // - // - // /** - // * Return a Guild created from the defaul values - // * @param message - The message that caused the function to be called. Used to retrieve the timestamp of the message - // * @returns {*} - A new Guild - // */ - // async getNewGuild(message, chief, guildName) { - // console.log('Generating a new Guild...'); - // return new Guild(message.id, guildName, chief, 0, 0, 0, message.createdTimestamp); - // } - // - // - // /** - // * Allow to save the current state of a Guild in the database - // * @param {*} Guild - The Guild that has to be saved - // */ - // updateGuild(Guild) { - // console.log("Updating Guild ..."); - // sql.run(`UPDATE guild SET name = ?, chief = ?, score = ?, level = ?, experience = ?, lastInvocation = ? WHERE guildId = ?`, - // ["" + Guild.name, Guild.chief, Guild.score, Guild.level, Guild.experience, Guild.lastInvocation, Guild.guildId]).catch(console.error); - // console.log("Guild updated !"); - // } - // - // /** - // * Allow to save the new score of a Guild without saving the other attributes - // * @param {*} Guild - The Guild that has to be saved - // */ - // updateGuildScore(Guild) { - // console.log("Updating Guild ..."); - // sql.run(`UPDATE guild SET score = ? WHERE guildId = ?`, [Guild.score, Guild.guildId]).catch(console.error); - // console.log("Guild updated !"); - // } - // - // /** - // * Allow to save a new Guild in the database - // * @param {*} Guild - The Guild that has to be saved - // */ - // addGuild(guild) { - // console.log("Creating Guild ..."); - // sql.run(`INSERT INTO guild (guildId, name, chief, score, level, experience, lastInvocation) VALUES (?, ?, ?, ?, ?, ?, ?)`, - // ["" + guild.guildId, "" + guild.name, "" + guild.chief, guild.score, guild.level, guild.experience, guild.lastInvocation]); - // console.log("Guild created !"); - // } - -} - -module.exports = GuildRepository; +// TODO 2.0 Legacy code +// deleteGuild(guildId) { +// sql.all(`DELETE FROM guild WHERE guildId = ${guildId}`) +// } +// +// /** +// * Get the total number of players in the database +// * @returns {Integer} - The number of players +// */ +// async getNumberOfMembersWithGuildId(guildId) { +// return sql.get(`SELECT COUNT(*) as count FROM player WHERE guildId = ?`, ["" + guildId]).then(number => { +// return number.count +// }).catch(error => { //there is no database +// console.error(error) +// return 0; +// }) +// } +// +// /** +// * Allow to retrieve all players from a guild +// * @returns {*} - All players from the guild +// */ +// async getGuildMembers(guildId) { +// let MembersArray = Array(); +// let i = 0; +// return sql.all(`SELECT *FROM(SELECT *, ROW_NUMBER () OVER (ORDER BY score desc) as rank, ROW_NUMBER () OVER (ORDER BY weeklyScore desc) as weeklyRank FROM entity JOIN player on entity.id = player.discordId) WHERE guildId = ? ORDER BY score DESC`, [guildId]).then(data => { +// data.forEach(function (player) { +// MembersArray[i] = new Player(player.maxHealth, player.health, player.attack, player.defense, player.speed, +// player.discordId, player.score, player.level, player.experience, player.money, player.effect, player.lastReport, player.badges, player.rank, player.weeklyScore, +// player.weeklyRank, player.guildId) +// i++; +// }); +// return MembersArray; +// }); +// } +// +// /** +// * Return a promise that will contain the Guild that sent a message once it has been resolved +// * @param message - The message that caused the function to be called. Used to retrieve the author of the message +// * @returns {promise} - The promise that will be resolved into a Guild +// */ +// async getCurrentGuild(message) { +// return sql.get(`SELECT * FROM player WHERE discordId = ?`, ["" + message.author.id]).then(Player => { +// if (!Player) { //Player is not in the database +// return null; +// } else { //Player is in the database +// let guild = this.getGuildById(Player.guildId); +// return guild; +// } +// }).catch(error => { //there is no database +// console.error(error) +// return false; +// }) +// } +// +// /** +// * Return a promise that will contain the Guild +// * @param id - The user id +// * @returns {promise} - The promise that will be resolved into a Guild +// */ +// async getGuildByUserId(id) { +// return sql.get(`SELECT * FROM player WHERE discordId = ?`, ["" + id]).then(Player => { +// if (!Player) { //Player is not in the database +// return null; +// } else { //Player is in the database +// let guild = this.getGuildById(Player.guildId); +// return guild; +// } +// }).catch(error => { //there is no database +// console.error(error) +// return false; +// }) +// } +// +// /** +// * Return a promise that will contain the Guild that sent a message once it has been resolved +// * @param chief - The guild chief +// * @returns {promise} - The promise that will be resolved into a Guild +// */ +// async getGuildByChiefId(chief) { +// return sql.get(`SELECT * FROM guild WHERE chief = ?`, ["" + chief]).then(guild => { +// if (!guild) { //Guild is not in the database +// console.log(`unknown guild loaded from ${chief}`); +// return null; +// } else { //Guild is in the database +// console.log(`guild loaded from player ${chief}`); +// return new Guild(guild.guildId, guild.name, guild.chief, guild.score, guild.level, guild.experience, guild.lastInvocation); +// } +// }).catch(error => { //there is no database +// console.error(error) +// return false; +// }) +// } +// +// /** +// * Return a promise that will contain the Guild that sent a message once it has been resolved +// * @param name - The guild name +// * @returns {promise} - The promise that will be resolved into a Guild +// */ +// async getGuildByName(name) { +// return sql.get(`SELECT * FROM guild WHERE name = ?`, ["" + name]).then(guild => { +// if (!guild) { //Guild is not in the database +// console.log(`unknown guild loaded from name ${name}`); +// return null; +// } else { //Guild is in the database +// console.log(`guild loaded from name ${name}`); +// return new Guild(guild.guildId, guild.name, guild.chief, guild.score, guild.level, guild.experience, guild.lastInvocation); +// } +// }).catch(error => { //there is no database +// console.error(error) +// return false; +// }) +// } +// +// +// +// /** +// * Return a promise that will contain the Guild that sent a message once it has been resolved +// * @param id - The id of the guild +// * @returns {promise} - The promise that will be resolved into a Guild +// */ +// async getGuildById(id) { +// return sql.get(`SELECT * FROM guild WHERE guildId = ?`, ["" + id]).then(guild => { +// if (!guild) { //Guild is not in the database +// console.log(`guild unknown : ${id}`); +// return null; +// } else { //Guild is in the database +// console.log(`guild loaded : ${id}`); +// return new Guild(guild.guildId, guild.name, guild.chief, guild.score, guild.level, guild.experience, guild.lastInvocation); +// } +// }).catch(error => { //there is no database +// console.error(error) +// return false; +// }) +// } +// +// /** +// * Return a promise that will contain the Guild that sent a message once it has been resolved +// * @returns {boolean} - If guild name is available +// */ +// async checkNewNameAvailability(name) { +// return sql.get(`SELECT * FROM guild WHERE name = ?`, ["" + name]).then(name => { +// if (!name) { //name is not in the database +// return true; +// } else { //name is in the database +// return false; +// } +// }).catch(error => { //there is no database +// console.error(error) +// return false; +// }) +// } +// +// +// /** +// * Return a Guild created from the defaul values +// * @param message - The message that caused the function to be called. Used to retrieve the timestamp of the message +// * @returns {*} - A new Guild +// */ +// async getNewGuild(message, chief, guildName) { +// console.log('Generating a new Guild...'); +// return new Guild(message.id, guildName, chief, 0, 0, 0, message.createdTimestamp); +// } +// +// +// /** +// * Allow to save the current state of a Guild in the database +// * @param {*} Guild - The Guild that has to be saved +// */ +// updateGuild(Guild) { +// console.log("Updating Guild ..."); +// sql.run(`UPDATE guild SET name = ?, chief = ?, score = ?, level = ?, experience = ?, lastInvocation = ? WHERE guildId = ?`, +// ["" + Guild.name, Guild.chief, Guild.score, Guild.level, Guild.experience, Guild.lastInvocation, Guild.guildId]).catch(console.error); +// console.log("Guild updated !"); +// } +// +// /** +// * Allow to save the new score of a Guild without saving the other attributes +// * @param {*} Guild - The Guild that has to be saved +// */ +// updateGuildScore(Guild) { +// console.log("Updating Guild ..."); +// sql.run(`UPDATE guild SET score = ? WHERE guildId = ?`, [Guild.score, Guild.guildId]).catch(console.error); +// console.log("Guild updated !"); +// } +// +// /** +// * Allow to save a new Guild in the database +// * @param {*} Guild - The Guild that has to be saved +// */ +// addGuild(guild) { +// console.log("Creating Guild ..."); +// sql.run(`INSERT INTO guild (guildId, name, chief, score, level, experience, lastInvocation) VALUES (?, ?, ?, ?, ?, ?, ?)`, +// ["" + guild.guildId, "" + guild.name, "" + guild.chief, guild.score, guild.level, guild.experience, guild.lastInvocation]); +// console.log("Guild created !"); +// } diff --git a/src/core/repositories/ObjectRepository.js b/src/core/repositories/ObjectRepository.js index 424256bce..f3a699506 100644 --- a/src/core/repositories/ObjectRepository.js +++ b/src/core/repositories/ObjectRepository.js @@ -1,11 +1,11 @@ - - /** - * Choose a random object in the existing ones. (take care of the rarity) - * @return {Promise} - */ - async getRandomWithRarity() { - const desiredRarity = generateRandomRarity(); - const possibleObjects = Object.entries(this.objects).filter(key => this.object[key[0]].rarity === desiredRarity); - const id = possibleObjects[Math.floor(Math.random() * possibleObjects.length)][0]; - return this.objects[id]; - } +// +// /** +// * Choose a random object in the existing ones. (take care of the rarity) +// * @return {Promise} +// */ +// async getRandomWithRarity() { +// const desiredRarity = generateRandomRarity(); +// const possibleObjects = Object.entries(this.objects).filter(key => this.object[key[0]].rarity === desiredRarity); +// const id = possibleObjects[Math.floor(Math.random() * possibleObjects.length)][0]; +// return this.objects[id]; +// } diff --git a/src/core/repositories/PlayerRepository.js b/src/core/repositories/PlayerRepository.js index 74dd41055..ba3a36a89 100644 --- a/src/core/repositories/PlayerRepository.js +++ b/src/core/repositories/PlayerRepository.js @@ -1,427 +1,427 @@ - // TODO 2.0 Legacy code - // async resetWeeklyScoreAndRank() { - // await this.sql.run('UPDATE player SET weeklyScore = ?', 0) - // .catch(console.error); - // } - // - // /** - // * Get the rank of a player on a server - // * @param idList - The list of ids of the players of the server - // * @param id - The id of the player - // * @returns {Integer} - The server rank of the player - // */ - // getServRank(idList, id) { - // return sql.get(`SELECT rank FROM(SELECT *, ROW_NUMBER () OVER (ORDER BY score desc) AS rank FROM entity JOIN player on entity.id = player.discordId AND entity.id IN(${idList}) ) WHERE score > 100 AND id=${id} ORDER BY score DESC`).then(player => { - // return player.rank - // }).catch(error => { //there is no database - // console.error(error) - // return 0; - // }) - // } - // - // /** - // * Get the total number of player in the database that are on the idList given - // * @param {*} idList the list of id of the users of a server - // */ - // getNumberOfServPlayers(idList) { - // return sql.get(`SELECT COUNT(*) AS count FROM player WHERE score >100 AND discordId IN(${idList})`) - // .then(number => { - // return number.count - // }) - // .catch(error => { //there is no database - // console.error(error) - // return 0; - // }); - // } - // - // /** - // * Get the total number of players in the database that played this week - // * @returns {Integer} - The number of players - // */ - // getNumberOfWeeklyPlayers() { - // return sql.get(`SELECT COUNT(*) AS count FROM player WHERE weeklyScore > 0`) - // .then(number => { - // return number.count - // }) - // .catch(error => { //there is no database - // console.error(error) - // return 0; - // }); - // } - // - // /** - // * give to the player that send the message a random item - // * @param {*} message - The message that caused the function to be called. Used to retrieve the channel where the message has been send - // * @param {*} player - The player that is playing - // * @param {boolean} displayNameIfSold - Display the name of the item if the item is sold - // */ - // async giveRandomItem(message, player, displayNameIfSold) { - // let inventoryManager = new InventoryManager(); - // let equipementManager = new EquipementManager(); - // let potionManager = new PotionManager(); - // let objectManager = new ObjectManager(); - // let inventory = await inventoryManager.getCurrentInventory(message); - // let type = this.chooseARandomItemType(); - // switch (type) { - // case "weapon": - // player = await this.giveRandomWeapon(equipementManager, inventory, message, inventoryManager, player, displayNameIfSold); - // break; - // case "armor": - // player = await this.giveRandomArmor(equipementManager, inventory, message, inventoryManager, player, displayNameIfSold); - // break; - // case "object": - // player = await this.giveRandomObject(objectManager, inventory, message, inventoryManager, player, displayNameIfSold); - // break; - // case "potion": - // player = await this.giveRandomPotion(potionManager, inventory, message, inventoryManager, player, displayNameIfSold); - // break; - // default: - // // this is never supposed to occure - // break; - // } - // return player - // } - // - // - // /** - // * give to the player that send the message a random item - // * @param {*} message - The message that caused the function to be called. Used to retrieve the channel where the message has been send - // * @param {*} player - The player that is playing - // */ - // async giveItem(message, player, item) { - // let inventoryManager = new InventoryManager(); - // let equipementManager = new EquipementManager(); - // let potionManager = new PotionManager(); - // let objectManager = new ObjectManager(); - // let inventory = await inventoryManager.getCurrentInventory(message); - // let type = item.type(); - // switch (type) { - // case "weapon": - // player = await this.giveWeapon(equipementManager, inventory, message, inventoryManager, player, item.id); - // break; - // case "armor": - // player = await this.giveArmor(equipementManager, inventory, message, inventoryManager, player, item.id); - // break; - // case "object": - // player = await this.giveObject(objectManager, inventory, message, inventoryManager, player, item.id); - // break; - // case "potion": - // player = await this.givePotion(potionManager, inventory, message, inventoryManager, player, item.id); - // break; - // default: - // message.channel.send("item à donner de type :" + type); - // break; - // } - // return player - // } - // - // - // /** - // * add a SELECTed armor into an inventory and save the result - // * @param {*} equipementManager - The equipement manager class - // * @param {*} inventory - the inventory of the player - // * @param {*} message - The message that caused the function to be called. Used to retrieve the author - // * @param {*} inventoryManager - The inventory manager class - // * @param {*} player - The player that is playing - // * @param {*} id - The id of the armor - // */ - // async giveArmor(equipementManager, inventory, message, inventoryManager, player, id) { - // Text = await chargeText(message); - // let language = await this.detectLanguage(message); - // let armor = await equipementManager.getArmorById(id); - // let neww = equipementManager.getEquipementEfficiency(armor); - // let old = equipementManager.getEquipementEfficiency(equipementManager.getArmorById(inventory.armorId)); - // if (neww > old) { - // inventory.armorId = armor.id; - // message.channel.send(Text.playerManager.newItemEmoji + mentionPlayer(player) + Text.playerManager.newItem + equipementManager.displayArmor(armor, language)); - // inventoryManager.updateInventory(inventory); - // } - // else { - // player = this.sellItem(player, armor, false, message, language); - // } - // return player - // } - // - // - // /** - // * add a SELECTed armor into an inventory and save the result - // * @param {*} equipementManager - The equipement manager class - // * @param {*} inventory - the inventory of the player - // * @param {*} message - The message that caused the function to be called. Used to retrieve the author - // * @param {*} inventoryManager - The inventory manager class - // * @param {*} player - The player that is playing - // * @param {*} id - The id of the weapon - // */ - // async giveWeapon(equipementManager, inventory, message, inventoryManager, player, id) { - // Text = await chargeText(message); - // let language = await this.detectLanguage(message); - // let weapon = await equipementManager.getWeaponById(id); - // let neww = equipementManager.getEquipementEfficiency(weapon); - // let old = equipementManager.getEquipementEfficiency(equipementManager.getWeaponById(inventory.weaponId)); - // if (neww > old) { - // inventory.weaponId = weapon.id; - // message.channel.send(Text.playerManager.newItemEmoji + mentionPlayer(player) + Text.playerManager.newItem + equipementManager.displayWeapon(weapon, language)); - // inventoryManager.updateInventory(inventory); - // } - // else { - // player = this.sellItem(player, weapon, false, message, language); - // } - // return player - // } - // - // - // /** - // * add a SELECTed object into an inventory and save the result - // * @param {*} objectManager - The object manager class - // * @param {*} inventory - the inventory of the player - // * @param {*} message - The message that caused the function to be called. Used to retrieve the author - // * @param {*} inventoryManager - The inventory manager class - // * @param {*} player - The player that is playing - // * @param {*} id - The id of the object - // */ - // async giveObject(objectManager, inventory, message, inventoryManager, player, id) { - // Text = await chargeText(message); - // let language = await this.detectLanguage(message); - // let object = await objectManager.getObjectById(id); - // let neww = objectManager.getObjectEfficiency(object); - // let old = objectManager.getObjectEfficiency(objectManager.getObjectById(inventory.backupItemId)); - // if (neww > old) { - // inventory.backupItemId = object.id; - // message.channel.send(Text.playerManager.newItemEmoji + mentionPlayer(player) + Text.playerManager.newItem + objectManager.displayObject(object, language)); - // inventoryManager.updateInventory(inventory); - // } - // else { - // player = this.sellItem(player, object, false, message, language); - // } - // return player - // } - // - // - // /** - // * add a SELECTed potion into an inventory and save the result - // * @param {*} potionManager - The potion manager class - // * @param {*} inventory - the inventory of the player - // * @param {*} message - The message that caused the function to be called. Used to retrieve the author - // * @param {*} inventoryManager - The inventory manager class - // * @param {*} player - The player that is playing - // * @param {*} id - The id of the potion - // */ - // async givePotion(potionManager, inventory, message, inventoryManager, player, id) { - // Text = await chargeText(message); - // let language = await this.detectLanguage(message); - // let potion = await potionManager.getPotionById(id); - // let neww = potionManager.getPotionEfficiency(potion); - // let old = potionManager.getPotionEfficiency(potionManager.getPotionById(inventory.potionId)); - // if (neww > old) { - // inventory.potionId = potion.id; - // message.channel.send(Text.playerManager.newItemEmoji + mentionPlayer(player) + Text.playerManager.newItem + potionManager.displayPotion(potion, language)); - // inventoryManager.updateInventory(inventory); - // } - // else { - // player = this.sellItem(player, potion, false, message, language); - // } - // return player - // } - // - // - // /** - // * add a random armor into an inventory and save the result - // * @param {*} equipementManager - The equipement manager class - // * @param {*} inventory - the inventory of the player - // * @param {*} message - The message that caused the function to be called. Used to retrieve the author - // * @param {*} inventoryManager - The inventory manager class - // * @param {*} player - The player that is playing - // * @param {boolean} displayNameIfSold - Display the name of the item if the item is sold - // */ - // async giveRandomArmor(equipementManager, inventory, message, inventoryManager, player, displayNameIfSold) { - // Text = await chargeText(message); - // let language = await this.detectLanguage(message); - // let armor = await equipementManager.generateRandomArmor(); - // let neww = equipementManager.getEquipementEfficiency(armor); - // let old = equipementManager.getEquipementEfficiency(equipementManager.getArmorById(inventory.armorId)); - // if (neww > old) { - // inventory.armorId = armor.id; - // message.channel.send(Text.playerManager.newItemEmoji + mentionPlayer(player) + Text.playerManager.newItem + equipementManager.displayArmor(armor, language)); - // inventoryManager.updateInventory(inventory); - // } - // else { - // player = this.sellItem(player, armor, displayNameIfSold, message, language); - // } - // return player - // } - // - // - // /** - // * add a random armor into an inventory and save the result - // * @param {*} equipementManager - The equipement manager class - // * @param {*} inventory - the inventory of the player - // * @param {*} message - The message that caused the function to be called. Used to retrieve the author - // * @param {*} inventoryManager - The inventory manager class - // * @param {*} player - The player that is playing - // * @param {boolean} displayNameIfSold - Display the name of the item if the item is sold - // */ - // async giveRandomWeapon(equipementManager, inventory, message, inventoryManager, player, displayNameIfSold) { - // Text = await chargeText(message); - // let language = await this.detectLanguage(message); - // let weapon = await equipementManager.generateRandomWeapon(); - // let neww = equipementManager.getEquipementEfficiency(weapon); - // let old = equipementManager.getEquipementEfficiency(equipementManager.getWeaponById(inventory.weaponId)); - // if (neww > old) { - // inventory.weaponId = weapon.id; - // message.channel.send(Text.playerManager.newItemEmoji + mentionPlayer(player) + Text.playerManager.newItem + equipementManager.displayWeapon(weapon, language)); - // inventoryManager.updateInventory(inventory); - // } - // else { - // player = this.sellItem(player, weapon, displayNameIfSold, message, language); - // } - // return player - // } - // - // - // /** - // * add a random object into an inventory and save the result - // * @param {*} objectManager - The object manager class - // * @param {*} inventory - the inventory of the player - // * @param {*} message - The message that caused the function to be called. Used to retrieve the author - // * @param {*} inventoryManager - The inventory manager class - // * @param {*} player - The player that is playing - // * @param {boolean} displayNameIfSold - Display the name of the item if the item is sold - // */ - // async giveRandomObject(objectManager, inventory, message, inventoryManager, player, displayNameIfSold) { - // Text = await chargeText(message); - // let language = await this.detectLanguage(message); - // let object = await objectManager.generateRandomObject(); - // let neww = objectManager.getObjectEfficiency(object); - // let old = objectManager.getObjectEfficiency(objectManager.getObjectById(inventory.backupItemId)); - // if (neww > old) { - // inventory.backupItemId = object.id; - // message.channel.send(Text.playerManager.newItemEmoji + mentionPlayer(player) + Text.playerManager.newItem + objectManager.displayObject(object, language)); - // inventoryManager.updateInventory(inventory); - // } - // else { - // player = this.sellItem(player, object, displayNameIfSold, message, language); - // } - // return player - // } - // - // - // /** - // * add a random potion into an inventory and save the result - // * @param {*} potionManager - The potion manager class - // * @param {*} inventory - the inventory of the player - // * @param {*} message - The message that caused the function to be called. Used to retrieve the author - // * @param {*} inventoryManager - The inventory manager class - // * @param {*} player - The player that is playing - // * @param {boolean} displayNameIfSold - Display the name of the item if the item is sold - // */ - // async giveRandomPotion(potionManager, inventory, message, inventoryManager, player, displayNameIfSold) { - // Text = await chargeText(message); - // let language = await this.detectLanguage(message); - // let potion = await potionManager.generateRandomPotion(); - // let neww = potionManager.getPotionEfficiency(potion); - // let old = potionManager.getPotionEfficiency(potionManager.getPotionById(inventory.potionId)); - // if (neww > old) { - // inventory.potionId = potion.id; - // message.channel.send(Text.playerManager.newItemEmoji + mentionPlayer(player) + Text.playerManager.newItem + potionManager.displayPotion(potion, language)); - // inventoryManager.updateInventory(inventory); - // } - // else { - // player = this.sellItem(player, potion, displayNameIfSold, message, language); - // } - // return player - // } - // - // /** - // * Select a random item Type - // * @returns {String} - The type of the item that has been SELECTed - // */ - // chooseARandomItemType() { - // return DefaultValues.itemGenerator.tab[Math.round(Math.random() * (DefaultValues.itemGenerator.max - 1) + 1)]; - // }; - // - // - // /** - // * allow the player to gain some money corresponding to an equipement - // * @param {Item} item - The equipement that has to be sold - // * @param {*} player - The player that will recieve the money - // * @param {boolean} displayName - Displays or not the name of the item - // * @param {*} message - The message that caused the function to be called. Used to retrieve the channel - // * @param {String} language - The language the answer has to be displayed in - // */ - // sellItem(player, item, displayName, message, language) { - // Text = require('../text/' + language); - // let value = item.getValue(); - // console.log("the item has been sold ! " + item.rarity + " / " + item.power); - // player.addMoney(value); - // if (displayName) { - // message.channel.send(Text.playerManager.sellEmoji + mentionPlayer(player) + Text.playerManager.sellItem1 + new ItemManager().getItemSimpleName(item, language) + Text.playerManager.sellItem2 + value + Text.playerManager.sellEnd); - // } else { - // message.channel.send(Text.playerManager.sellEmoji + mentionPlayer(player) + Text.playerManager.sell + value + Text.playerManager.sellEnd); - // } - // return player; - // } - // - // /** - // * Allow to retrieve the data FROM the top between 2 limits - // * @param {Integer} borneinf - The lower limit of the top - // * @param {Integer} bornesup - The uppper limit of the top - // * @returns {*} -The data of the top (an array of players) - // */ - // getTopData(borneinf, bornesup) { - // let playerArray = Array(); - // let i = 0; - // return sql.all(`SELECT *FROM(SELECT *, ROW_NUMBER () OVER (ORDER BY score desc) AS rank, ROW_NUMBER () OVER (ORDER BY weeklyScore desc) AS weeklyRank FROM entity JOIN player on entity.id = player.discordId) WHERE rank >= ? AND rank <= ? AND score > 100 ORDER BY score DESC`, [borneinf, bornesup]).then(data => { - // data.forEach(function (player) { - // playerArray[i] = new Player(player.maxHealth, player.health, player.attack, player.defense, player.speed, - // player.discordId, player.score, player.level, player.experience, player.money, player.effect, player.lastReport, player.badges, player.rank, player.weeklyScore, - // player.weeklyRank, player.guildId) - // i++; - // }); - // return playerArray; - // }); - // } - // - // /** - // * Allow to retrieve the data FROM the top between 2 limits - // * @param {Integer} borneinf - The lower limit of the top - // * @param {Integer} bornesup - The uppper limit of the top - // * @param {String} idList - The list of id where the discord id of the user has to be - // * @returns {*} -The data of the top (an array of players) - // */ - // getTopServData(borneinf, bornesup, idList) { - // let playerArray = Array(); - // let i = 0; - // return sql.all(`SELECT *FROM(SELECT *, ROW_NUMBER () OVER (ORDER BY score desc) AS rank, ROW_NUMBER () OVER (ORDER BY weeklyScore desc) AS weeklyRank FROM entity JOIN player on entity.id = player.discordId AND entity.id IN(${idList}) ) WHERE rank >= ? AND rank <= ? AND score > 100 ORDER BY score DESC`, [borneinf, bornesup]).then(data => { - // data.forEach(function (player) { - // playerArray[i] = new Player(player.maxHealth, player.health, player.attack, player.defense, player.speed, - // player.discordId, player.score, player.level, player.experience, player.money, player.effect, player.lastReport, player.badges, player.rank, player.weeklyScore, - // player.weeklyRank, player.guildId) - // i++; - // }); - // return playerArray; - // }); - // } - // - // /** - // * Allow to retrieve the data FROM the top between 2 limits - // * @param {Integer} borneinf - The lower limit of the top - // * @param {Integer} bornesup - The uppper limit of the top - // * @returns {*} -The data of the top (an array of players) - // */ - // getTopWeekData(borneinf, bornesup) { - // let playerArray = Array(); - // let i = 0; - // return sql.all(`SELECT *FROM(SELECT *, ROW_NUMBER () OVER (ORDER BY score desc) as rank, ROW_NUMBER () OVER (ORDER BY weeklyScore desc) as weeklyRank FROM entity JOIN player on entity.id = player.discordId) WHERE weeklyRank >= ? AND weeklyRank <= ? AND weeklyScore > 0 ORDER BY weeklyScore DESC`, [borneinf, bornesup]).then(data => { - // data.forEach(function (player) { - // playerArray[i] = new Player(player.maxHealth, player.health, player.attack, player.defense, player.speed, - // player.discordId, player.score, player.level, player.experience, player.money, player.effect, player.lastReport, player.badges, player.rank, player.weeklyScore, - // player.weeklyRank, player.guildId) - // i++; - // }); - // return i === 0 ? null : playerArray; - // }); - // } - // - // function mentionPlayer(player) { - // return "<@" + player.discordId + ">"; - // } +// TODO 2.0 Legacy code +// async resetWeeklyScoreAndRank() { +// await this.sql.run('UPDATE player SET weeklyScore = ?', 0) +// .catch(console.error); +// } +// +// /** +// * Get the rank of a player on a server +// * @param idList - The list of ids of the players of the server +// * @param id - The id of the player +// * @returns {Integer} - The server rank of the player +// */ +// getServRank(idList, id) { +// return sql.get(`SELECT rank FROM(SELECT *, ROW_NUMBER () OVER (ORDER BY score desc) AS rank FROM entity JOIN player on entity.id = player.discordId AND entity.id IN(${idList}) ) WHERE score > 100 AND id=${id} ORDER BY score DESC`).then(player => { +// return player.rank +// }).catch(error => { //there is no database +// console.error(error) +// return 0; +// }) +// } +// +// /** +// * Get the total number of player in the database that are on the idList given +// * @param {*} idList the list of id of the users of a server +// */ +// getNumberOfServPlayers(idList) { +// return sql.get(`SELECT COUNT(*) AS count FROM player WHERE score >100 AND discordId IN(${idList})`) +// .then(number => { +// return number.count +// }) +// .catch(error => { //there is no database +// console.error(error) +// return 0; +// }); +// } +// +// /** +// * Get the total number of players in the database that played this week +// * @returns {Integer} - The number of players +// */ +// getNumberOfWeeklyPlayers() { +// return sql.get(`SELECT COUNT(*) AS count FROM player WHERE weeklyScore > 0`) +// .then(number => { +// return number.count +// }) +// .catch(error => { //there is no database +// console.error(error) +// return 0; +// }); +// } +// +// /** +// * give to the player that send the message a random item +// * @param {*} message - The message that caused the function to be called. Used to retrieve the channel where the message has been send +// * @param {*} player - The player that is playing +// * @param {boolean} displayNameIfSold - Display the name of the item if the item is sold +// */ +// async giveRandomItem(message, player, displayNameIfSold) { +// let inventoryManager = new InventoryManager(); +// let equipementManager = new EquipementManager(); +// let potionManager = new PotionManager(); +// let objectManager = new ObjectManager(); +// let inventory = await inventoryManager.getCurrentInventory(message); +// let type = this.chooseARandomItemType(); +// switch (type) { +// case "weapon": +// player = await this.giveRandomWeapon(equipementManager, inventory, message, inventoryManager, player, displayNameIfSold); +// break; +// case "armor": +// player = await this.giveRandomArmor(equipementManager, inventory, message, inventoryManager, player, displayNameIfSold); +// break; +// case "object": +// player = await this.giveRandomObject(objectManager, inventory, message, inventoryManager, player, displayNameIfSold); +// break; +// case "potion": +// player = await this.giveRandomPotion(potionManager, inventory, message, inventoryManager, player, displayNameIfSold); +// break; +// default: +// // this is never supposed to occure +// break; +// } +// return player +// } +// +// +// /** +// * give to the player that send the message a random item +// * @param {*} message - The message that caused the function to be called. Used to retrieve the channel where the message has been send +// * @param {*} player - The player that is playing +// */ +// async giveItem(message, player, item) { +// let inventoryManager = new InventoryManager(); +// let equipementManager = new EquipementManager(); +// let potionManager = new PotionManager(); +// let objectManager = new ObjectManager(); +// let inventory = await inventoryManager.getCurrentInventory(message); +// let type = item.type(); +// switch (type) { +// case "weapon": +// player = await this.giveWeapon(equipementManager, inventory, message, inventoryManager, player, item.id); +// break; +// case "armor": +// player = await this.giveArmor(equipementManager, inventory, message, inventoryManager, player, item.id); +// break; +// case "object": +// player = await this.giveObject(objectManager, inventory, message, inventoryManager, player, item.id); +// break; +// case "potion": +// player = await this.givePotion(potionManager, inventory, message, inventoryManager, player, item.id); +// break; +// default: +// message.channel.send("item à donner de type :" + type); +// break; +// } +// return player +// } +// +// +// /** +// * add a SELECTed armor into an inventory and save the result +// * @param {*} equipementManager - The equipement manager class +// * @param {*} inventory - the inventory of the player +// * @param {*} message - The message that caused the function to be called. Used to retrieve the author +// * @param {*} inventoryManager - The inventory manager class +// * @param {*} player - The player that is playing +// * @param {*} id - The id of the armor +// */ +// async giveArmor(equipementManager, inventory, message, inventoryManager, player, id) { +// Text = await chargeText(message); +// let language = await this.detectLanguage(message); +// let armor = await equipementManager.getArmorById(id); +// let neww = equipementManager.getEquipementEfficiency(armor); +// let old = equipementManager.getEquipementEfficiency(equipementManager.getArmorById(inventory.armorId)); +// if (neww > old) { +// inventory.armorId = armor.id; +// message.channel.send(Text.playerManager.newItemEmoji + mentionPlayer(player) + Text.playerManager.newItem + equipementManager.displayArmor(armor, language)); +// inventoryManager.updateInventory(inventory); +// } +// else { +// player = this.sellItem(player, armor, false, message, language); +// } +// return player +// } +// +// +// /** +// * add a SELECTed armor into an inventory and save the result +// * @param {*} equipementManager - The equipement manager class +// * @param {*} inventory - the inventory of the player +// * @param {*} message - The message that caused the function to be called. Used to retrieve the author +// * @param {*} inventoryManager - The inventory manager class +// * @param {*} player - The player that is playing +// * @param {*} id - The id of the weapon +// */ +// async giveWeapon(equipementManager, inventory, message, inventoryManager, player, id) { +// Text = await chargeText(message); +// let language = await this.detectLanguage(message); +// let weapon = await equipementManager.getWeaponById(id); +// let neww = equipementManager.getEquipementEfficiency(weapon); +// let old = equipementManager.getEquipementEfficiency(equipementManager.getWeaponById(inventory.weaponId)); +// if (neww > old) { +// inventory.weaponId = weapon.id; +// message.channel.send(Text.playerManager.newItemEmoji + mentionPlayer(player) + Text.playerManager.newItem + equipementManager.displayWeapon(weapon, language)); +// inventoryManager.updateInventory(inventory); +// } +// else { +// player = this.sellItem(player, weapon, false, message, language); +// } +// return player +// } +// +// +// /** +// * add a SELECTed object into an inventory and save the result +// * @param {*} objectManager - The object manager class +// * @param {*} inventory - the inventory of the player +// * @param {*} message - The message that caused the function to be called. Used to retrieve the author +// * @param {*} inventoryManager - The inventory manager class +// * @param {*} player - The player that is playing +// * @param {*} id - The id of the object +// */ +// async giveObject(objectManager, inventory, message, inventoryManager, player, id) { +// Text = await chargeText(message); +// let language = await this.detectLanguage(message); +// let object = await objectManager.getObjectById(id); +// let neww = objectManager.getObjectEfficiency(object); +// let old = objectManager.getObjectEfficiency(objectManager.getObjectById(inventory.backupItemId)); +// if (neww > old) { +// inventory.backupItemId = object.id; +// message.channel.send(Text.playerManager.newItemEmoji + mentionPlayer(player) + Text.playerManager.newItem + objectManager.displayObject(object, language)); +// inventoryManager.updateInventory(inventory); +// } +// else { +// player = this.sellItem(player, object, false, message, language); +// } +// return player +// } +// +// +// /** +// * add a SELECTed potion into an inventory and save the result +// * @param {*} potionManager - The potion manager class +// * @param {*} inventory - the inventory of the player +// * @param {*} message - The message that caused the function to be called. Used to retrieve the author +// * @param {*} inventoryManager - The inventory manager class +// * @param {*} player - The player that is playing +// * @param {*} id - The id of the potion +// */ +// async givePotion(potionManager, inventory, message, inventoryManager, player, id) { +// Text = await chargeText(message); +// let language = await this.detectLanguage(message); +// let potion = await potionManager.getPotionById(id); +// let neww = potionManager.getPotionEfficiency(potion); +// let old = potionManager.getPotionEfficiency(potionManager.getPotionById(inventory.potionId)); +// if (neww > old) { +// inventory.potionId = potion.id; +// message.channel.send(Text.playerManager.newItemEmoji + mentionPlayer(player) + Text.playerManager.newItem + potionManager.displayPotion(potion, language)); +// inventoryManager.updateInventory(inventory); +// } +// else { +// player = this.sellItem(player, potion, false, message, language); +// } +// return player +// } +// +// +// /** +// * add a random armor into an inventory and save the result +// * @param {*} equipementManager - The equipement manager class +// * @param {*} inventory - the inventory of the player +// * @param {*} message - The message that caused the function to be called. Used to retrieve the author +// * @param {*} inventoryManager - The inventory manager class +// * @param {*} player - The player that is playing +// * @param {boolean} displayNameIfSold - Display the name of the item if the item is sold +// */ +// async giveRandomArmor(equipementManager, inventory, message, inventoryManager, player, displayNameIfSold) { +// Text = await chargeText(message); +// let language = await this.detectLanguage(message); +// let armor = await equipementManager.generateRandomArmor(); +// let neww = equipementManager.getEquipementEfficiency(armor); +// let old = equipementManager.getEquipementEfficiency(equipementManager.getArmorById(inventory.armorId)); +// if (neww > old) { +// inventory.armorId = armor.id; +// message.channel.send(Text.playerManager.newItemEmoji + mentionPlayer(player) + Text.playerManager.newItem + equipementManager.displayArmor(armor, language)); +// inventoryManager.updateInventory(inventory); +// } +// else { +// player = this.sellItem(player, armor, displayNameIfSold, message, language); +// } +// return player +// } +// +// +// /** +// * add a random armor into an inventory and save the result +// * @param {*} equipementManager - The equipement manager class +// * @param {*} inventory - the inventory of the player +// * @param {*} message - The message that caused the function to be called. Used to retrieve the author +// * @param {*} inventoryManager - The inventory manager class +// * @param {*} player - The player that is playing +// * @param {boolean} displayNameIfSold - Display the name of the item if the item is sold +// */ +// async giveRandomWeapon(equipementManager, inventory, message, inventoryManager, player, displayNameIfSold) { +// Text = await chargeText(message); +// let language = await this.detectLanguage(message); +// let weapon = await equipementManager.generateRandomWeapon(); +// let neww = equipementManager.getEquipementEfficiency(weapon); +// let old = equipementManager.getEquipementEfficiency(equipementManager.getWeaponById(inventory.weaponId)); +// if (neww > old) { +// inventory.weaponId = weapon.id; +// message.channel.send(Text.playerManager.newItemEmoji + mentionPlayer(player) + Text.playerManager.newItem + equipementManager.displayWeapon(weapon, language)); +// inventoryManager.updateInventory(inventory); +// } +// else { +// player = this.sellItem(player, weapon, displayNameIfSold, message, language); +// } +// return player +// } +// +// +// /** +// * add a random object into an inventory and save the result +// * @param {*} objectManager - The object manager class +// * @param {*} inventory - the inventory of the player +// * @param {*} message - The message that caused the function to be called. Used to retrieve the author +// * @param {*} inventoryManager - The inventory manager class +// * @param {*} player - The player that is playing +// * @param {boolean} displayNameIfSold - Display the name of the item if the item is sold +// */ +// async giveRandomObject(objectManager, inventory, message, inventoryManager, player, displayNameIfSold) { +// Text = await chargeText(message); +// let language = await this.detectLanguage(message); +// let object = await objectManager.generateRandomObject(); +// let neww = objectManager.getObjectEfficiency(object); +// let old = objectManager.getObjectEfficiency(objectManager.getObjectById(inventory.backupItemId)); +// if (neww > old) { +// inventory.backupItemId = object.id; +// message.channel.send(Text.playerManager.newItemEmoji + mentionPlayer(player) + Text.playerManager.newItem + objectManager.displayObject(object, language)); +// inventoryManager.updateInventory(inventory); +// } +// else { +// player = this.sellItem(player, object, displayNameIfSold, message, language); +// } +// return player +// } +// +// +// /** +// * add a random potion into an inventory and save the result +// * @param {*} potionManager - The potion manager class +// * @param {*} inventory - the inventory of the player +// * @param {*} message - The message that caused the function to be called. Used to retrieve the author +// * @param {*} inventoryManager - The inventory manager class +// * @param {*} player - The player that is playing +// * @param {boolean} displayNameIfSold - Display the name of the item if the item is sold +// */ +// async giveRandomPotion(potionManager, inventory, message, inventoryManager, player, displayNameIfSold) { +// Text = await chargeText(message); +// let language = await this.detectLanguage(message); +// let potion = await potionManager.generateRandomPotion(); +// let neww = potionManager.getPotionEfficiency(potion); +// let old = potionManager.getPotionEfficiency(potionManager.getPotionById(inventory.potionId)); +// if (neww > old) { +// inventory.potionId = potion.id; +// message.channel.send(Text.playerManager.newItemEmoji + mentionPlayer(player) + Text.playerManager.newItem + potionManager.displayPotion(potion, language)); +// inventoryManager.updateInventory(inventory); +// } +// else { +// player = this.sellItem(player, potion, displayNameIfSold, message, language); +// } +// return player +// } +// +// /** +// * Select a random item Type +// * @returns {String} - The type of the item that has been SELECTed +// */ +// chooseARandomItemType() { +// return DefaultValues.itemGenerator.tab[Math.round(Math.random() * (DefaultValues.itemGenerator.max - 1) + 1)]; +// }; +// +// +// /** +// * allow the player to gain some money corresponding to an equipement +// * @param {Item} item - The equipement that has to be sold +// * @param {*} player - The player that will recieve the money +// * @param {boolean} displayName - Displays or not the name of the item +// * @param {*} message - The message that caused the function to be called. Used to retrieve the channel +// * @param {String} language - The language the answer has to be displayed in +// */ +// sellItem(player, item, displayName, message, language) { +// Text = require('../text/' + language); +// let value = item.getValue(); +// console.log("the item has been sold ! " + item.rarity + " / " + item.power); +// player.addMoney(value); +// if (displayName) { +// message.channel.send(Text.playerManager.sellEmoji + mentionPlayer(player) + Text.playerManager.sellItem1 + new ItemManager().getItemSimpleName(item, language) + Text.playerManager.sellItem2 + value + Text.playerManager.sellEnd); +// } else { +// message.channel.send(Text.playerManager.sellEmoji + mentionPlayer(player) + Text.playerManager.sell + value + Text.playerManager.sellEnd); +// } +// return player; +// } +// +// /** +// * Allow to retrieve the data FROM the top between 2 limits +// * @param {Integer} borneinf - The lower limit of the top +// * @param {Integer} bornesup - The uppper limit of the top +// * @returns {*} -The data of the top (an array of players) +// */ +// getTopData(borneinf, bornesup) { +// let playerArray = Array(); +// let i = 0; +// return sql.all(`SELECT *FROM(SELECT *, ROW_NUMBER () OVER (ORDER BY score desc) AS rank, ROW_NUMBER () OVER (ORDER BY weeklyScore desc) AS weeklyRank FROM entity JOIN player on entity.id = player.discordId) WHERE rank >= ? AND rank <= ? AND score > 100 ORDER BY score DESC`, [borneinf, bornesup]).then(data => { +// data.forEach(function (player) { +// playerArray[i] = new Player(player.maxHealth, player.health, player.attack, player.defense, player.speed, +// player.discordId, player.score, player.level, player.experience, player.money, player.effect, player.lastReport, player.badges, player.rank, player.weeklyScore, +// player.weeklyRank, player.guildId) +// i++; +// }); +// return playerArray; +// }); +// } +// +// /** +// * Allow to retrieve the data FROM the top between 2 limits +// * @param {Integer} borneinf - The lower limit of the top +// * @param {Integer} bornesup - The uppper limit of the top +// * @param {String} idList - The list of id where the discord id of the user has to be +// * @returns {*} -The data of the top (an array of players) +// */ +// getTopServData(borneinf, bornesup, idList) { +// let playerArray = Array(); +// let i = 0; +// return sql.all(`SELECT *FROM(SELECT *, ROW_NUMBER () OVER (ORDER BY score desc) AS rank, ROW_NUMBER () OVER (ORDER BY weeklyScore desc) AS weeklyRank FROM entity JOIN player on entity.id = player.discordId AND entity.id IN(${idList}) ) WHERE rank >= ? AND rank <= ? AND score > 100 ORDER BY score DESC`, [borneinf, bornesup]).then(data => { +// data.forEach(function (player) { +// playerArray[i] = new Player(player.maxHealth, player.health, player.attack, player.defense, player.speed, +// player.discordId, player.score, player.level, player.experience, player.money, player.effect, player.lastReport, player.badges, player.rank, player.weeklyScore, +// player.weeklyRank, player.guildId) +// i++; +// }); +// return playerArray; +// }); +// } +// +// /** +// * Allow to retrieve the data FROM the top between 2 limits +// * @param {Integer} borneinf - The lower limit of the top +// * @param {Integer} bornesup - The uppper limit of the top +// * @returns {*} -The data of the top (an array of players) +// */ +// getTopWeekData(borneinf, bornesup) { +// let playerArray = Array(); +// let i = 0; +// return sql.all(`SELECT *FROM(SELECT *, ROW_NUMBER () OVER (ORDER BY score desc) as rank, ROW_NUMBER () OVER (ORDER BY weeklyScore desc) as weeklyRank FROM entity JOIN player on entity.id = player.discordId) WHERE weeklyRank >= ? AND weeklyRank <= ? AND weeklyScore > 0 ORDER BY weeklyScore DESC`, [borneinf, bornesup]).then(data => { +// data.forEach(function (player) { +// playerArray[i] = new Player(player.maxHealth, player.health, player.attack, player.defense, player.speed, +// player.discordId, player.score, player.level, player.experience, player.money, player.effect, player.lastReport, player.badges, player.rank, player.weeklyScore, +// player.weeklyRank, player.guildId) +// i++; +// }); +// return i === 0 ? null : playerArray; +// }); +// } +// +// function mentionPlayer(player) { +// return "<@" + player.discordId + ">"; +// } diff --git a/src/core/repositories/PossibilityRepository.js b/src/core/repositories/PossibilityRepository.js index 7d2ee9b93..4791da273 100644 --- a/src/core/repositories/PossibilityRepository.js +++ b/src/core/repositories/PossibilityRepository.js @@ -1,26 +1,26 @@ - /** - * Get the requested possibility - * @param {number|String} eventId - * @param {String} emoji - * @param {Number} id - * @return {Promise} - */ - async getByEventIdAndEmojiAndId(eventId, emoji, id) { - return new Possibility( - Object.assign({eventId: eventId, emoji: emoji, id: id}, - this.events[eventId].possibilities[emoji][id])); - } - - /** - * Get randomly a possibility - * @param {number|String} eventId - * @param {String} emoji - * @return {Promise} - */ - async getRandomByIdAndEmoji(eventId, emoji) { - const id = Math.round( - Math.random() * (this.events[eventId].possibilities[emoji].length - 1)); - return new Possibility( - Object.assign({eventId: eventId, emoji: emoji, id: id}, - this.events[eventId].possibilities[emoji][id])); - } +// /** +// * Get the requested possibility +// * @param {number|String} eventId +// * @param {String} emoji +// * @param {Number} id +// * @return {Promise} +// */ +// async getByEventIdAndEmojiAndId(eventId, emoji, id) { +// return new Possibility( +// Object.assign({eventId: eventId, emoji: emoji, id: id}, +// this.events[eventId].possibilities[emoji][id])); +// } +// +// /** +// * Get randomly a possibility +// * @param {number|String} eventId +// * @param {String} emoji +// * @return {Promise} +// */ +// async getRandomByIdAndEmoji(eventId, emoji) { +// const id = Math.round( +// Math.random() * (this.events[eventId].possibilities[emoji].length - 1)); +// return new Possibility( +// Object.assign({eventId: eventId, emoji: emoji, id: id}, +// this.events[eventId].possibilities[emoji][id])); +// } diff --git a/src/core/repositories/PotionRepository.js b/src/core/repositories/PotionRepository.js index 57d561fd5..3eab08c5f 100644 --- a/src/core/repositories/PotionRepository.js +++ b/src/core/repositories/PotionRepository.js @@ -1,11 +1,11 @@ - - /** - * Choose a random potion in the existing ones. (take care of the rarity) - * @return {Promise} - */ - async getRandomWithRarity() { - const desiredRarity = generateRandomRarity(); - const possiblePotions = Object.entries(this.potions).filter(key => this.potions[key[0]].rarity === desiredRarity); - const id = possiblePotions[Math.floor(Math.random() * possiblePotions.length)][0]; - return this.potions[id]; - } +// +// /** +// * Choose a random potion in the existing ones. (take care of the rarity) +// * @return {Promise} +// */ +// async getRandomWithRarity() { +// const desiredRarity = generateRandomRarity(); +// const possiblePotions = Object.entries(this.potions).filter(key => this.potions[key[0]].rarity === desiredRarity); +// const id = possiblePotions[Math.floor(Math.random() * possiblePotions.length)][0]; +// return this.potions[id]; +// } diff --git a/src/core/repositories/ServerRepository.js b/src/core/repositories/ServerRepository.js index 93e3ae7f8..7a0adec09 100644 --- a/src/core/repositories/ServerRepository.js +++ b/src/core/repositories/ServerRepository.js @@ -1,19 +1,19 @@ - /** - * TODO 2.0 refactor - * Allow to get the validation informations of a guild - * @param {*} guilde - The guild that has to be checked - */ - getValidationInfos(guilde) { - let nbMembres = guilde.members.filter(member => !member.user.bot).size; - let nbBot = guilde.members.filter(member => member.user.bot).size; - let ratio = Math.round((nbBot / nbMembres) * 100); - let validation = ':white_check_mark:'; - if (ratio > 30 || nbMembres < 30 || (nbMembres < 100 && ratio > 20)) { - validation = ':x:'; - } else { - if (ratio > 20 || nbBot > 15 || nbMembres < 100) { - validation = ':warning:'; - } - } - return {validation, nbMembres, nbBot, ratio}; - } +// /** +// * TODO 2.0 refactor +// * Allow to get the validation informations of a guild +// * @param {*} guilde - The guild that has to be checked +// */ +// getValidationInfos(guilde) { +// let nbMembres = guilde.members.filter(member => !member.user.bot).size; +// let nbBot = guilde.members.filter(member => member.user.bot).size; +// let ratio = Math.round((nbBot / nbMembres) * 100); +// let validation = ':white_check_mark:'; +// if (ratio > 30 || nbMembres < 30 || (nbMembres < 100 && ratio > 20)) { +// validation = ':x:'; +// } else { +// if (ratio > 20 || nbBot > 15 || nbMembres < 100) { +// validation = ':warning:'; +// } +// } +// return {validation, nbMembres, nbBot, ratio}; +// } diff --git a/src/core/repositories/WeaponRepository.js b/src/core/repositories/WeaponRepository.js index 19c353dbc..af1428d15 100644 --- a/src/core/repositories/WeaponRepository.js +++ b/src/core/repositories/WeaponRepository.js @@ -1,12 +1,12 @@ - - - /** - * Choose a random weapon in the existing ones. (take care of the rarity) - * @return {Promise} - */ - async getRandomWithRarity() { - const desiredRarity = generateRandomRarity(); - const possibleWeapons = Object.entries(this.weapons).filter(key => this.weapons[key[0]].rarity === desiredRarity); - const id = possibleWeapons[Math.floor(Math.random() * possibleWeapons.length)][0]; - return this.weapons[id]; - } +// +// +// /** +// * Choose a random weapon in the existing ones. (take care of the rarity) +// * @return {Promise} +// */ +// async getRandomWithRarity() { +// const desiredRarity = generateRandomRarity(); +// const possibleWeapons = Object.entries(this.weapons).filter(key => this.weapons[key[0]].rarity === desiredRarity); +// const id = possibleWeapons[Math.floor(Math.random() * possibleWeapons.length)][0]; +// return this.weapons[id]; +// } diff --git a/src/eastereggs/EasterEggs.js b/src/eastereggs/EasterEggs.js index 0b6322861..f35735a37 100644 --- a/src/eastereggs/EasterEggs.js +++ b/src/eastereggs/EasterEggs.js @@ -1,5 +1,5 @@ const init = function() { - //Does nothing + // Does nothing }; module.exports.init = init; diff --git a/yarn.lock b/yarn.lock index bbc2a4c22..e80eb4d06 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,6 +2,27 @@ # yarn lockfile v1 +"@babel/code-frame@^7.0.0": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.10.4.tgz#168da1a36e90da68ae8d49c0f1b48c7c6249213a" + integrity sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg== + dependencies: + "@babel/highlight" "^7.10.4" + +"@babel/helper-validator-identifier@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz#a78c7a7251e01f616512d31b10adcf52ada5e0d2" + integrity sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw== + +"@babel/highlight@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.10.4.tgz#7d1bdfd65753538fabe6c38596cdb76d9ac60143" + integrity sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA== + dependencies: + "@babel/helper-validator-identifier" "^7.10.4" + chalk "^2.0.0" + js-tokens "^4.0.0" + "@discordjs/collection@^0.1.5": version "0.1.5" resolved "https://registry.yarnpkg.com/@discordjs/collection/-/collection-0.1.5.tgz#1781c620b4c88d619bd0373a1548e5a6025e3d3a" @@ -16,6 +37,11 @@ combined-stream "^1.0.8" mime-types "^2.1.12" +"@types/color-name@^1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@types/color-name/-/color-name-1.1.1.tgz#1c1261bbeaa10a8055bbc5d8ab84b7b2afc846a0" + integrity sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ== + "@types/node@*": version "14.0.13" resolved "https://registry.yarnpkg.com/@types/node/-/node-14.0.13.tgz#ee1128e881b874c371374c1f72201893616417c9" @@ -33,6 +59,31 @@ abort-controller@^3.0.0: dependencies: event-target-shim "^5.0.0" +acorn-jsx@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.2.0.tgz#4c66069173d6fdd68ed85239fc256226182b2ebe" + integrity sha512-HiUX/+K2YpkpJ+SzBffkM/AQ2YE03S0U1kjTLVpoJdhZMOWy8qvXVN9JdLqv2QsaQ6MPYQIuNmwD8zOiYUofLQ== + +acorn@^7.2.0: + version "7.3.1" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.3.1.tgz#85010754db53c3fbaf3b9ea3e083aa5c5d147ffd" + integrity sha512-tLc0wSnatxAQHVHUapaHdz72pi9KUyHjq5KyHjGg9Y8Ifdc79pTh2XvI6I1/chZbnM7QtNKzh66ooDogPZSleA== + +ajv@^6.10.0, ajv@^6.10.2: + version "6.12.3" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.3.tgz#18c5af38a111ddeb4f2697bd78d68abc1cabd706" + integrity sha512-4K0cK3L1hsqk9xIb2z9vs/XU+PGJZ9PNpJRDS9YLzmNdX6jmVPfamLvTJr0aDAusnHyCHO6MjzlkAsgtqp9teA== + dependencies: + fast-deep-equal "^3.1.1" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.4.1" + uri-js "^4.2.2" + +ansi-colors@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348" + integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA== + ansi-regex@^2.0.0: version "2.1.1" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" @@ -43,13 +94,31 @@ ansi-regex@^3.0.0: resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg= -ansi-styles@^3.2.1: +ansi-regex@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997" + integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg== + +ansi-regex@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75" + integrity sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg== + +ansi-styles@^3.2.0, ansi-styles@^3.2.1: version "3.2.1" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== dependencies: color-convert "^1.9.0" +ansi-styles@^4.1.0: + version "4.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.2.1.tgz#90ae75c424d008d2624c5bf29ead3177ebfcf359" + integrity sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA== + dependencies: + "@types/color-name" "^1.1.1" + color-convert "^2.0.1" + any-promise@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/any-promise/-/any-promise-1.3.0.tgz#abc6afeedcea52e809cdc0376aed3ce39635d17f" @@ -68,11 +137,23 @@ are-we-there-yet@~1.1.2: delegates "^1.0.0" readable-stream "^2.0.6" +argparse@^1.0.7: + version "1.0.10" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" + integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== + dependencies: + sprintf-js "~1.0.2" + assertion-error@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/assertion-error/-/assertion-error-1.1.0.tgz#e60b6b0e8f301bd97e5375215bda406c85118c0b" integrity sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw== +astral-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9" + integrity sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg== + asynckit@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" @@ -96,6 +177,11 @@ brace-expansion@^1.1.7: balanced-match "^1.0.0" concat-map "0.0.1" +callsites@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" + integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== + chai@^4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/chai/-/chai-4.2.0.tgz#760aa72cf20e3795e84b12877ce0e83737aa29e5" @@ -108,7 +194,7 @@ chai@^4.2.0: pathval "^1.1.0" type-detect "^4.0.5" -chalk@^2.4.1: +chalk@^2.0.0, chalk@^2.4.1: version "2.4.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== @@ -117,6 +203,14 @@ chalk@^2.4.1: escape-string-regexp "^1.0.5" supports-color "^5.3.0" +chalk@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.0.tgz#4e14870a618d9e2edd97dd8345fd9d9dc315646a" + integrity sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + check-error@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/check-error/-/check-error-1.0.2.tgz#574d312edd88bb5dd8912e9286dd6c0aed4aac82" @@ -147,11 +241,23 @@ color-convert@^1.9.0: dependencies: color-name "1.1.3" +color-convert@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" + integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== + dependencies: + color-name "~1.1.4" + color-name@1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= +color-name@~1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" + integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== + colors@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/colors/-/colors-1.4.0.tgz#c50491479d4c1bdaed2c9ced32cf7c7dc2360f78" @@ -179,6 +285,15 @@ core-util-is@~1.0.0: resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= +cross-spawn@^7.0.2: + version "7.0.3" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" + integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== + dependencies: + path-key "^3.1.0" + shebang-command "^2.0.0" + which "^2.0.1" + debug@^3.2.6: version "3.2.6" resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b" @@ -186,7 +301,7 @@ debug@^3.2.6: dependencies: ms "^2.1.1" -debug@^4.1.1: +debug@^4.0.1, debug@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791" integrity sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw== @@ -205,6 +320,11 @@ deep-extend@^0.6.0: resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== +deep-is@^0.1.3: + version "0.1.3" + resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" + integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= + delayed-stream@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" @@ -234,26 +354,191 @@ discord.js@^12.2.0: tweetnacl "^1.0.3" ws "^7.2.1" +doctrine@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" + integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== + dependencies: + esutils "^2.0.2" + dottie@^2.0.0: version "2.0.2" resolved "https://registry.yarnpkg.com/dottie/-/dottie-2.0.2.tgz#cc91c0726ce3a054ebf11c55fbc92a7f266dd154" integrity sha512-fmrwR04lsniq/uSr8yikThDTrM7epXHBAAjH9TbeH3rEA8tdCO7mRzB9hdmdGyJCxF8KERo9CITcm3kGuoyMhg== +emoji-regex@^7.0.1: + version "7.0.3" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" + integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA== + +enquirer@^2.3.5: + version "2.3.6" + resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.3.6.tgz#2a7fe5dd634a1e4125a975ec994ff5456dc3734d" + integrity sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg== + dependencies: + ansi-colors "^4.1.1" + escape-string-regexp@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= +eslint-config-google@^0.14.0: + version "0.14.0" + resolved "https://registry.yarnpkg.com/eslint-config-google/-/eslint-config-google-0.14.0.tgz#4f5f8759ba6e11b424294a219dbfa18c508bcc1a" + integrity sha512-WsbX4WbjuMvTdeVL6+J3rK1RGhCTqjsFjX7UMSMgZiyxxaNLkoJENbrGExzERFeoTpGw3F3FypTiWAP9ZXzkEw== + +eslint-scope@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.0.tgz#d0f971dfe59c69e0cada684b23d49dbf82600ce5" + integrity sha512-iiGRvtxWqgtx5m8EyQUJihBloE4EnYeGE/bz1wSPwJE6tZuJUtHlhqDM4Xj2ukE8Dyy1+HCZ4hE0fzIVMzb58w== + dependencies: + esrecurse "^4.1.0" + estraverse "^4.1.1" + +eslint-utils@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-2.1.0.tgz#d2de5e03424e707dc10c74068ddedae708741b27" + integrity sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg== + dependencies: + eslint-visitor-keys "^1.1.0" + +eslint-visitor-keys@^1.1.0, eslint-visitor-keys@^1.2.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz#30ebd1ef7c2fdff01c3a4f151044af25fab0523e" + integrity sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ== + +eslint@^7.4.0: + version "7.4.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.4.0.tgz#4e35a2697e6c1972f9d6ef2b690ad319f80f206f" + integrity sha512-gU+lxhlPHu45H3JkEGgYhWhkR9wLHHEXC9FbWFnTlEkbKyZKWgWRLgf61E8zWmBuI6g5xKBph9ltg3NtZMVF8g== + dependencies: + "@babel/code-frame" "^7.0.0" + ajv "^6.10.0" + chalk "^4.0.0" + cross-spawn "^7.0.2" + debug "^4.0.1" + doctrine "^3.0.0" + enquirer "^2.3.5" + eslint-scope "^5.1.0" + eslint-utils "^2.0.0" + eslint-visitor-keys "^1.2.0" + espree "^7.1.0" + esquery "^1.2.0" + esutils "^2.0.2" + file-entry-cache "^5.0.1" + functional-red-black-tree "^1.0.1" + glob-parent "^5.0.0" + globals "^12.1.0" + ignore "^4.0.6" + import-fresh "^3.0.0" + imurmurhash "^0.1.4" + is-glob "^4.0.0" + js-yaml "^3.13.1" + json-stable-stringify-without-jsonify "^1.0.1" + levn "^0.4.1" + lodash "^4.17.14" + minimatch "^3.0.4" + natural-compare "^1.4.0" + optionator "^0.9.1" + progress "^2.0.0" + regexpp "^3.1.0" + semver "^7.2.1" + strip-ansi "^6.0.0" + strip-json-comments "^3.1.0" + table "^5.2.3" + text-table "^0.2.0" + v8-compile-cache "^2.0.3" + +espree@^7.1.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/espree/-/espree-7.1.0.tgz#a9c7f18a752056735bf1ba14cb1b70adc3a5ce1c" + integrity sha512-dcorZSyfmm4WTuTnE5Y7MEN1DyoPYy1ZR783QW1FJoenn7RailyWFsq/UL6ZAAA7uXurN9FIpYyUs3OfiIW+Qw== + dependencies: + acorn "^7.2.0" + acorn-jsx "^5.2.0" + eslint-visitor-keys "^1.2.0" + +esprima@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" + integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== + +esquery@^1.2.0: + version "1.3.1" + resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.3.1.tgz#b78b5828aa8e214e29fb74c4d5b752e1c033da57" + integrity sha512-olpvt9QG0vniUBZspVRN6lwB7hOZoTRtT+jzR+tS4ffYx2mzbw+z0XCOk44aaLYKApNX5nMm+E+P6o25ip/DHQ== + dependencies: + estraverse "^5.1.0" + +esrecurse@^4.1.0: + version "4.2.1" + resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.2.1.tgz#007a3b9fdbc2b3bb87e4879ea19c92fdbd3942cf" + integrity sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ== + dependencies: + estraverse "^4.1.0" + +estraverse@^4.1.0, estraverse@^4.1.1: + version "4.3.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" + integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== + +estraverse@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.1.0.tgz#374309d39fd935ae500e7b92e8a6b4c720e59642" + integrity sha512-FyohXK+R0vE+y1nHLoBM7ZTyqRpqAlhdZHCWIWEviFLiGB8b04H6bQs8G+XTthacvT8VuwvteiP7RJSxMs8UEw== + +esutils@^2.0.2: + version "2.0.3" + resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" + integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== + event-target-shim@^5.0.0: version "5.0.1" resolved "https://registry.yarnpkg.com/event-target-shim/-/event-target-shim-5.0.1.tgz#5d4d3ebdf9583d63a5333ce2deb7480ab2b05789" integrity sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ== +fast-deep-equal@^3.1.1: + version "3.1.3" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" + integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== + +fast-json-stable-stringify@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" + integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== + +fast-levenshtein@^2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" + integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= + figlet@^1.3.0: version "1.4.0" resolved "https://registry.yarnpkg.com/figlet/-/figlet-1.4.0.tgz#21c5878b3752a932ebdb8be400e2d10bbcddfd60" integrity sha512-CxxIjEKHlqGosgXaIA+sikGDdV6KZOOlzPJnYuPgQlOSHZP5h9WIghYI30fyXnwEVeSH7Hedy72gC6zJrFC+SQ== +file-entry-cache@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-5.0.1.tgz#ca0f6efa6dd3d561333fb14515065c2fafdf439c" + integrity sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g== + dependencies: + flat-cache "^2.0.1" + +flat-cache@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-2.0.1.tgz#5d296d6f04bda44a4630a301413bdbc2ec085ec0" + integrity sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA== + dependencies: + flatted "^2.0.0" + rimraf "2.6.3" + write "1.0.3" + +flatted@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/flatted/-/flatted-2.0.2.tgz#4575b21e2bcee7434aa9be662f4b7b5f9c2b5138" + integrity sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA== + fs-minipass@^1.2.5: version "1.2.7" resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.7.tgz#ccff8570841e7fe4265693da88936c55aed7f7c7" @@ -266,6 +551,11 @@ fs.realpath@^1.0.0: resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= +functional-red-black-tree@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" + integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= + gauge@~2.7.3: version "2.7.4" resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7" @@ -285,6 +575,13 @@ get-func-name@^2.0.0: resolved "https://registry.yarnpkg.com/get-func-name/-/get-func-name-2.0.0.tgz#ead774abee72e20409433a066366023dd6887a41" integrity sha1-6td0q+5y4gQJQzoGY2YCPdaIekE= +glob-parent@^5.0.0: + version "5.1.1" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.1.tgz#b6c1ef417c4e5663ea498f1c45afac6916bbc229" + integrity sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ== + dependencies: + is-glob "^4.0.1" + glob@^7.1.3: version "7.1.6" resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" @@ -297,11 +594,23 @@ glob@^7.1.3: once "^1.3.0" path-is-absolute "^1.0.0" +globals@^12.1.0: + version "12.4.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-12.4.0.tgz#a18813576a41b00a24a97e7f815918c2e19925f8" + integrity sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg== + dependencies: + type-fest "^0.8.1" + has-flag@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= +has-flag@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" + integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== + has-unicode@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" @@ -321,6 +630,24 @@ ignore-walk@^3.0.1: dependencies: minimatch "^3.0.4" +ignore@^4.0.6: + version "4.0.6" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" + integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== + +import-fresh@^3.0.0: + version "3.2.1" + resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.2.1.tgz#633ff618506e793af5ac91bf48b72677e15cbe66" + integrity sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ== + dependencies: + parent-module "^1.0.0" + resolve-from "^4.0.0" + +imurmurhash@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" + integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= + inflection@1.12.0: version "1.12.0" resolved "https://registry.yarnpkg.com/inflection/-/inflection-1.12.0.tgz#a200935656d6f5f6bc4dc7502e1aecb703228416" @@ -349,6 +676,11 @@ is-bluebird@^1.0.2: resolved "https://registry.yarnpkg.com/is-bluebird/-/is-bluebird-1.0.2.tgz#096439060f4aa411abee19143a84d6a55346d6e2" integrity sha1-CWQ5Bg9KpBGr7hkUOoTWpVNG1uI= +is-extglob@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= + is-fullwidth-code-point@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" @@ -361,11 +693,54 @@ is-fullwidth-code-point@^2.0.0: resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= +is-glob@^4.0.0, is-glob@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc" + integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg== + dependencies: + is-extglob "^2.1.1" + isarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= + +js-tokens@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" + integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== + +js-yaml@^3.13.1: + version "3.14.0" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.0.tgz#a7a34170f26a21bb162424d8adacb4113a69e482" + integrity sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A== + dependencies: + argparse "^1.0.7" + esprima "^4.0.0" + +json-schema-traverse@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" + integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== + +json-stable-stringify-without-jsonify@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" + integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= + +levn@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" + integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== + dependencies: + prelude-ls "^1.2.1" + type-check "~0.4.0" + link-module-alias@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/link-module-alias/-/link-module-alias-1.2.0.tgz#6a3b7b014cfe18b2759a1222fffce6a40fc120e4" @@ -373,7 +748,7 @@ link-module-alias@^1.2.0: dependencies: chalk "^2.4.1" -lodash@^4.17.15: +lodash@^4.17.14, lodash@^4.17.15: version "4.17.15" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548" integrity sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A== @@ -446,6 +821,11 @@ nan@^2.12.1: resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.1.tgz#d7be34dfa3105b91494c3147089315eff8874b01" integrity sha512-isWHgVjnFjh2x2yuJ/tj3JbwoHu3UC2dX5G/88Cm24yB6YopVgxvBObDY7n5xW6ExmFhJpSEQqFPvq9zaXc8Jw== +natural-compare@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" + integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= + needle@^2.2.1: version "2.5.0" resolved "https://registry.yarnpkg.com/needle/-/needle-2.5.0.tgz#e6fc4b3cc6c25caed7554bd613a5cf0bac8c31c0" @@ -532,6 +912,18 @@ once@^1.3.0: dependencies: wrappy "1" +optionator@^0.9.1: + version "0.9.1" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.1.tgz#4f236a6373dae0566a6d43e1326674f50c291499" + integrity sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw== + dependencies: + deep-is "^0.1.3" + fast-levenshtein "^2.0.6" + levn "^0.4.1" + prelude-ls "^1.2.1" + type-check "^0.4.0" + word-wrap "^1.2.3" + os-homedir@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" @@ -550,16 +942,33 @@ osenv@^0.1.4: os-homedir "^1.0.0" os-tmpdir "^1.0.0" +parent-module@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" + integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== + dependencies: + callsites "^3.0.0" + path-is-absolute@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= +path-key@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" + integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== + pathval@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/pathval/-/pathval-1.1.0.tgz#b942e6d4bde653005ef6b71361def8727d0645e0" integrity sha1-uULm1L3mUwBe9rcTYd74cn0GReA= +prelude-ls@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" + integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== + prism-media@^1.2.0: version "1.2.2" resolved "https://registry.yarnpkg.com/prism-media/-/prism-media-1.2.2.tgz#4f1c841f248b67d325a24b4e6b1a491b8f50a24f" @@ -570,6 +979,16 @@ process-nextick-args@~2.0.0: resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== +progress@^2.0.0: + version "2.0.3" + resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" + integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== + +punycode@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" + integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== + rc@^1.2.7: version "1.2.8" resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" @@ -593,6 +1012,16 @@ readable-stream@^2.0.6: string_decoder "~1.1.1" util-deprecate "~1.0.1" +regexpp@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.1.0.tgz#206d0ad0a5648cffbdb8ae46438f3dc51c9f78e2" + integrity sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q== + +resolve-from@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" + integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== + retry-as-promised@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/retry-as-promised/-/retry-as-promised-3.2.0.tgz#769f63d536bec4783549db0777cb56dadd9d8543" @@ -600,6 +1029,13 @@ retry-as-promised@^3.2.0: dependencies: any-promise "^1.3.0" +rimraf@2.6.3: + version "2.6.3" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab" + integrity sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA== + dependencies: + glob "^7.1.3" + rimraf@^2.6.1: version "2.7.1" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" @@ -637,6 +1073,11 @@ semver@^6.3.0: resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== +semver@^7.2.1: + version "7.3.2" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.2.tgz#604962b052b81ed0786aae84389ffba70ffd3938" + integrity sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ== + sequelize-pool@^2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/sequelize-pool/-/sequelize-pool-2.3.0.tgz#64f1fe8744228172c474f530604b6133be64993d" @@ -673,6 +1114,18 @@ setimmediate@^1.0.5: resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" integrity sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU= +shebang-command@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" + integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== + dependencies: + shebang-regex "^3.0.0" + +shebang-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" + integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== + shimmer@^1.1.0: version "1.2.1" resolved "https://registry.yarnpkg.com/shimmer/-/shimmer-1.2.1.tgz#610859f7de327b587efebf501fb43117f9aff337" @@ -683,6 +1136,20 @@ signal-exit@^3.0.0: resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c" integrity sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA== +slice-ansi@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-2.1.0.tgz#cacd7693461a637a5788d92a7dd4fba068e81636" + integrity sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ== + dependencies: + ansi-styles "^3.2.0" + astral-regex "^1.0.0" + is-fullwidth-code-point "^2.0.0" + +sprintf-js@~1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" + integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= + sqlite3@^4.1.1: version "4.2.0" resolved "https://registry.yarnpkg.com/sqlite3/-/sqlite3-4.2.0.tgz#49026d665e9fc4f922e56fb9711ba5b4c85c4901" @@ -713,6 +1180,15 @@ string-width@^1.0.1: is-fullwidth-code-point "^2.0.0" strip-ansi "^4.0.0" +string-width@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961" + integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w== + dependencies: + emoji-regex "^7.0.1" + is-fullwidth-code-point "^2.0.0" + strip-ansi "^5.1.0" + string_decoder@~1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" @@ -734,6 +1210,25 @@ strip-ansi@^4.0.0: dependencies: ansi-regex "^3.0.0" +strip-ansi@^5.1.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" + integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== + dependencies: + ansi-regex "^4.1.0" + +strip-ansi@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.0.tgz#0b1571dd7669ccd4f3e06e14ef1eed26225ae532" + integrity sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w== + dependencies: + ansi-regex "^5.0.0" + +strip-json-comments@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.0.tgz#7638d31422129ecf4457440009fba03f9f9ac180" + integrity sha512-e6/d0eBu7gHtdCqFt0xJr642LdToM5/cN4Qb9DbHjVx1CP5RyeM+zH7pbecEmDv/lBqb0QH+6Uqq75rxFPkM0w== + strip-json-comments@~2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" @@ -746,6 +1241,23 @@ supports-color@^5.3.0: dependencies: has-flag "^3.0.0" +supports-color@^7.1.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.1.0.tgz#68e32591df73e25ad1c4b49108a2ec507962bfd1" + integrity sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g== + dependencies: + has-flag "^4.0.0" + +table@^5.2.3: + version "5.4.6" + resolved "https://registry.yarnpkg.com/table/-/table-5.4.6.tgz#1292d19500ce3f86053b05f0e8e7e4a3bb21079e" + integrity sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug== + dependencies: + ajv "^6.10.2" + lodash "^4.17.14" + slice-ansi "^2.1.0" + string-width "^3.0.0" + tar@^4: version "4.4.13" resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.13.tgz#43b364bc52888d555298637b10d60790254ab525" @@ -759,6 +1271,11 @@ tar@^4: safe-buffer "^5.1.2" yallist "^3.0.3" +text-table@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" + integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= + toposort-class@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/toposort-class/-/toposort-class-1.0.1.tgz#7ffd1f78c8be28c3ba45cd4e1a3f5ee193bd9988" @@ -769,11 +1286,30 @@ tweetnacl@^1.0.3: resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-1.0.3.tgz#ac0af71680458d8a6378d0d0d050ab1407d35596" integrity sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw== +type-check@^0.4.0, type-check@~0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" + integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== + dependencies: + prelude-ls "^1.2.1" + type-detect@^4.0.0, type-detect@^4.0.5: version "4.0.8" resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== +type-fest@^0.8.1: + version "0.8.1" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" + integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== + +uri-js@^4.2.2: + version "4.2.2" + resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.2.2.tgz#94c540e1ff772956e2299507c010aea6c8838eb0" + integrity sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ== + dependencies: + punycode "^2.1.0" + util-deprecate@~1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" @@ -784,11 +1320,23 @@ uuid@^3.3.3: resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== +v8-compile-cache@^2.0.3: + version "2.1.1" + resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.1.1.tgz#54bc3cdd43317bca91e35dcaf305b1a7237de745" + integrity sha512-8OQ9CL+VWyt3JStj7HX7/ciTL2V3Rl1Wf5OL+SNTm0yK1KvtReVulksyeRnCANHHuUxHlQig+JJDlUhBt1NQDQ== + validator@^10.11.0: version "10.11.0" resolved "https://registry.yarnpkg.com/validator/-/validator-10.11.0.tgz#003108ea6e9a9874d31ccc9e5006856ccd76b228" integrity sha512-X/p3UZerAIsbBfN/IwahhYaBbY68EN/UQBWHtsbXGT5bfrH/p4NQzUCG1kF/rtKaNpnJ7jAu6NGTdSNtyNIXMw== +which@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" + integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== + dependencies: + isexe "^2.0.0" + wide-align@^1.1.0: version "1.1.3" resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.3.tgz#ae074e6bdc0c14a431e804e624549c633b000457" @@ -803,11 +1351,23 @@ wkx@^0.4.8: dependencies: "@types/node" "*" +word-wrap@^1.2.3: + version "1.2.3" + resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" + integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== + wrappy@1: version "1.0.2" resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= +write@1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/write/-/write-1.0.3.tgz#0800e14523b923a387e415123c865616aae0f5c3" + integrity sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig== + dependencies: + mkdirp "^0.5.1" + ws@^7.2.1: version "7.3.0" resolved "https://registry.yarnpkg.com/ws/-/ws-7.3.0.tgz#4b2f7f219b3d3737bc1a2fbf145d825b94d38ffd"