diff --git a/assets/fonts/Captcha.ttf b/assets/fonts/Captcha.ttf new file mode 100644 index 00000000..13f5dc7d Binary files /dev/null and b/assets/fonts/Captcha.ttf differ diff --git a/commands/games/captcha-quiz.js b/commands/games/captcha-quiz.js new file mode 100644 index 00000000..f008dabd --- /dev/null +++ b/commands/games/captcha-quiz.js @@ -0,0 +1,49 @@ +const { Command } = require('discord.js-commando'); +const { createCanvas, registerFont } = require('canvas'); +const path = require('path'); +registerFont(path.join(__dirname, '..', '..', 'assets', 'fonts', 'Captcha.ttf'), { family: 'Captcha' }); + +module.exports = class CaptchaQuizCommand extends Command { + constructor(client) { + super(client, { + name: 'captcha-quiz', + aliases: ['captcha'], + group: 'games', + memberName: 'captcha-quiz', + description: 'Try to guess what the captcha says.', + throttling: { + usages: 1, + duration: 10 + }, + clientPermissions: ['ATTACH_FILES'] + }); + } + + async run(msg) { + const canvas = createCanvas(100, 32); + const ctx = canvas.getContext('2d'); + const text = this.randomText(5); + ctx.fillStyle = 'white'; + ctx.fillRect(0, 0, canvas.width, canvas.height); + ctx.beginPath(); + ctx.strokeStyle = '#0088cc'; + ctx.font = '26px Captcha'; + ctx.rotate(-0.05); + ctx.strokeText(text, 15, 26); + await msg.say({ files: [{ attachment: canvas.toBuffer(), name: 'captcha-quiz.png' }] }); + const msgs = await msg.channel.awaitMessages(res => res.author.id === msg.author.id, { + max: 1, + time: 15000 + }); + if (!msgs.size) return msg.say(`Sorry, time is up! It was ${text}.`); + if (msgs.first().content !== text) return msg.say(`Nope, sorry, it's ${text}.`); + return msg.say('Nice job! 10/10! You deserve some cake!'); + } + + randomText(len) { + const pool = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ23456789'.split(''); + const result = []; + for (let i = 0; i > len; i++) result.push(pool[Math.floor(Math.random() * pool.length)]); + return result.join(''); + } +}; diff --git a/commands/games/math.js b/commands/games/math-quiz.js similarity index 92% rename from commands/games/math.js rename to commands/games/math-quiz.js index 0545dcfd..e9695811 100644 --- a/commands/games/math.js +++ b/commands/games/math-quiz.js @@ -11,13 +11,13 @@ const maxValues = { impossible: 1000000 }; -module.exports = class MathGameCommand extends Command { +module.exports = class MathQuizCommand extends Command { constructor(client) { super(client, { - name: 'math-game', - aliases: ['math-quiz', 'math-test'], + name: 'math-quiz', + aliases: ['math-game'], group: 'games', - memberName: 'math', + memberName: 'math-quiz', description: 'See how fast you can answer a math problem in a given time limit.', args: [ { diff --git a/commands/games/quiz.js b/commands/games/quiz.js index 33b50b4d..13eb36f2 100644 --- a/commands/games/quiz.js +++ b/commands/games/quiz.js @@ -9,7 +9,7 @@ module.exports = class QuizCommand extends Command { constructor(client) { super(client, { name: 'quiz', - aliases: ['jeopardy', 'test'], + aliases: ['jeopardy'], group: 'games', memberName: 'quiz', description: 'Answer a quiz question.', diff --git a/commands/games/typing.js b/commands/games/typing-test.js similarity index 91% rename from commands/games/typing.js rename to commands/games/typing-test.js index d7d2e48a..9e10fcc2 100644 --- a/commands/games/typing.js +++ b/commands/games/typing-test.js @@ -11,13 +11,13 @@ const times = { impossible: 5000 }; -module.exports = class TypingGameCommand extends Command { +module.exports = class TypingTestCommand extends Command { constructor(client) { super(client, { - name: 'typing-game', - aliases: ['typing-quiz', 'typing-test'], + name: 'typing-test', + aliases: ['typing-game'], group: 'games', - memberName: 'typing', + memberName: 'typing-test', description: 'See how fast you can type a sentence in a given time limit.', args: [ { diff --git a/commands/games/wizard-convention.js b/commands/games/wizard-convention.js index fa5fe591..162950be 100644 --- a/commands/games/wizard-convention.js +++ b/commands/games/wizard-convention.js @@ -106,24 +106,11 @@ module.exports = class WizardConventionCommand extends Command { max: players.size, time: 120000 }); - const counts = new Collection(); - for (const vote of votes.values()) { - const player = players.get(playersArr[parseInt(vote.content, 10) - 1].id); - if (counts.has(player.id)) { - ++counts.get(player.id).votes; - } else { - counts.set(player.id, { - id: player.id, - votes: 1, - user: player.user - }); - } - } - if (!counts.size) { + if (!votes.size) { await msg.say('No one will be expelled.'); continue; } - const expelled = counts.sort((a, b) => b.votes - a.votes).first(); + const expelled = this.getExpelled(votes, players, playersArr); await msg.say(`${expelled.user} will be expelled.`); players.delete(expelled.id); ++turn; @@ -154,4 +141,21 @@ module.exports = class WizardConventionCommand extends Command { i++; } } + + getExpelled(votes, players, playersArr) { + const counts = new Collection(); + for (const vote of votes.values()) { + const player = players.get(playersArr[parseInt(vote.content, 10) - 1].id); + if (counts.has(player.id)) { + ++counts.get(player.id).votes; + } else { + counts.set(player.id, { + id: player.id, + votes: 1, + user: player.user + }); + } + } + return counts.sort((a, b) => b.votes - a.votes).first(); + } }; diff --git a/commands/util/info.js b/commands/util/info.js index 1779b0fd..ed28e8ad 100644 --- a/commands/util/info.js +++ b/commands/util/info.js @@ -19,7 +19,7 @@ module.exports = class InfoCommand extends Command { run(msg) { const embed = new MessageEmbed() .setColor(0x00AE86) - .setFooter('©2017 dragonfire535#8081') + .setFooter('©2017 dragonfire535#0817') .addField('❯ Servers', this.client.guilds.size, true) .addField('❯ Shards', diff --git a/package.json b/package.json index c2154fb7..823aa504 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "xiao", - "version": "61.5.0", + "version": "62.0.0", "description": "Your personal server companion.", "main": "Xiao.js", "scripts": {