const { Command } = require('discord-akairo'); const guessLeaderboard = require('../../models').guessLeaderboard; class guessCommand extends Command { constructor() { super('guess', { aliases: ['guess'], category: 'minigame', clientPermissions: ['SEND_MESSAGES', 'EMBED_LINKS'], args: [ { id: 'leaderboard', type: 'flag', match: 'flag', flag: ['--leaderboard', '--top'] }, ], description: { content: 'Guess the number ( Say "stop" to stop playing )', usage: '', examples: [''] } }); } async exec(message, args) { /* * TODO: * * Make leaderboard look and work better * Separate by categories * */ if (args.leaderboard) { const leaderboard = await guessLeaderboard.findAll({order: ['try']}); let top = []; let leaderboardEmbed = this.client.util.embed() .setColor(message.member ? message.member.displayHexColor : 'NAVY') .setTitle('Guess leaderboard'); for (let i = 0; i < leaderboard.length; i++) { this.client.users.fetch(leaderboard[i].get('memberID')) .then(user => { let body = `**${user.username}**\nTry: ${leaderboard[i].get('try')}`; top.push(body); if (leaderboard[i].get('difficulty') == 'Easy') { leaderboardEmbed.addField('Easy', body, true); } else if (leaderboard[i].get('difficulty') == 'Normal') { leaderboardEmbed.addField('Normal', body, true); } else if (leaderboard[i].get('difficulty') == 'Hard') { leaderboardEmbed.addField('Hard', body, true); } if (i + 1 == leaderboard.length) { return message.channel.send(leaderboardEmbed); } }); } return; } message.reply('1. Easy ( 0 - 100 )\n2. Normal ( 0 - 1000 )\n3. Hard ( 0 - 10000 )'); const filter = m => m.content && m.author.id == message.author.id; message.channel.awaitMessages(filter, {time: 10000, max: 1, errors: ['time'] }) .then(messages => { let max; let difficulty; if (messages.map(messages => messages.content)[0] == 1) { max = 100; difficulty = 'Easy'; } else if (messages.map(messages => messages.content)[0] == 2) { max = 1000; difficulty = 'Normal'; } else if (messages.map(messages => messages.content)[0] == 3) { max = 10000; difficulty = 'Hard'; } else { return message.reply('This isin\'t a valid difficulty number! Please try again.'); } let secretnumber = Math.floor((Math.random() * max) + 1); let numberTry = 0; console.log(secretnumber); message.reply('What is the number?'); message.channel.awaitMessages(filter, {max: 1}) .then(input => { checkNumber(input.map(input => input.content)[0]); }); function tryAgain (input) { if (input != secretnumber) { if (input > secretnumber) { message.reply('Its less!\nWhat is the number?'); } else if (input < secretnumber) { message.reply('Its more!\nWhat is the number?'); } } message.channel.awaitMessages(filter, {max: 1}) .then(input => { checkNumber(input.map(input => input.content)[0]); }); } async function checkNumber (input) { numberTry++; if (input.toLowerCase() == 'stop') { return message.reply('Ok, let\'s stop playing :('); } else if (input != secretnumber) { tryAgain(input); } else { const leaderboard = await guessLeaderboard.findOne({where: {memberID: message.author.id, difficulty: difficulty}}); if (!leaderboard) { const body = {memberID: message.author.id, try: numberTry, difficulty:difficulty}; await guessLeaderboard.create(body); } else { const body = {memberID: message.author.id, try: numberTry, difficulty:difficulty}; await guessLeaderboard.update(body, {where: {memberID: message.author.id, difficulty: difficulty}}); } if (numberTry > 1) { return message.reply(`Congratulations! You won! It took you ${numberTry} turns!`); } else { return message.reply('Congratulations! You won! It took you 1 Turn!'); } } } }) .catch(() => { return message.reply('Timed out'); }); } } module.exports = guessCommand;