From 14f85f94bdd8090d15f6474b145776558a8afdef Mon Sep 17 00:00:00 2001 From: Daniel Odendahl Jr Date: Thu, 1 Jun 2017 08:44:02 +0000 Subject: [PATCH] 22.0.0 --- Shard.js | 4 +- XiaoBot.js | 72 ++++++++++----------- assets/json/clear-setting.json | 1 - assets/json/math-game.json | 21 +++++++ assets/json/soundboard.json | 10 +-- assets/json/typing-game.json | 80 ++++++++++++++---------- assets/json/user-info.json | 14 +++++ assets/sounds/mario-death.mp3 | Bin 152702 -> 0 bytes assets/sounds/pokemon-center.mp3 | Bin 174645 -> 0 bytes assets/sounds/zelda-chest.mp3 | Bin 101399 -> 0 bytes commands/avataredit/3000-years.js | 40 ++++++------ commands/avataredit/beautiful.js | 42 ++++++------- commands/avataredit/bob-ross.js | 48 +++++++------- commands/avataredit/card.js | 84 +++++++++++++------------ commands/avataredit/challenger.js | 44 +++++++------ commands/avataredit/dexter.js | 44 +++++++------ commands/avataredit/greyscale.js | 52 ++++++++-------- commands/avataredit/invert.js | 50 +++++++-------- commands/avataredit/rip.js | 58 +++++++++-------- commands/avataredit/simba.js | 44 +++++++------ commands/avataredit/steam-card.js | 50 +++++++-------- commands/avataredit/triggered.js | 56 ++++++++--------- commands/avataredit/wanted.js | 40 ++++++------ commands/games/battle.js | 67 ++++++++++++++------ commands/games/lottery.js | 7 ++- commands/games/math-game.js | 45 +++++--------- commands/games/quiz.js | 49 +++++++-------- commands/games/rock-paper-scissors.js | 45 +++++++++----- commands/games/slots.js | 20 +++--- commands/games/typing-game.js | 45 +++++--------- commands/guildinfo/emoji.js | 7 ++- commands/guildinfo/server-info.js | 24 ++++--- commands/moderation/ban.js | 84 +++++++++++++++---------- commands/moderation/kick.js | 82 +++++++++++++++--------- commands/moderation/lockdown.js | 41 +++++------- commands/moderation/prune.js | 13 ++-- commands/moderation/softban.js | 86 ++++++++++++++++---------- commands/moderation/unban.js | 69 +++++++++++++-------- commands/moderation/warn.js | 75 ++++++++++++++-------- commands/numedit/currency.js | 43 +++++++------ commands/numedit/math.js | 6 +- commands/numedit/temperature.js | 47 +++++++++----- commands/random/cleverbot.js | 9 +-- commands/random/easter-egg.js | 11 ++-- commands/random/horoscope.js | 45 +++++++------- commands/random/meme.js | 18 +++--- commands/random/soundboard.js | 46 +++++++------- commands/random/spam.js | 3 +- commands/random/star.js | 31 ++++++---- commands/random/strawpoll.js | 42 +++++++------ commands/random/today.js | 28 ++++----- commands/random/would-you-rather.js | 20 +++--- commands/randomimg/cat.js | 10 +-- commands/randomimg/dog.js | 10 +-- commands/randomimg/xiao.js | 3 +- commands/randomimg/xkcd.js | 55 ++++++++-------- commands/response/compliment.js | 13 ++-- commands/response/name.js | 11 ++-- commands/response/roast.js | 10 +-- commands/response/roll.js | 3 +- commands/response/ship.js | 8 +-- commands/roleplay/cuddle.js | 16 +++-- commands/roleplay/divorce.js | 16 +++-- commands/roleplay/eat.js | 16 +++-- commands/roleplay/falcon-punch.js | 16 +++-- commands/roleplay/fist-bump.js | 16 +++-- commands/roleplay/high-five.js | 14 +++-- commands/roleplay/hit-with-shovel.js | 16 +++-- commands/roleplay/hug.js | 16 +++-- commands/roleplay/inhale.js | 16 +++-- commands/roleplay/kill.js | 16 +++-- commands/roleplay/kiss.js | 16 +++-- commands/roleplay/marry.js | 16 +++-- commands/roleplay/pat.js | 16 +++-- commands/roleplay/poke.js | 16 +++-- commands/roleplay/punch.js | 16 +++-- commands/roleplay/slap.js | 16 +++-- commands/search/anime.js | 20 +++--- commands/search/bot-info.js | 12 ++-- commands/search/bulbapedia.js | 42 ++++++------- commands/search/danbooru.js | 21 +++---- commands/search/define.js | 34 +++++----- commands/search/discrim.js | 14 +++-- commands/search/forecast.js | 60 +++++++++--------- commands/search/gelbooru.js | 8 +-- commands/search/giphy.js | 24 ++++--- commands/search/github.js | 14 ++--- commands/search/google.js | 24 ++++--- commands/search/konachan.js | 20 +++--- commands/search/lmgtfy.js | 2 +- commands/search/manga.js | 20 +++--- commands/search/map.js | 31 +++++----- commands/search/neopet.js | 26 ++++---- commands/search/osu.js | 78 ++++++++++++----------- commands/search/rule34.js | 28 ++++----- commands/search/soundcloud.js | 52 ++++++++-------- commands/search/urban.js | 34 +++++----- commands/search/wattpad.js | 62 +++++++++---------- commands/search/weather.js | 78 ++++++++++++----------- commands/search/wikipedia.js | 42 ++++++------- commands/search/youtube.js | 40 ++++++------ commands/search/yu-gi-oh.js | 53 ++++++++-------- commands/settings/clear-setting.js | 9 ++- commands/settings/member-message.js | 18 ++++-- commands/settings/setting-list.js | 12 ++-- commands/settings/staff-role.js | 27 -------- commands/textedit/binary.js | 13 ++-- commands/textedit/cow-say.js | 9 ++- commands/textedit/morse.js | 11 ++-- commands/textedit/pirate.js | 11 ++-- commands/textedit/repeat.js | 2 +- commands/textedit/reverse.js | 2 +- commands/textedit/temmie.js | 11 ++-- commands/textedit/translate.js | 58 ++++++++--------- commands/textedit/upside-down.js | 2 +- commands/textedit/webhook.js | 18 ++---- commands/textedit/zalgo.js | 11 ++-- commands/userinfo/avatar.js | 5 +- commands/userinfo/user-info.js | 55 +++++----------- commands/util/help.js | 12 ++-- commands/util/info.js | 24 +++---- commands/util/shard-info.js | 15 +++-- package.json | 6 +- providers/Sequelize.js | 53 +++++++++++----- structures/Command.js | 22 +++---- structures/CommandoClient.js | 1 + structures/PostgreSQL.js | 12 ++-- structures/Stats.js | 25 +++++--- structures/Util.js | 13 ++++ 129 files changed, 1915 insertions(+), 1720 deletions(-) create mode 100644 assets/json/math-game.json create mode 100644 assets/json/user-info.json delete mode 100644 assets/sounds/mario-death.mp3 delete mode 100644 assets/sounds/pokemon-center.mp3 delete mode 100644 assets/sounds/zelda-chest.mp3 delete mode 100644 commands/settings/staff-role.js create mode 100644 structures/Util.js diff --git a/Shard.js b/Shard.js index eaab8bef..27f711c9 100644 --- a/Shard.js +++ b/Shard.js @@ -1,4 +1,6 @@ const { ShardingManager } = require('discord.js'); const { TOKEN } = process.env; -const Manager = new ShardingManager('./XiaoBot.js', { token: TOKEN }); +const Manager = new ShardingManager('./XiaoBot.js', { + token: TOKEN +}); Manager.spawn(2); diff --git a/XiaoBot.js b/XiaoBot.js index 8387cedf..2eb5bd76 100644 --- a/XiaoBot.js +++ b/XiaoBot.js @@ -1,13 +1,11 @@ const { TOKEN, OWNER, PREFIX, INVITE } = process.env; const path = require('path'); -const { FriendlyError } = require('discord.js-commando'); -const CommandoClient = require('./structures/CommandoClient'); +const CommandoClient = require('./structures/Client'); const client = new CommandoClient({ commandPrefix: PREFIX, owner: OWNER, - disableEveryone: true, invite: INVITE, - unknownCommandResponse: false + disableEveryone: true }); const { carbon, dBots } = require('./structures/Stats'); const SequelizeProvider = require('./providers/Sequelize'); @@ -32,16 +30,19 @@ client.registry ['roleplay', 'Roleplay'] ]) .registerDefaultGroups() - .registerDefaultCommands({ help: false, ping: false }) + .registerDefaultCommands({ + help: false, + ping: false + }) .registerCommandsIn(path.join(__dirname, 'commands')); client.on('ready', () => { - console.log(`[Ready] Shard ${client.shard.id} Logged in as ${client.user.tag} (${client.user.id})!`); + console.log(`[READY] Shard ${client.shard.id} Logged in as ${client.user.tag} (${client.user.id})!`); client.user.setGame(`${PREFIX}help | Shard ${client.shard.id}`); }); client.on('disconnect', (event) => { - console.log(`[Disconnect] Shard ${client.shard.id} disconnected with Code ${event.code}.`); + console.log(`[DISCONNECT] Shard ${client.shard.id} disconnected with Code ${event.code}.`); process.exit(0); }); @@ -49,52 +50,52 @@ client.on('error', console.error); client.on('warn', console.warn); -client.on('commandError', (command, err) => { - if (err instanceof FriendlyError) return; - console.error(command.name, err); -}); +client.on('commandError', (command, err) => console.error(command.name, err)); client.dispatcher.addInhibitor(msg => { - if (msg.channel.type === 'dm') return false; const role = msg.guild.settings.get('singleRole'); - if (!role) return false; - if (!msg.guild.roles.has(role)) return false; - if (client.isOwner(msg.author)) return false; - if (msg.member.hasPermission('ADMINISTRATOR')) return false; - if (!msg.member.roles.has(role)) + if (!msg.guild || !msg.guild.roles.has(role) || msg.member.hasPermission('ADMINISTRATOR')) { + return false; + } + if (!msg.member.roles.has(role)) { return ['singleRole', msg.reply(`Only the ${msg.guild.roles.get(role).name} role may use commands.`)]; + } else { + return false; + } }); client.on('message', (msg) => { - if (msg.guild && msg.guild.settings.get('inviteGuard') && /(discord(\.gg\/|app\.com\/invite\/|\.me\/))/gi.test(msg.content)) { - if (msg.author.bot || - msg.member.hasPermission('ADMINISTRATOR') || - msg.author.id === msg.guild.ownerID || - msg.member.roles.has(msg.guild.settings.get('staffRole')) || - !msg.channel.permissionsFor(client.user).has('SEND_MESSAGES')) return; - if (msg.channel.permissionsFor(client.user).has('MANAGE_MESSAGES')) msg.delete(); - return msg.reply('Invites are prohibited from being posted here.'); + if (!msg.guild || !msg.guild.settings.get('inviteGuard')) return; + if (/(discord(\.gg\/|app\.com\/invite\/|\.me\/))/gi.test(msg.content)) { + if (msg.author.bot || msg.member.hasPermission('ADMINISTRATOR')) return; + if (msg.channel.permissionsFor(client.user).has(['SEND_MESSAGES', 'MANAGE_MESSAGES'])) { + msg.delete(); + return msg.reply('Invites are prohibited from being posted here.'); + } } }); client.on('messageReactionAdd', (reaction, user) => { if (reaction.emoji.name !== '⭐') return; - const msg = reaction.message; - const channel = msg.guild.channels.get(msg.guild.settings.get('starboard')); + const { message } = reaction; + const channel = message.guild.channels.get(message.guild.settings.get('starboard')); if (!channel) return; - if (user.id === msg.author.id) { - if (msg.channel.permissionsFor(client.user).has('MANAGE_MESSAGES')) reaction.remove(user); - return msg.reply('You cannot star your own messages, baka.'); + if (user.id === message.author.id) { + if (message.channel.permissionsFor(client.user).has(['SEND_MESSAGES', 'MANAGE_MESSAGES'])) { + reaction.remove(user); + return message.reply('You cannot star your own messages, baka.'); + } else return; } - client.registry.resolveCommand('random:star').run(msg, { id: msg.id }, true); + return client.registry.resolveCommand('random:star').run(message, { id: message.id }, true); }); client.on('guildMemberAdd', (member) => { const role = member.guild.roles.get(member.guild.settings.get('joinRole')); - if (role && member.guild.me.hasPermission('MANAGE_ROLES')) member.addRole(role).catch(() => null); + if (role && member.guild.me.hasPermission('MANAGE_ROLES')) { + member.addRole(role).catch(() => null); + } const channel = member.guild.channels.get(member.guild.settings.get('memberLog')); - if (!channel) return; - if (!channel.permissionsFor(client.user).has('SEND_MESSAGES')) return; + if (!channel || !channel.permissionsFor(client.user).has('SEND_MESSAGES')) return; const msg = member.guild.settings.get('joinMsg', 'Welcome !') .replace(/()/gi, member.user.username) .replace(/()/gi, member.guild.name) @@ -104,8 +105,7 @@ client.on('guildMemberAdd', (member) => { client.on('guildMemberRemove', (member) => { const channel = member.guild.channels.get(member.guild.settings.get('memberLog')); - if (!channel) return; - if (!channel.permissionsFor(client.user).has('SEND_MESSAGES')) return; + if (!channel || !channel.permissionsFor(client.user).has('SEND_MESSAGES')) return; const msg = member.guild.settings.get('leaveMsg', 'Bye ...') .replace(/()/gi, member.user.username) .replace(/()/gi, member.guild.name) diff --git a/assets/json/clear-setting.json b/assets/json/clear-setting.json index d1f7bb93..01c78fa9 100644 --- a/assets/json/clear-setting.json +++ b/assets/json/clear-setting.json @@ -4,7 +4,6 @@ "memberLog", "joinMsg", "leaveMsg", - "staffRole", "singleRole", "joinRole", "starboard" diff --git a/assets/json/math-game.json b/assets/json/math-game.json new file mode 100644 index 00000000..bcac64f5 --- /dev/null +++ b/assets/json/math-game.json @@ -0,0 +1,21 @@ +{ + "operations": [ + "+", + "-", + "*" + ], + "difficulties": [ + "easy", + "medium", + "hard", + "extreme", + "impossible" + ], + "maxValues": { + "easy": 10, + "medium": 50, + "hard": 100, + "extreme": 1000, + "impossible": 10000 + } +} diff --git a/assets/json/soundboard.json b/assets/json/soundboard.json index 03ab3e8c..b1dfd31c 100644 --- a/assets/json/soundboard.json +++ b/assets/json/soundboard.json @@ -3,20 +3,14 @@ "airhorn", "cat", "dun dun dun", - "mario death", "pikachu", - "pokemon center", - "space", - "zelda chest" + "space" ], "paths": { "airhorn": "airhorn.mp3", "cat": "cat.mp3", "dun dun dun": "dun-dun-dun.mp3", - "mario death": "mario-death.mp3", "pikachu": "pikachu.mp3", - "pokemon center": "pokemon-center.mp3", - "space": "space.mp3", - "zelda chest": "zelda-chest.mp3" + "space": "space.mp3" } } diff --git a/assets/json/typing-game.json b/assets/json/typing-game.json index 7c42fc21..14209834 100644 --- a/assets/json/typing-game.json +++ b/assets/json/typing-game.json @@ -1,32 +1,48 @@ -[ - "The quick brown fox jumps over the lazy dog.", - "Buffalo buffalo Buffalo buffalo buffalo buffalo Buffalo buffalo.", - "How razorback-jumping frogs can level six piqued gymnasts!", - "Amazingly few discotheques provide jukeboxes.", - "I am so blue I'm greener than purple.", - "I stepped on a Corn Flake, now I'm a Cereal Killer.", - "On a scale from one to ten what is your favourite colour of the alphabet?", - "The sparkly lamp ate a pillow then punched Larry.", - "My world is where everybody is a pony and we all eat rainbows and poop butterflies.", - "If your canoe is stuck in a tree with the headlights on, how many pancakes does it take to get to the moon?", - "There's a purple mushroom in my backyard, screaming Taco's!", - "When life gives you lemons, chuck them at people you hate.", - "I think I will buy the red car, or I will lease the blue one.", - "Italy is my favorite country; in fact, I plan to spend two weeks there next year.", - "She borrowed the book from him many years ago and hasn't yet returned it.", - "Lets all be unique together until we realise we are all the same.", - "If Purple People Eaters are real… where do they find purple people to eat?", - "The waves were crashing on the shore; it was a lovely sight.", - "This is the last random sentence I will be writing and I am going to stop mid-sent.", - "The memory we used to share is no longer coherent.", - "She did not cheat on the test, for it was not the right thing to do.", - "She only paints with bold colors; she does not like pastels.", - "Malls are great places to shop; I can find everything I need under one roof.", - "The body may perhaps compensates for the loss of a true metaphysics.", - "They got there early, and they got really good seats.", - "Everyone was busy, so I went to the movie alone.", - "Yeah, I think it's a good environment for learning English.", - "I would have gotten the promotion, but my attendance wasn’t good enough.", - "There were white out conditions in the town; subsequently, the roads were impassable.", - "If you like tuna and tomato sauce- try combining the two. It’s really not as bad as it sounds." -] +{ + "sentences": [ + "The quick brown fox jumps over the lazy dog.", + "Buffalo buffalo Buffalo buffalo buffalo buffalo Buffalo buffalo.", + "How razorback-jumping frogs can level six piqued gymnasts!", + "Amazingly few discotheques provide jukeboxes.", + "I am so blue I'm greener than purple.", + "I stepped on a Corn Flake, now I'm a Cereal Killer.", + "On a scale from one to ten what is your favourite colour of the alphabet?", + "The sparkly lamp ate a pillow then punched Larry.", + "My world is where everybody is a pony and we all eat rainbows and poop butterflies.", + "If your canoe is stuck in a tree with the headlights on, how many pancakes does it take to get to the moon?", + "There's a purple mushroom in my backyard, screaming Taco's!", + "When life gives you lemons, chuck them at people you hate.", + "I think I will buy the red car, or I will lease the blue one.", + "Italy is my favorite country; in fact, I plan to spend two weeks there next year.", + "She borrowed the book from him many years ago and hasn't yet returned it.", + "Lets all be unique together until we realise we are all the same.", + "If Purple People Eaters are real… where do they find purple people to eat?", + "The waves were crashing on the shore; it was a lovely sight.", + "This is the last random sentence I will be writing and I am going to stop mid-sent.", + "The memory we used to share is no longer coherent.", + "She did not cheat on the test, for it was not the right thing to do.", + "She only paints with bold colors; she does not like pastels.", + "Malls are great places to shop; I can find everything I need under one roof.", + "The body may perhaps compensates for the loss of a true metaphysics.", + "They got there early, and they got really good seats.", + "Everyone was busy, so I went to the movie alone.", + "Yeah, I think it's a good environment for learning English.", + "I would have gotten the promotion, but my attendance wasn’t good enough.", + "There were white out conditions in the town; subsequently, the roads were impassable.", + "If you like tuna and tomato sauce- try combining the two. It’s really not as bad as it sounds." + ], + "difficulties": [ + "easy", + "medium", + "hard", + "extreme", + "impossible" + ] + "times": { + "easy": 25000, + "medium": 20000, + "hard": 15000, + "extreme": 10000, + "impossible": 5000 + } +} \ No newline at end of file diff --git a/assets/json/user-info.json b/assets/json/user-info.json new file mode 100644 index 00000000..a1bf79d4 --- /dev/null +++ b/assets/json/user-info.json @@ -0,0 +1,14 @@ +{ + "statuses": { + "online": "<:online:313956277808005120> Online", + "idle": "<:away:313956277220802560> Idle", + "dnd": "<:dnd:313956276893646850> Do Not Disturb", + "offline": "<:offline:313956277237710868> Offline" + }, + "colors": { + "online": 0x00AE86, + "idle": 0xFFFF00, + "dnd": 0xFF0000, + "offline": 0x808080 + } +} diff --git a/assets/sounds/mario-death.mp3 b/assets/sounds/mario-death.mp3 deleted file mode 100644 index 5d97899ba1685be2e41b40c75e9f296c79c9f628..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 152702 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 z%0AGo4Fsz!VWWcO# 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 diff --git a/commands/avataredit/3000-years.js b/commands/avataredit/3000-years.js index 44a1d2c3..0c98385d 100644 --- a/commands/avataredit/3000-years.js +++ b/commands/avataredit/3000-years.js @@ -22,34 +22,32 @@ module.exports = class YearsCommand extends Command { { key: 'user', prompt: 'Which user would you like to edit the avatar of?', - type: 'user' + type: 'user', + default: '' } ] }); } async run(msg, args) { - const { user } = args; + const user = args.user || msg.author; const avatarURL = user.avatarURL('png', 256); - if (!avatarURL) return msg.say('This user has no avatar.'); - try { - const Image = Canvas.Image; - const canvas = new Canvas(856, 569); - const ctx = canvas.getContext('2d'); - const base = new Image(); - const avatar = new Image(); - const generate = () => { - ctx.drawImage(base, 0, 0); - ctx.drawImage(avatar, 461, 127, 200, 200); - }; - base.src = await fs.readFileAsync(path.join(__dirname, '..', '..', 'assets', 'images', '3000-years.png')); - const { body } = await snekfetch.get(avatarURL); - avatar.src = body; - generate(); - return msg.say({ files: [{ attachment: canvas.toBuffer(), name: 'az.png' }] }) - .catch(err => msg.say(`${err.name}: ${err.message}`)); - } catch (err) { - return msg.say(`${err.name}: ${err.message}`); + if (!avatarURL) { + return msg.say('The User Provided has No Avatar.'); } + const Image = Canvas.Image; + const canvas = new Canvas(856, 569); + const ctx = canvas.getContext('2d'); + const base = new Image(); + const avatar = new Image(); + const generate = () => { + ctx.drawImage(base, 0, 0); + ctx.drawImage(avatar, 461, 127, 200, 200); + }; + base.src = await fs.readFileAsync(path.join(__dirname, '..', '..', 'assets', 'images', '3000-years.png')); + const { body } = await snekfetch.get(avatarURL); + avatar.src = body; + generate(); + return msg.say({ files: [{ attachment: canvas.toBuffer(), name: 'az.png' }] }); } }; diff --git a/commands/avataredit/beautiful.js b/commands/avataredit/beautiful.js index 2a695b9a..0e2545f0 100644 --- a/commands/avataredit/beautiful.js +++ b/commands/avataredit/beautiful.js @@ -22,35 +22,33 @@ module.exports = class BeautifulCommand extends Command { { key: 'user', prompt: 'Which user would you like to edit the avatar of?', - type: 'user' + type: 'user', + default: '' } ] }); } async run(msg, args) { - const { user } = args; + const user = args.user || msg.author; const avatarURL = user.avatarURL('png', 256); - if (!avatarURL) return msg.say('This user has no avatar.'); - try { - const Image = Canvas.Image; - const canvas = new Canvas(500, 532); - const ctx = canvas.getContext('2d'); - const base = new Image(); - const avatar = new Image(); - const generate = () => { - ctx.drawImage(base, 0, 0); - ctx.drawImage(avatar, 341, 35, 117, 135); - ctx.drawImage(avatar, 343, 301, 117, 135); - }; - base.src = await fs.readFileAsync(path.join(__dirname, '..', '..', 'assets', 'images', 'beautiful.png')); - const { body } = await snekfetch.get(avatarURL); - avatar.src = body; - generate(); - return msg.say({ files: [{ attachment: canvas.toBuffer(), name: 'grunkle.png' }] }) - .catch(err => msg.say(`${err.name}: ${err.message}`)); - } catch (err) { - return msg.say(`${err.name}: ${err.message}`); + if (!avatarURL) { + return msg.say('The User Provided has No Avatar.'); } + const Image = Canvas.Image; + const canvas = new Canvas(500, 532); + const ctx = canvas.getContext('2d'); + const base = new Image(); + const avatar = new Image(); + const generate = () => { + ctx.drawImage(base, 0, 0); + ctx.drawImage(avatar, 341, 35, 117, 135); + ctx.drawImage(avatar, 343, 301, 117, 135); + }; + base.src = await fs.readFileAsync(path.join(__dirname, '..', '..', 'assets', 'images', 'beautiful.png')); + const { body } = await snekfetch.get(avatarURL); + avatar.src = body; + generate(); + return msg.say({ files: [{ attachment: canvas.toBuffer(), name: 'grunkle.png' }] }); } }; diff --git a/commands/avataredit/bob-ross.js b/commands/avataredit/bob-ross.js index 0e8decaa..dacc29c3 100644 --- a/commands/avataredit/bob-ross.js +++ b/commands/avataredit/bob-ross.js @@ -22,38 +22,36 @@ module.exports = class BobRossCommand extends Command { { key: 'user', prompt: 'Which user would you like to edit the avatar of?', - type: 'user' + type: 'user', + default: '' } ] }); } async run(msg, args) { - const { user } = args; + const user = args.user || msg.author; const avatarURL = user.avatarURL('png', 256); - if (!avatarURL) return msg.say('This user has no avatar.'); - try { - const Image = Canvas.Image; - const canvas = new Canvas(600, 775); - const ctx = canvas.getContext('2d'); - const base = new Image(); - const avatar = new Image(); - const generate = () => { - ctx.fillStyle = 'white'; - ctx.fillRect(0, 0, 600, 775); - ctx.rotate(3 * Math.PI / 180); - ctx.drawImage(avatar, 69, 102, 256, 256); - ctx.rotate(-3 * Math.PI / 180); - ctx.drawImage(base, 0, 0); - }; - base.src = await fs.readFileAsync(path.join(__dirname, '..', '..', 'assets', 'images', 'bob-ross.png')); - const { body } = await snekfetch.get(avatarURL); - avatar.src = body; - generate(); - return msg.say({ files: [{ attachment: canvas.toBuffer(), name: 'ross.png' }] }) - .catch(err => msg.say(`${err.name}: ${err.message}`)); - } catch (err) { - return msg.say(`${err.name}: ${err.message}`); + if (!avatarURL) { + return msg.say('The User Provided has No Avatar.'); } + const Image = Canvas.Image; + const canvas = new Canvas(600, 775); + const ctx = canvas.getContext('2d'); + const base = new Image(); + const avatar = new Image(); + const generate = () => { + ctx.fillStyle = 'white'; + ctx.fillRect(0, 0, 600, 775); + ctx.rotate(3 * Math.PI / 180); + ctx.drawImage(avatar, 69, 102, 256, 256); + ctx.rotate(-3 * Math.PI / 180); + ctx.drawImage(base, 0, 0); + }; + base.src = await fs.readFileAsync(path.join(__dirname, '..', '..', 'assets', 'images', 'bob-ross.png')); + const { body } = await snekfetch.get(avatarURL); + avatar.src = body; + generate(); + return msg.say({ files: [{ attachment: canvas.toBuffer(), name: 'ross.png' }] }); } }; diff --git a/commands/avataredit/card.js b/commands/avataredit/card.js index dd0b5f8c..4a0c8c4c 100644 --- a/commands/avataredit/card.js +++ b/commands/avataredit/card.js @@ -25,55 +25,57 @@ module.exports = class CardCommand extends Command { { key: 'member', prompt: 'Which user would you like to edit the avatar of?', - type: 'member' + type: 'member', + default: '' } ] }); } async run(msg, args) { - const { member } = args; - const avatarURL = member.user.avatarURL('png', 512); - if (!avatarURL) return msg.say('This user has no avatar.'); + const member = args.member || msg.member; + const avatarURL = member.user.avatarURL('png', 256); + if (!avatarURL) { + return msg.say('The User Provided has No Avatar.'); + } const cardID = Math.floor(Math.random() * (9999 - 1000 + 1)) + 1000; let rarity; - if (cardID < 5000) rarity = 'C'; - else if (cardID < 8000) rarity = 'U'; - else rarity = 'R'; - try { - const Image = Canvas.Image; - Canvas.registerFont(path.join(__dirname, '..', '..', 'assets', 'fonts', 'OpenSans.ttf'), { family: 'Open Sans' }); - const canvas = new Canvas(390, 544); - const ctx = canvas.getContext('2d'); - const base = new Image(); - const avatar = new Image(); - const generate = () => { - ctx.fillStyle = 'white'; - ctx.fillRect(0, 0, 390, 544); - ctx.drawImage(avatar, 11, 11, 370, 370); - ctx.drawImage(base, 0, 0); - ctx.font = '18px Open Sans'; - ctx.fillStyle = 'black'; - ctx.fillText(member.displayName, 30, 62); - ctx.fillText('Discord Join Date:', 148, 400); - ctx.fillText(moment(member.user.createdTimestamp).format('MMMM Do YYYY'), 148, 420); - ctx.fillText('Role:', 148, 457); - ctx.fillText(member.highestRole.name, 148, 477); - ctx.fillText(rarity, 73, 411); - ctx.fillText(cardID, 60, 457); - ctx.fillText(version.split('.')[0], 68, 502); - ctx.font = '14px Open Sans'; - ctx.fillText(member.id, 30, 355); - ctx.fillText(`#${member.user.discriminator}`, 313, 355); - }; - base.src = await fs.readFileAsync(path.join(__dirname, '..', '..', 'assets', 'images', 'card.png')); - const { body } = await snekfetch.get(avatarURL); - avatar.src = body; - generate(); - return msg.say({ files: [{ attachment: canvas.toBuffer(), name: 'card.png' }] }) - .catch(err => msg.say(`${err.name}: ${err.message}`)); - } catch (err) { - return msg.say(`${err.name}: ${err.message}`); + if (cardID < 5000) { + rarity = 'C'; + } else if (cardID < 8000) { + rarity = 'U'; + } else { + rarity = 'R'; } + const Image = Canvas.Image; + Canvas.registerFont(path.join(__dirname, '..', '..', 'assets', 'fonts', 'OpenSans.ttf'), { family: 'Open Sans' }); + const canvas = new Canvas(390, 544); + const ctx = canvas.getContext('2d'); + const base = new Image(); + const avatar = new Image(); + const generate = () => { + ctx.fillStyle = 'white'; + ctx.fillRect(0, 0, 390, 544); + ctx.drawImage(avatar, 11, 11, 370, 370); + ctx.drawImage(base, 0, 0); + ctx.font = '18px Open Sans'; + ctx.fillStyle = 'black'; + ctx.fillText(member.displayName, 30, 62); + ctx.fillText('Discord Join Date:', 148, 400); + ctx.fillText(moment(member.user.createdTimestamp).format('MMMM Do YYYY'), 148, 420); + ctx.fillText('Role:', 148, 457); + ctx.fillText(member.highestRole.name, 148, 477); + ctx.fillText(rarity, 73, 411); + ctx.fillText(cardID, 60, 457); + ctx.fillText(version.split('.')[0], 68, 502); + ctx.font = '14px Open Sans'; + ctx.fillText(member.id, 30, 355); + ctx.fillText(`#${member.user.discriminator}`, 313, 355); + }; + base.src = await fs.readFileAsync(path.join(__dirname, '..', '..', 'assets', 'images', 'card.png')); + const { body } = await snekfetch.get(avatarURL); + avatar.src = body; + generate(); + return msg.say({ files: [{ attachment: canvas.toBuffer(), name: 'card.png' }] }); } }; diff --git a/commands/avataredit/challenger.js b/commands/avataredit/challenger.js index 10147a02..f953e28f 100644 --- a/commands/avataredit/challenger.js +++ b/commands/avataredit/challenger.js @@ -21,36 +21,34 @@ module.exports = class ChallengerCommand extends Command { { key: 'user', prompt: 'Which user would you like to edit the avatar of?', - type: 'user' + type: 'user', + default: '' } ] }); } async run(msg, args) { - const { user } = args; + const user = args.user || msg.author; const avatarURL = user.avatarURL('png', 256); - if (!avatarURL) return msg.say('This user has no avatar.'); - try { - const Image = Canvas.Image; - const canvas = new Canvas(500, 500); - const ctx = canvas.getContext('2d'); - const base = new Image(); - const avatar = new Image(); - const generate = () => { - ctx.fillStyle = '#ff0028'; - ctx.fillRect(0, 0, 500, 500); - ctx.drawImage(avatar, 226, 155, 200, 200); - ctx.drawImage(base, 0, 0); - }; - base.src = await fs.readFileAsync(path.join(__dirname, '..', '..', 'assets', 'images', 'challenger.png')); - const { body } = await snekfetch.get(avatarURL); - avatar.src = body; - generate(); - return msg.say({ files: [{ attachment: canvas.toBuffer(), name: 'challenger.png' }] }) - .catch(err => msg.say(`${err.name}: ${err.message}`)); - } catch (err) { - return msg.say(`${err.name}: ${err.message}`); + if (!avatarURL) { + return msg.say('The User Provided has No Avatar.'); } + const Image = Canvas.Image; + const canvas = new Canvas(500, 500); + const ctx = canvas.getContext('2d'); + const base = new Image(); + const avatar = new Image(); + const generate = () => { + ctx.fillStyle = '#ff0028'; + ctx.fillRect(0, 0, 500, 500); + ctx.drawImage(avatar, 226, 155, 200, 200); + ctx.drawImage(base, 0, 0); + }; + base.src = await fs.readFileAsync(path.join(__dirname, '..', '..', 'assets', 'images', 'challenger.png')); + const { body } = await snekfetch.get(avatarURL); + avatar.src = body; + generate(); + return msg.say({ files: [{ attachment: canvas.toBuffer(), name: 'challenger.png' }] }); } }; diff --git a/commands/avataredit/dexter.js b/commands/avataredit/dexter.js index ef82ec30..60fd5537 100644 --- a/commands/avataredit/dexter.js +++ b/commands/avataredit/dexter.js @@ -21,36 +21,34 @@ module.exports = class DexterCommand extends Command { { key: 'user', prompt: 'Which user would you like to edit the avatar of?', - type: 'user' + type: 'user', + default: '' } ] }); } async run(msg, args) { - const { user } = args; + const user = args.user || msg.author; const avatarURL = user.avatarURL('png', 256); - if (!avatarURL) return msg.say('This user has no avatar.'); - try { - const Image = Canvas.Image; - const canvas = new Canvas(744, 554); - const ctx = canvas.getContext('2d'); - const base = new Image(); - const avatar = new Image(); - const generate = () => { - ctx.drawImage(base, 0, 0); - ctx.rotate(-11 * Math.PI / 180); - ctx.drawImage(avatar, 234, 274, 225, 225); - ctx.rotate(11 * Math.PI / 180); - }; - base.src = await fs.readFileAsync(path.join(__dirname, '..', '..', 'assets', 'images', 'dexter.png')); - const { body } = await snekfetch.get(avatarURL); - avatar.src = body; - generate(); - return msg.say({ files: [{ attachment: canvas.toBuffer(), name: 'dexter.png' }] }) - .catch(err => msg.say(`${err.name}: ${err.message}`)); - } catch (err) { - return msg.say(`${err.name}: ${err.message}`); + if (!avatarURL) { + return msg.say('The User Provided has No Avatar.'); } + const Image = Canvas.Image; + const canvas = new Canvas(744, 554); + const ctx = canvas.getContext('2d'); + const base = new Image(); + const avatar = new Image(); + const generate = () => { + ctx.drawImage(base, 0, 0); + ctx.rotate(-11 * Math.PI / 180); + ctx.drawImage(avatar, 234, 274, 225, 225); + ctx.rotate(11 * Math.PI / 180); + }; + base.src = await fs.readFileAsync(path.join(__dirname, '..', '..', 'assets', 'images', 'dexter.png')); + const { body } = await snekfetch.get(avatarURL); + avatar.src = body; + generate(); + return msg.say({ files: [{ attachment: canvas.toBuffer(), name: 'dexter.png' }] }); } }; diff --git a/commands/avataredit/greyscale.js b/commands/avataredit/greyscale.js index 94b9cbdb..53320c02 100644 --- a/commands/avataredit/greyscale.js +++ b/commands/avataredit/greyscale.js @@ -19,40 +19,38 @@ module.exports = class GreyscaleCommand extends Command { { key: 'user', prompt: 'Which user would you like to edit the avatar of?', - type: 'user' + type: 'user', + default: '' } ] }); } async run(msg, args) { - const { user } = args; + const user = args.user || msg.author; const avatarURL = user.avatarURL('png', 256); - if (!avatarURL) return msg.say('This user has no avatar.'); - try { - const Image = Canvas.Image; - const canvas = new Canvas(256, 256); - const ctx = canvas.getContext('2d'); - const avatar = new Image(); - const generate = () => { - ctx.drawImage(avatar, 0, 0, 256, 256); - const imgData = ctx.getImageData(0, 0, 256, 256); - const { data } = imgData; - for (let i = 0; i < data.length; i += 4) { - const brightness = 0.34 * data[i] + 0.5 * data[i + 1] + 0.16 * data[i + 2]; - data[i] = brightness; - data[i + 1] = brightness; - data[i + 2] = brightness; - } - ctx.putImageData(imgData, 0, 0); - }; - const avatarImg = await snekfetch.get(avatarURL); - avatar.src = avatarImg.body; - generate(); - return msg.say({ files: [{ attachment: canvas.toBuffer(), name: 'greyscale.png' }] }) - .catch(err => msg.say(`${err.name}: ${err.message}`)); - } catch (err) { - return msg.say(`${err.name}: ${err.message}`); + if (!avatarURL) { + return msg.say('The User Provided has No Avatar.'); } + const Image = Canvas.Image; + const canvas = new Canvas(256, 256); + const ctx = canvas.getContext('2d'); + const avatar = new Image(); + const generate = () => { + ctx.drawImage(avatar, 0, 0, 256, 256); + const imgData = ctx.getImageData(0, 0, 256, 256); + const { data } = imgData; + for (let i = 0; i < data.length; i += 4) { + const brightness = 0.34 * data[i] + 0.5 * data[i + 1] + 0.16 * data[i + 2]; + data[i] = brightness; + data[i + 1] = brightness; + data[i + 2] = brightness; + } + ctx.putImageData(imgData, 0, 0); + }; + const { body } = await snekfetch.get(avatarURL); + avatar.src = body; + generate(); + return msg.say({ files: [{ attachment: canvas.toBuffer(), name: 'greyscale.png' }] }); } }; diff --git a/commands/avataredit/invert.js b/commands/avataredit/invert.js index e4ac8218..86d2d9be 100644 --- a/commands/avataredit/invert.js +++ b/commands/avataredit/invert.js @@ -18,39 +18,37 @@ module.exports = class InvertCommand extends Command { { key: 'user', prompt: 'Which user would you like to edit the avatar of?', - type: 'user' + type: 'user', + default: '' } ] }); } async run(msg, args) { - const { user } = args; + const user = args.user || msg.author; const avatarURL = user.avatarURL('png', 256); - if (!avatarURL) return msg.say('This user has no avatar.'); - try { - const Image = Canvas.Image; - const canvas = new Canvas(256, 256); - const ctx = canvas.getContext('2d'); - const avatar = new Image(); - const generate = () => { - ctx.drawImage(avatar, 0, 0, 256, 256); - const imgData = ctx.getImageData(0, 0, 256, 256); - const { data } = imgData; - for (let i = 0; i < data.length; i += 4) { - data[i] = 255 - data[i]; - data[i + 1] = 255 - data[i + 1]; - data[i + 2] = 255 - data[i + 2]; - } - ctx.putImageData(imgData, 0, 0); - }; - const { body } = await snekfetch.get(avatarURL); - avatar.src = body; - generate(); - return msg.say({ files: [{ attachment: canvas.toBuffer(), name: 'invert.png' }] }) - .catch(err => msg.say(`${err.name}: ${err.message}`)); - } catch (err) { - return msg.say(`${err.name}: ${err.message}`); + if (!avatarURL) { + return msg.say('The User Provided has No Avatar.'); } + const Image = Canvas.Image; + const canvas = new Canvas(256, 256); + const ctx = canvas.getContext('2d'); + const avatar = new Image(); + const generate = () => { + ctx.drawImage(avatar, 0, 0, 256, 256); + const imgData = ctx.getImageData(0, 0, 256, 256); + const { data } = imgData; + for (let i = 0; i < data.length; i += 4) { + data[i] = 255 - data[i]; + data[i + 1] = 255 - data[i + 1]; + data[i + 2] = 255 - data[i + 2]; + } + ctx.putImageData(imgData, 0, 0); + }; + const { body } = await snekfetch.get(avatarURL); + avatar.src = body; + generate(); + return msg.say({ files: [{ attachment: canvas.toBuffer(), name: 'invert.png' }] }); } }; diff --git a/commands/avataredit/rip.js b/commands/avataredit/rip.js index 7790142a..47fd2d9d 100644 --- a/commands/avataredit/rip.js +++ b/commands/avataredit/rip.js @@ -22,43 +22,41 @@ module.exports = class RIPCommand extends Command { { key: 'user', prompt: 'Which user would you like to edit the avatar of?', - type: 'user' + type: 'user', + default: '' } ] }); } async run(msg, args) { - const { user } = args; + const user = args.user || msg.author; const avatarURL = user.avatarURL('png', 256); - if (!avatarURL) return msg.say('This User has no Avatar.'); - try { - const Image = Canvas.Image; - const canvas = new Canvas(507, 338); - const ctx = canvas.getContext('2d'); - const base = new Image(); - const avatar = new Image(); - const generate = () => { - ctx.drawImage(base, 0, 0); - ctx.drawImage(avatar, 158, 51, 200, 200); - const imgData = ctx.getImageData(158, 51, 200, 200); - const { data } = imgData; - for (let i = 0; i < data.length; i += 4) { - const brightness = 0.34 * data[i] + 0.5 * data[i + 1] + 0.16 * data[i + 2]; - data[i] = brightness; - data[i + 1] = brightness; - data[i + 2] = brightness; - } - ctx.putImageData(imgData, 158, 51); - }; - base.src = await fs.readFileAsync(path.join(__dirname, '..', '..', 'assets', 'images', 'rip.png')); - const { body } = await snekfetch.get(avatarURL); - avatar.src = body; - generate(); - return msg.say({ files: [{ attachment: canvas.toBuffer(), name: 'rip.png' }] }) - .catch(err => msg.say(`${err.name}: ${err.message}`)); - } catch (err) { - return msg.say(`${err.name}: ${err.message}`); + if (!avatarURL) { + return msg.say('The User Provided has No Avatar.'); } + const Image = Canvas.Image; + const canvas = new Canvas(507, 338); + const ctx = canvas.getContext('2d'); + const base = new Image(); + const avatar = new Image(); + const generate = () => { + ctx.drawImage(base, 0, 0); + ctx.drawImage(avatar, 158, 51, 200, 200); + const imgData = ctx.getImageData(158, 51, 200, 200); + const { data } = imgData; + for (let i = 0; i < data.length; i += 4) { + const brightness = 0.34 * data[i] + 0.5 * data[i + 1] + 0.16 * data[i + 2]; + data[i] = brightness; + data[i + 1] = brightness; + data[i + 2] = brightness; + } + ctx.putImageData(imgData, 158, 51); + }; + base.src = await fs.readFileAsync(path.join(__dirname, '..', '..', 'assets', 'images', 'rip.png')); + const { body } = await snekfetch.get(avatarURL); + avatar.src = body; + generate(); + return msg.say({ files: [{ attachment: canvas.toBuffer(), name: 'rip.png' }] }); } }; diff --git a/commands/avataredit/simba.js b/commands/avataredit/simba.js index 1f5335dc..d1520c6b 100644 --- a/commands/avataredit/simba.js +++ b/commands/avataredit/simba.js @@ -21,36 +21,34 @@ module.exports = class SimbaCommand extends Command { { key: 'user', prompt: 'Which user would you like to edit the avatar of?', - type: 'user' + type: 'user', + default: '' } ] }); } async run(msg, args) { - const { user } = args; + const user = args.user || msg.author; const avatarURL = user.avatarURL('png', 256); - if (!avatarURL) return msg.say('This user has no avatar.'); - try { - const Image = Canvas.Image; - const canvas = new Canvas(500, 281); - const ctx = canvas.getContext('2d'); - const base = new Image(); - const avatar = new Image(); - const generate = () => { - ctx.drawImage(base, 0, 0); - ctx.rotate(-24 * Math.PI / 180); - ctx.drawImage(avatar, 75, 160, 130, 150); - ctx.rotate(24 * Math.PI / 180); - }; - base.src = await fs.readFileAsync(path.join(__dirname, '..', '..', 'assets', 'images', 'simba.png')); - const { body } = await snekfetch.get(avatarURL); - avatar.src = body; - generate(); - return msg.say({ files: [{ attachment: canvas.toBuffer(), name: 'simba.png' }] }) - .catch(err => msg.say(`${err.name}: ${err.message}`)); - } catch (err) { - return msg.say(`${err.name}: ${err.message}`); + if (!avatarURL) { + return msg.say('The User Provided has No Avatar.'); } + const Image = Canvas.Image; + const canvas = new Canvas(500, 281); + const ctx = canvas.getContext('2d'); + const base = new Image(); + const avatar = new Image(); + const generate = () => { + ctx.drawImage(base, 0, 0); + ctx.rotate(-24 * Math.PI / 180); + ctx.drawImage(avatar, 75, 160, 130, 150); + ctx.rotate(24 * Math.PI / 180); + }; + base.src = await fs.readFileAsync(path.join(__dirname, '..', '..', 'assets', 'images', 'simba.png')); + const { body } = await snekfetch.get(avatarURL); + avatar.src = body; + generate(); + return msg.say({ files: [{ attachment: canvas.toBuffer(), name: 'simba.png' }] }); } }; diff --git a/commands/avataredit/steam-card.js b/commands/avataredit/steam-card.js index 0740155d..6da5be6b 100644 --- a/commands/avataredit/steam-card.js +++ b/commands/avataredit/steam-card.js @@ -21,39 +21,37 @@ module.exports = class SteamCardCommand extends Command { { key: 'user', prompt: 'Which user would you like to edit the avatar of?', - type: 'user' + type: 'user', + default: '' } ] }); } async run(msg, args) { - const { user } = args; + const user = args.user || msg.author; const avatarURL = user.avatarURL('png', 512); - if (!avatarURL) return msg.say('This user has no avatar.'); - try { - const Image = Canvas.Image; - Canvas.registerFont(path.join(__dirname, '..', '..', 'assets', 'fonts', 'OpenSans.ttf'), { family: 'Open Sans' }); - const canvas = new Canvas(494, 568); - const ctx = canvas.getContext('2d'); - const base = new Image(); - const avatar = new Image(); - const generate = () => { - ctx.fillStyle = 'white'; - ctx.fillRect(0, 0, 494, 568); - ctx.drawImage(avatar, 25, 25, 450, 450); - ctx.drawImage(base, 0, 0); - ctx.font = '30px Open Sans'; - ctx.fillText(user.username, 35, 48); - }; - base.src = await fs.readFileAsync(path.join(__dirname, '..', '..', 'assets', 'images', 'steam-card.png')); - const { body } = await snekfetch.get(avatarURL); - avatar.src = body; - generate(); - return msg.say({ files: [{ attachment: canvas.toBuffer(), name: 'steam.png' }] }) - .catch(err => msg.say(`${err.name}: ${err.message}`)); - } catch (err) { - return msg.say(`${err.name}: ${err.message}`); + if (!avatarURL) { + return msg.say('The User Provided has No Avatar.'); } + const Image = Canvas.Image; + Canvas.registerFont(path.join(__dirname, '..', '..', 'assets', 'fonts', 'OpenSans.ttf'), { family: 'Open Sans' }); + const canvas = new Canvas(494, 568); + const ctx = canvas.getContext('2d'); + const base = new Image(); + const avatar = new Image(); + const generate = () => { + ctx.fillStyle = 'white'; + ctx.fillRect(0, 0, 494, 568); + ctx.drawImage(avatar, 25, 25, 450, 450); + ctx.drawImage(base, 0, 0); + ctx.font = '30px Open Sans'; + ctx.fillText(user.username, 35, 48); + }; + base.src = await fs.readFileAsync(path.join(__dirname, '..', '..', 'assets', 'images', 'steam-card.png')); + const { body } = await snekfetch.get(avatarURL); + avatar.src = body; + generate(); + return msg.say({ files: [{ attachment: canvas.toBuffer(), name: 'steam.png' }] }); } }; diff --git a/commands/avataredit/triggered.js b/commands/avataredit/triggered.js index b5459556..5a478bbb 100644 --- a/commands/avataredit/triggered.js +++ b/commands/avataredit/triggered.js @@ -21,42 +21,40 @@ module.exports = class TriggeredCommand extends Command { { key: 'user', prompt: 'Which user would you like to edit the avatar of?', - type: 'user' + type: 'user', + default: '' } ] }); } async run(msg, args) { - const { user } = args; + const user = args.user || msg.author; const avatarURL = user.avatarURL('png', 512); - if (!avatarURL) return msg.say('This user has no avatar.'); - try { - const Image = Canvas.Image; - const canvas = new Canvas(320, 371); - const ctx = canvas.getContext('2d'); - const base = new Image(); - const avatar = new Image(); - const generate = () => { - ctx.fillStyle = 'white'; - ctx.fillRect(0, 0, 320, 371); - ctx.drawImage(avatar, 0, 0, 320, 320); - const imgData = ctx.getImageData(0, 0, 320, 320); - const { data } = imgData; - for (let i = 0; i < data.length; i += 4) { - data[i] = Math.max(255, data[i]); - } - ctx.putImageData(imgData, 0, 0); - ctx.drawImage(base, 0, 0); - }; - base.src = await fs.readFileAsync(path.join(__dirname, '..', '..', 'assets', 'images', 'triggered.png')); - const { body } = await snekfetch.get(avatarURL); - avatar.src = body; - generate(); - return msg.say({ files: [{ attachment: canvas.toBuffer(), name: 'triggered.png' }] }) - .catch(err => msg.say(`${err.name}: ${err.message}`)); - } catch (err) { - return msg.say(`${err.name}: ${err.message}`); + if (!avatarURL) { + return msg.say('The User Provided has No Avatar.'); } + const Image = Canvas.Image; + const canvas = new Canvas(320, 371); + const ctx = canvas.getContext('2d'); + const base = new Image(); + const avatar = new Image(); + const generate = () => { + ctx.fillStyle = 'white'; + ctx.fillRect(0, 0, 320, 371); + ctx.drawImage(avatar, 0, 0, 320, 320); + const imgData = ctx.getImageData(0, 0, 320, 320); + const { data } = imgData; + for (let i = 0; i < data.length; i += 4) { + data[i] = Math.max(255, data[i]); + } + ctx.putImageData(imgData, 0, 0); + ctx.drawImage(base, 0, 0); + }; + base.src = await fs.readFileAsync(path.join(__dirname, '..', '..', 'assets', 'images', 'triggered.png')); + const { body } = await snekfetch.get(avatarURL); + avatar.src = body; + generate(); + return msg.say({ files: [{ attachment: canvas.toBuffer(), name: 'triggered.png' }] }); } }; diff --git a/commands/avataredit/wanted.js b/commands/avataredit/wanted.js index f9195064..6113ab4a 100644 --- a/commands/avataredit/wanted.js +++ b/commands/avataredit/wanted.js @@ -21,34 +21,32 @@ module.exports = class WantedCommand extends Command { { key: 'user', prompt: 'Which user would you like to edit the avatar of?', - type: 'user' + type: 'user', + default: '' } ] }); } async run(msg, args) { - const { user } = args; + const user = args.user || msg.author; const avatarURL = user.avatarURL('png', 512); - if (!avatarURL) return msg.say('This user has no avatar.'); - try { - const Image = Canvas.Image; - const canvas = new Canvas(741, 1000); - const ctx = canvas.getContext('2d'); - const base = new Image(); - const avatar = new Image(); - const generate = () => { - ctx.drawImage(base, 0, 0); - ctx.drawImage(avatar, 150, 360, 430, 430); - }; - base.src = await fs.readFileAsync(path.join(__dirname, '..', '..', 'assets', 'images', 'wanted.png')); - const { body } = await snekfetch.get(avatarURL); - avatar.src = body; - generate(); - return msg.say({ files: [{ attachment: canvas.toBuffer(), name: 'wanted.png' }] }) - .catch(err => msg.say(`${err.name}: ${err.message}`)); - } catch (err) { - return msg.say(`${err.name}: ${err.message}`); + if (!avatarURL) { + return msg.say('The User Provided has No Avatar.'); } + const Image = Canvas.Image; + const canvas = new Canvas(741, 1000); + const ctx = canvas.getContext('2d'); + const base = new Image(); + const avatar = new Image(); + const generate = () => { + ctx.drawImage(base, 0, 0); + ctx.drawImage(avatar, 150, 360, 430, 430); + }; + base.src = await fs.readFileAsync(path.join(__dirname, '..', '..', 'assets', 'images', 'wanted.png')); + const { body } = await snekfetch.get(avatarURL); + avatar.src = body; + generate(); + return msg.say({ files: [{ attachment: canvas.toBuffer(), name: 'wanted.png' }] }); } }; diff --git a/commands/games/battle.js b/commands/games/battle.js index c459ab69..e8d0179f 100644 --- a/commands/games/battle.js +++ b/commands/games/battle.js @@ -24,13 +24,19 @@ module.exports = class BattleCommand extends Command { async run(msg, args) { const { opponent } = args; - if (opponent.bot) return msg.say('You cannot fight bots!'); - if (opponent.id === msg.author.id) return msg.say('You cannot fight yourself!'); - if (this.fighting.has(msg.guild.id)) return msg.say('There is already a fight in this server...'); + if (opponent.bot) { + return msg.say('Bots cannot be fought.'); + } + if (opponent.id === msg.author.id) { + return msg.say('You may not fight yourself.'); + } + if (this.fighting.has(msg.guild.id)) { + return msg.say('Only one fight may be occurring per server.'); + } this.fighting.add(msg.guild.id); await msg.say(`**${opponent.username}**, do you accept this challenge? **__Y__es** or **No**?`); try { - const verify = await msg.channel.awaitMessages(res => res.author.id === opponent.id, { + const verify = await msg.channel.awaitMessages((res) => res.author.id === opponent.id, { max: 1, time: 15000, errors: ['time'] @@ -50,14 +56,14 @@ module.exports = class BattleCommand extends Command { **${opponent.username}**: ${oppoHP}HP `); try { - const turn = await msg.channel.awaitMessages(res => res.author.id === (userTurn ? msg.author.id : opponent.id), { + const turn = await msg.channel.awaitMessages((res) => res.author.id === (userTurn ? msg.author.id : opponent.id), { max: 1, time: 15000, errors: ['time'] }); const choice = turn.first().content.toLowerCase(); if (choice === 'fight') { - const damage = Math.floor(Math.random() * (guard ? 25 : 100)) + 1; + const damage = Math.floor(Math.random() * (guard ? 10 : 100)) + 1; await msg.say(`**${username}** deals **${damage}** damage!`); if (userTurn) { oppoHP = oppoHP - damage; @@ -66,12 +72,17 @@ module.exports = class BattleCommand extends Command { userHP = userHP - damage; userTurn = true; } - if (guard) guard = false; + if (guard) { + guard = false; + } } else if (choice === 'guard') { await msg.say(`**${username}** guards!`); guard = true; - if (userTurn) userTurn = false; - else userTurn = true; + if (userTurn) { + userTurn = false; + } else { + userTurn = true; + } } else if (choice === 'special') { const hit = Math.floor(Math.random() * 4) + 1; if (hit === 1) { @@ -84,12 +95,19 @@ module.exports = class BattleCommand extends Command { userHP = userHP - damage; userTurn = true; } - if (guard) guard = false; + if (guard) { + guard = false; + } } else { await msg.say(`**${username}**'s attack missed!`); - if (guard) guard = false; - if (userTurn) userTurn = false; - else userTurn = true; + if (userTurn) { + userTurn = false; + } else { + userTurn = true; + } + if (guard) { + guard = false; + } } } else if (choice === 'cure') { if (userTurn ? userCure : oppoCure) { @@ -103,13 +121,22 @@ module.exports = class BattleCommand extends Command { oppoCure = false; userTurn = true; } - if (guard) guard = false; - } else await msg.say('You have already cured!'); + if (guard) { + guard = false; + } + } else { + await msg.say('You have already cured!'); + } } else if (choice === 'run') { await msg.say(`**${username}** flees!`); - if (userTurn) userHP = 0; - else oppoHP = 0; - } else await msg.say('I do not understand what you want to do.'); + if (userTurn) { + userHP = 0; + } else { + oppoHP = 0; + } + } else { + await msg.say('I do not understand what you want to do.'); + } } catch (err) { await msg.say('Time!'); break; @@ -118,8 +145,8 @@ module.exports = class BattleCommand extends Command { this.fighting.delete(msg.guild.id); return msg.say(stripIndents` The match is over! - **Winner: ${(userHP > oppoHP) ? `${msg.author.username}** (${userHP}HP)` : `${opponent.username}** (${oppoHP}HP)`} - **Loser: ${(userHP > oppoHP) ? `${opponent.username}** (${oppoHP}HP)` : `${msg.author.username}** (${userHP}HP)`} + **Winner: ${userHP > oppoHP ? `${msg.author.username}** (${userHP}HP)` : `${opponent.username}** (${oppoHP}HP)`} + **Loser: ${userHP > oppoHP ? `${opponent.username}** (${oppoHP}HP)` : `${msg.author.username}** (${userHP}HP)`} `); } else { this.fighting.delete(msg.guild.id); diff --git a/commands/games/lottery.js b/commands/games/lottery.js index bb55d2c4..2786287a 100644 --- a/commands/games/lottery.js +++ b/commands/games/lottery.js @@ -12,7 +12,10 @@ module.exports = class LotteryCommand extends Command { run(msg) { const lottery = Math.floor(Math.random() * 100) + 1; - if (lottery < 99) return msg.say(`Nope, sorry ${msg.author.username}, you lost.`); - return msg.say(`Wow ${msg.author.username}! You actually won! Great job!`); + if (lottery === 1) { + return msg.say(`Wow ${msg.author.username}! You actually won! Great job!`); + } else { + return msg.say(`Nope, sorry ${msg.author.username}, you lost.`); + } } }; diff --git a/commands/games/math-game.js b/commands/games/math-game.js index 944ad912..b1683afe 100644 --- a/commands/games/math-game.js +++ b/commands/games/math-game.js @@ -1,7 +1,7 @@ const Command = require('../../structures/Command'); const { RichEmbed } = require('discord.js'); const math = require('mathjs'); -const operations = ['+', '-', '*']; +const { operations, difficulties, maxValues } = require('../../assets/json/math-game'); module.exports = class MathGameCommand extends Command { constructor(client) { @@ -14,13 +14,16 @@ module.exports = class MathGameCommand extends Command { args: [ { key: 'difficulty', - prompt: 'What should the difficulty of the game be? `Easy`, `Medium`, `Hard`, `Extreme`, or `Impossible`?', + prompt: `What should the difficulty of the game be? One of: ${difficulties.join(', ')}`, type: 'string', - validate: difficulty => { - if (['easy', 'medium', 'hard', 'extreme', 'impossible'].includes(difficulty.toLowerCase())) return true; - return 'The difficulty must be either `easy`, `medium`, `hard`, `extreme`, or `impossible`.'; + validate: (difficulty) => { + if (difficulties.includes(difficulty.toLowerCase())) { + return true; + } else { + return `The difficulty must be one of: ${difficulties.join(', ')}`; + } }, - parse: difficulty => difficulty.toLowerCase() + parse: (difficulty) => difficulty.toLowerCase() } ] }); @@ -29,38 +32,24 @@ module.exports = class MathGameCommand extends Command { async run(msg, args) { const { difficulty } = args; const operation = operations[Math.floor(Math.random() * operations.length)]; - let value; - switch(difficulty) { - case 'easy': - value = 10; - break; - case 'medium': - value = 50; - break; - case 'hard': - value = 100; - break; - case 'extreme': - value = 1000; - break; - case 'impossible': - value = 10000; - break; - } + const value = maxValues[difficulty]; const expression = `${Math.floor(Math.random() * value) + 1} ${operation} ${Math.floor(Math.random() * value) + 1}`; const answer = math.eval(expression).toString(); const embed = new RichEmbed() - .setTitle('You have **10** seconds to answer:') + .setTitle('You have 10 seconds to answer:') .setDescription(expression); await msg.embed(embed); try { - const collected = await msg.channel.awaitMessages(res => res.author.id === msg.author.id, { + const collected = await msg.channel.awaitMessages((res) => res.author.id === msg.author.id, { max: 1, time: 10000, errors: ['time'] }); - if (collected.first().content !== answer) return msg.say(`Nope, sorry, it's ${answer}.`); - return msg.say('Nice job! 10/10! You deserve some cake!'); + if (collected.first().content !== answer) { + return msg.say(`Nope, sorry, it's ${answer}.`); + } else { + return msg.say('Nice job! 10/10! You deserve some cake!'); + } } catch (err) { return msg.say(`Time! It was ${answer}, sorry!`); } diff --git a/commands/games/quiz.js b/commands/games/quiz.js index baad1f4e..9dcd9986 100644 --- a/commands/games/quiz.js +++ b/commands/games/quiz.js @@ -16,35 +16,34 @@ module.exports = class QuizCommand extends Command { } async run(msg) { + const { body } = await snekfetch + .get('https://opentdb.com/api.php') + .query({ + amount: 1, + type: 'boolean', + encode: 'url3986' + }); + const answer = body.results[0].correct_answer.toLowerCase(); + const embed = new RichEmbed() + .setTitle('You have 15 seconds to answer this question:') + .setDescription(stripIndents` + **${decodeURIComponent(body.results[0].category)}** + True or False: ${decodeURIComponent(body.results[0].question)} + `); + await msg.embed(embed); try { - const { body } = await snekfetch - .get('https://opentdb.com/api.php') - .query({ - amount: 1, - type: 'boolean', - encode: 'url3986' - }); - const answer = body.results[0].correct_answer.toLowerCase(); - const embed = new RichEmbed() - .setTitle('You have **15** seconds to answer this question:') - .setDescription(stripIndents` - **${decodeURIComponent(body.results[0].category)}** - True or False: ${decodeURIComponent(body.results[0].question)} - `); - await msg.embed(embed); - try { - const collected = await msg.channel.awaitMessages(res => res.author.id === msg.author.id, { - max: 1, - time: 15000, - errors: ['time'] - }); - if (collected.first().content.toLowerCase() !== answer) return msg.say(`Nope, sorry, it's ${answer}.`); + const collected = await msg.channel.awaitMessages((res) => res.author.id === msg.author.id, { + max: 1, + time: 15000, + errors: ['time'] + }); + if (collected.first().content.toLowerCase() !== answer) { + return msg.say(`Nope, sorry, it's ${answer}.`); + } else { return msg.say('Nice job! 10/10! You deserve some cake!'); - } catch (err) { - return msg.say(`Time! It was ${answer}, sorry!`); } } catch (err) { - return msg.say(`${err.name}: ${err.message}`); + return msg.say(`Time! It was ${answer}, sorry!`); } } }; diff --git a/commands/games/rock-paper-scissors.js b/commands/games/rock-paper-scissors.js index e5f7dd39..93ac185d 100644 --- a/commands/games/rock-paper-scissors.js +++ b/commands/games/rock-paper-scissors.js @@ -1,5 +1,5 @@ const Command = require('../../structures/Command'); -const responses = ['Paper', 'Rock', 'Scissors']; +const choices = ['paper', 'rock', 'scissors']; module.exports = class RockPaperScissorsCommand extends Command { constructor(client) { @@ -14,11 +14,14 @@ module.exports = class RockPaperScissorsCommand extends Command { key: 'choice', prompt: '`Rock`, `Paper`, or `Scissors`?', type: 'string', - validate: choice => { - if (['rock', 'paper', 'scissors'].includes(choice.toLowerCase())) return true; - return 'Please enter either `rock`, `paper`, or `scissors`.'; + validate: (choice) => { + if (choices.includes(choice.toLowerCase())) { + return true; + } else { + return 'Please enter either `rock`, `paper`, or `scissors`.'; + } }, - parse: choice => choice.toLowerCase() + parse: (choice) => choice.toLowerCase() } ] }); @@ -26,19 +29,31 @@ module.exports = class RockPaperScissorsCommand extends Command { run(msg, args) { const { choice } = args; - const response = responses[Math.floor(Math.random() * responses.length)]; + const response = choices[Math.floor(Math.random() * choices.length)]; if (choice === 'rock') { - if (response === 'Rock') return msg.say('Rock! Aw, it\'s a tie!'); - if (response === 'Paper') return msg.say('Paper! Yes! I win!'); - if (response === 'Scissors') return msg.say('Scissors! Aw... I lose...'); + if (response === 'rock') { + return msg.say('Rock! Aw... A tie...'); + } else if (response === 'paper') { + return msg.say('Paper! Yes! I win!'); + } else if (response === 'scissors') { + return msg.say('Scissors! Aw... I lose...'); + } } else if (choice === 'paper') { - if (response === 'Rock') return msg.say('Rock! Aw... I lose...'); - if (response === 'Paper') return msg.say('Paper! Aw, it\'s a tie!'); - if (response === 'Scissors') return msg.say('Scissors! Yes! I win!'); + if (response === 'rock') { + return msg.say('Rock! Aw... I lose...'); + } else if (response === 'paper') { + return msg.say('Paper! Aw... A tie...'); + } else if (response === 'scissors') { + return msg.say('Scissors! Yes! I win!'); + } } else if (choice === 'scissors') { - if (response === 'Rock') return msg.say('Rock! Yes! I win!'); - if (response === 'Paper') return msg.say('Paper! Aw... I lose...'); - if (response === 'Scissors') return msg.say('Scissors! Aw, it\'s a tie!'); + if (response === 'rock') { + return msg.say('Rock! Yes! I win!'); + } else if (response === 'paper') { + return msg.say('Paper! Aw... I lose...'); + } else if (response === 'scissors') { + return msg.say('Scissors! Aw... A tie...'); + } } } }; diff --git a/commands/games/slots.js b/commands/games/slots.js index 33fbaf9b..6dc73c94 100644 --- a/commands/games/slots.js +++ b/commands/games/slots.js @@ -1,6 +1,6 @@ const Command = require('../../structures/Command'); const { stripIndents } = require('common-tags'); -const slotThing = [':grapes:', ':tangerine:', ':pear:', ':cherries:']; +const slots = [':grapes:', ':tangerine:', ':pear:', ':cherries:']; module.exports = class SlotsCommand extends Command { constructor(client) { @@ -13,17 +13,19 @@ module.exports = class SlotsCommand extends Command { } run(msg) { - const slotOne = slotThing[Math.floor(Math.random() * slotThing.length)]; - const slotTwo = slotThing[Math.floor(Math.random() * slotThing.length)]; - const slotThree = slotThing[Math.floor(Math.random() * slotThing.length)]; - if (slotOne === slotTwo && slotOne === slotThree) + const slotOne = slots[Math.floor(Math.random() * slots.length)]; + const slotTwo = slots[Math.floor(Math.random() * slots.length)]; + const slotThree = slots[Math.floor(Math.random() * slots.length)]; + if (slotOne === slotTwo && slotOne === slotThree) { return msg.say(stripIndents` ${slotOne}|${slotTwo}|${slotThree} Wow! You won! Great job... er... luck! `); - return msg.say(stripIndents` - ${slotOne}|${slotTwo}|${slotThree} - Aww... You lost... Guess it's just bad luck, huh? - `); + } else { + return msg.say(stripIndents` + ${slotOne}|${slotTwo}|${slotThree} + Aww... You lost... Guess it's just bad luck, huh? + `); + } } }; diff --git a/commands/games/typing-game.js b/commands/games/typing-game.js index db2d41bf..26bdda75 100644 --- a/commands/games/typing-game.js +++ b/commands/games/typing-game.js @@ -1,6 +1,6 @@ const Command = require('../../structures/Command'); const { RichEmbed } = require('discord.js'); -const sentences = require('../../assets/json/typing-game'); +const { sentences, difficulties, times } = require('../../assets/json/typing-game'); module.exports = class TypingGameCommand extends Command { constructor(client) { @@ -13,13 +13,16 @@ module.exports = class TypingGameCommand extends Command { args: [ { key: 'difficulty', - prompt: 'What should the difficulty of the game be? `Easy`, `Medium`, `Hard`, `Extreme`, or `Impossible`?', + prompt: `What should the difficulty of the game be? One of: ${difficulties.join(', ')}`, type: 'string', - validate: difficulty => { - if (['easy', 'medium', 'hard', 'extreme', 'impossible'].includes(difficulty.toLowerCase())) return true; - return 'The difficulty must be either `easy`, `medium`, `hard`, `extreme`, or `impossible`.'; + validate: (difficulty) => { + if (difficulties.includes(difficulty.toLowerCase())) { + return true; + } else { + return `The difficulty must be one of: ${difficulties.join(', ')}`; + } }, - parse: difficulty => difficulty.toLowerCase() + parse: (difficulty) => difficulty.toLowerCase() } ] }); @@ -28,36 +31,22 @@ module.exports = class TypingGameCommand extends Command { async run(msg, args) { const { difficulty } = args; const sentence = sentences[Math.floor(Math.random() * sentences.length)]; - let time; - switch(difficulty) { - case 'easy': - time = 25000; - break; - case 'medium': - time = 20000; - break; - case 'hard': - time = 15000; - break; - case 'extreme': - time = 10000; - break; - case 'impossible': - time = 5000; - break; - } + const time = times[difficulty]; const embed = new RichEmbed() - .setTitle(`You have **${time / 1000}** seconds to type:`) + .setTitle(`You have ${time / 1000} seconds to type:`) .setDescription(sentence); await msg.embed(embed); try { - const collected = await msg.channel.awaitMessages(res => res.author.id === msg.author.id, { + const collected = await msg.channel.awaitMessages((res) => res.author.id === msg.author.id, { max: 1, time: time, errors: ['time'] }); - if (collected.first().content !== sentence) return msg.say('Nope, sorry!'); - return msg.say(`Good Job! You won!`); + if (collected.first().content !== sentence) { + return msg.say('Nope, sorry!'); + } else { + return msg.say('Nice job! 10/10! You deserve some cake!'); + } } catch (err) { return msg.say('Time! Sorry!'); } diff --git a/commands/guildinfo/emoji.js b/commands/guildinfo/emoji.js index fa6e945d..abb7cac3 100644 --- a/commands/guildinfo/emoji.js +++ b/commands/guildinfo/emoji.js @@ -12,7 +12,10 @@ module.exports = class EmojiCommand extends Command { } run(msg) { - return msg.say(msg.guild.emojis.map(e => e).join('')) - .catch(() => msg.say('There was an error sending the emoji.')); + const emoji = msg.guild.emojis; + if (!emoji.size) { + return msg.say('You have no Custom Emoji.'); + } + return msg.say(emoji.map((e) => e).join('')); } }; diff --git a/commands/guildinfo/server-info.js b/commands/guildinfo/server-info.js index 485ad877..a3f9ae4e 100644 --- a/commands/guildinfo/server-info.js +++ b/commands/guildinfo/server-info.js @@ -1,8 +1,7 @@ const Command = require('../../structures/Command'); const { RichEmbed } = require('discord.js'); -const { stripIndents } = require('common-tags'); const moment = require('moment'); -require('moment-duration-format'); +const filterLevels = ['Off', 'No Role', 'Everyone']; module.exports = class GuildInfoCommand extends Command { constructor(client) { @@ -21,22 +20,21 @@ module.exports = class GuildInfoCommand extends Command { const embed = new RichEmbed() .setColor(0x00AE86) .setThumbnail(msg.guild.iconURL()) - .addField('Name', + .addField('❯ Name', msg.guild.name, true) - .addField('ID', + .addField('❯ ID', msg.guild.id, true) - .addField('Creation Date', - stripIndents` - ${moment(msg.guild.createdTimestamp).format('MMMM Do YYYY h:mm:ss A')} - ${moment.duration(Date.now() - msg.guild.createdTimestamp).format('y[ years], M[ months], w[ weeks, and ]d[ days]')} ago. - `) - .addField('Default Channel', + .addField('❯ Creation Date', + moment(msg.guild.createdAt).format('MMMM Do YYYY'), true) + .addField('❯ Default Channel', msg.guild.defaultChannel, true) - .addField('Region', + .addField('❯ Region', msg.guild.region, true) - .addField('Owner', + .addField('❯ Explicit Filter', + filterLevels[msg.guild.explicitContentFilter], true) + .addField('❯ Owner', msg.guild.owner, true) - .addField('Members', + .addField('❯ Members', msg.guild.memberCount, true); return msg.embed(embed); } diff --git a/commands/moderation/ban.js b/commands/moderation/ban.js index a4b1b403..4013ffc6 100644 --- a/commands/moderation/ban.js +++ b/commands/moderation/ban.js @@ -13,7 +13,6 @@ module.exports = class BanCommand extends Command { guildOnly: true, clientPermissions: ['BAN_MEMBERS'], userPermissions: ['BAN_MEMBERS'], - allowStaff: true, args: [ { key: 'member', @@ -24,9 +23,12 @@ module.exports = class BanCommand extends Command { key: 'reason', prompt: 'What do you want to set the reason as?', type: 'string', - validate: reason => { - if (reason.length < 140) return true; - return 'Invalid Reason. Reason must be under 140 characters.'; + validate: (reason) => { + if (reason.length < 140) { + return true; + } else { + return 'Invalid Reason. Reason must be under 140 characters.'; + } } } ] @@ -35,37 +37,57 @@ module.exports = class BanCommand extends Command { async run(msg, args) { const modlogs = msg.guild.channels.get(msg.guild.settings.get('modLog')); - if (!modlogs) return msg.say('This Command requires a channel set with the `mod-channel` command.'); - if (!modlogs.permissionsFor(this.client.user).has('SEND_MESSAGES')) - return msg.say('This Command requires the `SEND_MESSAGES` Permission for the Mod Log Channel.'); - if (!modlogs.permissionsFor(this.client.user).has('EMBED_LINKS')) - return msg.say('This Command requires the `EMBED_LINKS` Permission for the Mod Log Channel.'); const { member, reason } = args; - if (!member.bannable) return msg.say('This member is not bannable. Perhaps they have a higher role than me?'); + if (!member.bannable) { + return msg.say('This member is not bannable. Perhaps they have a higher role than me?'); + } try { - try { - await member.user.send(stripIndents` - You were banned from ${msg.guild.name}! - Reason: ${reason}. - `); - } catch (err) { - await msg.say('Failed to Send DM.'); + await msg.say(`Are you sure you want to ban ${member.user.tag} (${member.id})?`); + const collected = await msg.channel.awaitMessages((res) => res.author.id === msg.author.id, { + max: 1, + time: 15000, + errors: ['time'] + }); + if (['y', 'yes'].includes(collected.first().content.toLowerCase())) { + try { + await member.user.send(stripIndents` + You were banned from ${msg.guild.name}! + Reason: ${reason} + `); + } catch (err) { + await msg.say('Failed to Send DM.'); + } + await member.ban({ + days: 7, + reason: `${msg.author.tag}: ${reason}` + }); + await msg.say(`Successfully banned ${member.user.tag}.`); + if (!modlogs || !modlogs.permissionsFor(this.client.user.has('SEND_MESSAGES'))) { + return msg.say('Could not log the ban to the mod logs.'); + } else if (!modlogs.permissionsFor(this.client.user).has('EMBED_LINKS')) { + return modlogs.send(stripIndents` + **Member:** ${member.user.tag} (${member.id}) + **Action:** Ban + **Reason:** ${reason} + **Moderator:** ${msg.author.tag} + `); + } else { + const embed = new RichEmbed() + .setAuthor(msg.author.tag, msg.author.displayAvatarURL) + .setColor(0xFF0000) + .setTimestamp() + .setDescription(stripIndents` + **Member:** ${member.user.tag} (${member.id}) + **Action:** Ban + **Reason:** ${reason} + `); + return modlogs.send({ embed }); + } + } else { + return msg.say('Aborting Ban.'); } - await member.ban({ days: 7, reason }); - msg.say(':ok_hand:'); - const embed = new RichEmbed() - .setAuthor(msg.author.tag, msg.author.displayAvatarURL) - .setColor(0xFF0000) - .setTimestamp() - .setDescription(stripIndents` - **Member:** ${member.user.tag} (${member.id}) - **Action:** Ban - **Reason:** ${reason} - `); - modlogs.send({ embed }); - return null; } catch (err) { - return msg.say(`${err.name}: ${err.message}`); + return msg.say('Aborting Ban.'); } } }; diff --git a/commands/moderation/kick.js b/commands/moderation/kick.js index d131412c..bbbbfd79 100644 --- a/commands/moderation/kick.js +++ b/commands/moderation/kick.js @@ -6,13 +6,13 @@ module.exports = class KickCommand extends Command { constructor(client) { super(client, { name: 'kick', + aliases: ['kickke'], group: 'moderation', memberName: 'kick', description: 'Kicks a user and logs the kick to the mod logs.', guildOnly: true, clientPermissions: ['KICK_MEMBERS'], userPermissions: ['KICK_MEMBERS'], - allowStaff: true, args: [ { key: 'member', @@ -24,8 +24,11 @@ module.exports = class KickCommand extends Command { prompt: 'What do you want to set the reason as?', type: 'string', validate: reason => { - if (reason.length < 140) return true; - return 'Invalid Reason. Reason must be under 140 characters.'; + if (reason.length < 140) { + return true; + } else { + return 'Invalid Reason. Reason must be under 140 characters.'; + } } } ] @@ -34,37 +37,56 @@ module.exports = class KickCommand extends Command { async run(msg, args) { const modlogs = msg.guild.channels.get(msg.guild.settings.get('modLog')); - if (!modlogs) return msg.say('This Command requires a channel set with the `mod-channel` command.'); - if (!modlogs.permissionsFor(this.client.user).has('SEND_MESSAGES')) - return msg.say('This Command requires the `SEND_MESSAGES` Permission for the Mod Log Channel.'); - if (!modlogs.permissionsFor(this.client.user).has('EMBED_LINKS')) - return msg.say('This Command requires the `EMBED_LINKS` Permission for the Mod Log Channel.'); const { member, reason } = args; - if (!member.kickable) return msg.say('This member is not kickable. Perhaps they have a higher role than me?'); + if (!member.kickable) { + return msg.say('This member is not kickable. Perhaps they have a higher role than me?'); + } try { - try { - await member.user.send(stripIndents` - You were kicked from ${msg.guild.name}! - Reason: ${reason}. - `); - } catch (err) { - await msg.say('Failed to Send DM.'); + await msg.say(`Are you sure you want to kick ${member.user.tag} (${member.id})?`); + const collected = await msg.channel.awaitMessages((res) => res.author.id === msg.author.id, { + max: 1, + time: 15000, + errors: ['time'] + }); + if (['y', 'yes'].includes(collected.first().content.toLowerCase())) { + try { + await member.user.send(stripIndents` + You were kicked from ${msg.guild.name}! + Reason: ${reason} + `); + } catch (err) { + await msg.say('Failed to Send DM.'); + } + await member.kick({ + reason: `${msg.author.tag}: ${reason}` + }); + await msg.say(`Successfully kicked ${member.user.tag}.`); + if (!modlogs || !modlogs.permissionsFor(this.client.user.has('SEND_MESSAGES'))) { + return msg.say('Could not log the kick to the mod logs.'); + } else if (!modlogs.permissionsFor(this.client.user).has('EMBED_LINKS')) { + return modlogs.send(stripIndents` + **Member:** ${member.user.tag} (${member.id}) + **Action:** Kick + **Reason:** ${reason} + **Moderator:** ${msg.author.tag} + `); + } else { + const embed = new RichEmbed() + .setAuthor(msg.author.tag, msg.author.displayAvatarURL) + .setColor(0xFFA500) + .setTimestamp() + .setDescription(stripIndents` + **Member:** ${member.user.tag} (${member.id}) + **Action:** Kick + **Reason:** ${reason} + `); + return modlogs.send({ embed }); + } + } else { + return msg.say('Aborting Kick.'); } - await member.kick({ reason }); - msg.say(':ok_hand:'); - const embed = new RichEmbed() - .setAuthor(msg.author.tag, msg.author.displayAvatarURL) - .setColor(0xFFA500) - .setTimestamp() - .setDescription(stripIndents` - **Member:** ${member.user.tag} (${member.id}) - **Action:** Kick - **Reason:** ${reason} - `); - modlogs.send({ embed }); - return null; } catch (err) { - return msg.say(`${err.name}: ${err.message}`); + return msg.say('Aborting Kick.'); } } }; diff --git a/commands/moderation/lockdown.js b/commands/moderation/lockdown.js index ebdb4c18..b635242f 100644 --- a/commands/moderation/lockdown.js +++ b/commands/moderation/lockdown.js @@ -7,22 +7,24 @@ module.exports = class LockdownCommand extends Command { name: 'lockdown', group: 'moderation', memberName: 'lockdown', - description: 'Locks down the current channel or removes a lockdown, which prevents non-administrator members from speaking.', + description: 'Locks down the current channel or removes a lockdown.', guildOnly: true, clientPermissions: ['ADMINISTRATOR'], userPermissions: ['ADMINISTRATOR'], - allowStaff: true, args: [ { key: 'type', prompt: 'Please enter either `start` or `stop`.', type: 'string', - validate: type => { - if (['start', 'stop'].includes(type.toLowerCase())) return true; - return 'Please enter either `start` or `stop`.'; + default: 'start', + validate: (type) => { + if (['start', 'stop'].includes(type.toLowerCase())) { + return true; + } else { + return 'Please enter either `start` or `stop`.'; + } }, - parse: type => type.toLowerCase(), - default: 'start' + parse: (type) => type.toLowerCase() } ] }); @@ -31,25 +33,14 @@ module.exports = class LockdownCommand extends Command { async run(msg, args) { const { type } = args; if (type === 'start') { - try { - await msg.channel.overwritePermissions(msg.guild.defaultRole, { SEND_MESSAGES: false }); - const staffRole = msg.guild.settings.get('staffRole'); - if (staffRole && !msg.channel.permissionOverwrites.has(staffRole)) - await msg.channel.overwritePermissions(msg.guild.roles.get(staffRole), { SEND_MESSAGES: true }); - return msg.say(stripIndents` - Lockdown Started, users without Administrator ${staffRole ? 'or the Staff Role ' : ''}can no longer post messages. - Please use \`lockdown stop\` to end the lockdown. - `); - } catch (err) { - return msg.say(`${err.name}: ${err.message}`); - } + await msg.channel.overwritePermissions(msg.guild.defaultRole, { SEND_MESSAGES: false }); + return msg.say(stripIndents` + Lockdown Started, users without Administrator can no longer post messages. + Please use \`lockdown stop\` to end the lockdown. + `); } else if (type === 'stop') { - try { - await msg.channel.overwritePermissions(msg.guild.defaultRole, { SEND_MESSAGES: null }); - return msg.say('Lockdown Ended.'); - } catch (err) { - return msg.say(`${err.name}: ${err.message}`); - } + await msg.channel.overwritePermissions(msg.guild.defaultRole, { SEND_MESSAGES: null }); + return msg.say('Lockdown Ended.'); } } }; diff --git a/commands/moderation/prune.js b/commands/moderation/prune.js index 5397ecbb..2da4c312 100644 --- a/commands/moderation/prune.js +++ b/commands/moderation/prune.js @@ -6,7 +6,7 @@ module.exports = class PruneCommand extends Command { name: 'prune', group: 'moderation', memberName: 'prune', - description: 'Deletes a specified number of messages from the current channel, up to 99.', + description: 'Deletes messages from the current channel, up to 99.', guildOnly: true, throttling: { usages: 1, @@ -14,21 +14,24 @@ module.exports = class PruneCommand extends Command { }, clientPermissions: ['READ_MESSAGE_HISTORY', 'MANAGE_MESSAGES'], userPermissions: ['MANAGE_MESSAGES'], - allowStaff: true, args: [ { key: 'count', label: 'amount of messages', prompt: 'How many messages do you want to delete? Limit of up to 99.', type: 'integer', - validate: count => { - if (count < 100 && count > 0) return true; - return 'Invalid Count. Count must be from 1-99.'; + validate: (count) => { + if (count < 100 && count > 0) { + return true; + } else { + return 'Invalid Count. Count must be from 1-99.'; + } } } ] }); } + async run(msg, args) { const { count } = args; try { diff --git a/commands/moderation/softban.js b/commands/moderation/softban.js index 5d2bbafa..48c78b6c 100644 --- a/commands/moderation/softban.js +++ b/commands/moderation/softban.js @@ -13,7 +13,6 @@ module.exports = class SoftbanCommand extends Command { guildOnly: true, clientPermissions: ['BAN_MEMBERS'], userPermissions: ['KICK_MEMBERS'], - allowStaff: true, args: [ { key: 'member', @@ -24,9 +23,12 @@ module.exports = class SoftbanCommand extends Command { key: 'reason', prompt: 'What do you want to set the reason as?', type: 'string', - validate: reason => { - if (reason.length < 140) return true; - return 'Invalid Reason. Reason must be under 140 characters.'; + validate: (reason) => { + if (reason.length < 140) { + return true; + } else { + return 'Invalid Reason. Reason must be under 140 characters.'; + } } } ] @@ -35,38 +37,58 @@ module.exports = class SoftbanCommand extends Command { async run(msg, args) { const modlogs = msg.guild.channels.get(msg.guild.settings.get('modLog')); - if (!modlogs) return msg.say('This Command requires a channel set with the `mod-channel` command.'); - if (!modlogs.permissionsFor(this.client.user).has('SEND_MESSAGES')) - return msg.say('This Command requires the `SEND_MESSAGES` Permission for the Mod Log Channel.'); - if (!modlogs.permissionsFor(this.client.user).has('EMBED_LINKS')) - return msg.say('This Command requires the `EMBED_LINKS` Permission for the Mod Log Channel.'); const { member, reason } = args; - if (!member.bannable) return msg.say('This member is not softbannable. Perhaps they have a higher role than me?'); + if (!member.bannable) { + return msg.say('This member is not softbannable. Perhaps they have a higher role than me?'); + } try { - try { - await member.user.send(stripIndents` - You were softbanned from ${msg.guild.name}! - Reason: ${reason}. - `); - } catch (err) { - await msg.say('Failed to Send DM.'); + await msg.say(`Are you sure you want to softban ${member.user.tag} (${member.id})?`); + const collected = await msg.channel.awaitMessages((res) => res.author.id === msg.author.id, { + max: 1, + time: 15000, + errors: ['time'] + }); + if (['y', 'yes'].includes(collected.first().content.toLowerCase())) { + try { + await member.user.send(stripIndents` + You were softbanned from ${msg.guild.name}! + Reason: ${reason} + `); + } catch (err) { + await msg.say('Failed to Send DM.'); + } + await member.ban({ + days: 7, + reason: `${msg.author.tag}: ${reason} (Softban)` + }); + await msg.guild.unban(member.user, 'Softban'); + await msg.say(`Successfully softbanned ${member.user.tag}.`); + if (!modlogs || !modlogs.permissionsFor(this.client.user.has('SEND_MESSAGES'))) { + return msg.say('Could not log the softban to the mod logs.'); + } else if (!modlogs.permissionsFor(this.client.user).has('EMBED_LINKS')) { + return modlogs.send(stripIndents` + **Member:** ${member.user.tag} (${member.id}) + **Action:** Softban + **Reason:** ${reason} + **Moderator:** ${msg.author.tag} + `); + } else { + const embed = new RichEmbed() + .setAuthor(msg.author.tag, msg.author.displayAvatarURL) + .setColor(0xFF4500) + .setTimestamp() + .setDescription(stripIndents` + **Member:** ${member.user.tag} (${member.id}) + **Action:** Softban + **Reason:** ${reason} + `); + return modlogs.send({ embed }); + } + } else { + return msg.say('Aborting Softban.'); } - await member.ban({ days: 7, reason }); - await msg.guild.unban(member.user); - msg.say(':ok_hand:'); - const embed = new RichEmbed() - .setAuthor(msg.author.tag, msg.author.displayAvatarURL) - .setColor(0xFF4500) - .setTimestamp() - .setDescription(stripIndents` - **Member:** ${member.user.tag} (${member.id}) - **Action:** Softban - **Reason:** ${reason} - `); - modlogs.send({ embed }); - return null; } catch (err) { - return msg.say(`${err.name}: ${err.message}`); + return msg.say('Aborting Softban.'); } } }; diff --git a/commands/moderation/unban.js b/commands/moderation/unban.js index 59ff99d9..37086306 100644 --- a/commands/moderation/unban.js +++ b/commands/moderation/unban.js @@ -13,20 +13,22 @@ module.exports = class UnbanCommand extends Command { guildOnly: true, clientPermissions: ['BAN_MEMBERS'], userPermissions: ['BAN_MEMBERS'], - allowStaff: true, args: [ { key: 'id', - prompt: 'What member do you want to unban? Please enter the ID of the user.', + prompt: 'What is the id of the member you want to unban?', type: 'string' }, { key: 'reason', prompt: 'What do you want to set the reason as?', type: 'string', - validate: reason => { - if (reason.length < 140) return true; - return 'Invalid Reason. Reason must be under 140 characters.'; + validate: (reason) => { + if (reason.length < 140) { + return true; + } else { + return 'Invalid Reason. Reason must be under 140 characters.'; + } } } ] @@ -35,31 +37,48 @@ module.exports = class UnbanCommand extends Command { async run(msg, args) { const modlogs = msg.guild.channels.get(msg.guild.settings.get('modLog')); - if (!modlogs) return msg.say('This Command requires a channel set with the `mod-channel` command.'); - if (!modlogs.permissionsFor(this.client.user).has('SEND_MESSAGES')) - return msg.say('This Command requires the `SEND_MESSAGES` Permission for the Mod Log Channel.'); - if (!modlogs.permissionsFor(this.client.user).has('EMBED_LINKS')) - return msg.say('This Command requires the `EMBED_LINKS` Permission for the Mod Log Channel.'); const { id, reason } = args; const bans = await msg.guild.fetchBans(); - if (!bans.has(id)) return msg.say('This ID is not in the Guild Banlist.'); + if (!bans.has(id)) { + return msg.say('This ID is not in the Guild Banlist.'); + } const member = bans.get(id).user; try { - await msg.guild.unban(member, reason); - msg.say(':ok_hand:'); - const embed = new RichEmbed() - .setAuthor(msg.author.tag, msg.author.displayAvatarURL) - .setColor(0x00AE86) - .setTimestamp() - .setDescription(stripIndents` - **Member:** ${member.tag} (${member.id}) - **Action:** Unban - **Reason:** ${reason} - `); - modlogs.send({ embed }); - return null; + await msg.say(`Are you sure you want to unban ${member.tag} (${member.id})?`); + const collected = await msg.channel.awaitMessages((res) => res.author.id === msg.author.id, { + max: 1, + time: 15000, + errors: ['time'] + }); + if (['y', 'yes'].includes(collected.first().content.toLowerCase())) { + await msg.guild.unban(member, `${msg.author.tag}: ${reason}`); + await msg.say(`Successfully unbanned ${member.user.tag}.`); + if (!modlogs || !modlogs.permissionsFor(this.client.user.has('SEND_MESSAGES'))) { + return msg.say('Could not log the unban to the mod logs.'); + } else if (!modlogs.permissionsFor(this.client.user).has('EMBED_LINKS')) { + return modlogs.send(stripIndents` + **Member:** ${member.tag} (${member.id}) + **Action:** Unban + **Reason:** ${reason} + **Moderator:** ${msg.author.tag} + `); + } else { + const embed = new RichEmbed() + .setAuthor(msg.author.tag, msg.author.displayAvatarURL) + .setColor(0x00AE86) + .setTimestamp() + .setDescription(stripIndents` + **Member:** ${member.tag} (${member.id}) + **Action:** Unban + **Reason:** ${reason} + `); + return modlogs.send({ embed }); + } + } else { + return msg.say('Aborting Unban.'); + } } catch (err) { - return msg.say(`${err.name}: ${err.message}`); + return msg.say('Aborting Unban.'); } } }; diff --git a/commands/moderation/warn.js b/commands/moderation/warn.js index 4ee43efe..35d3077b 100644 --- a/commands/moderation/warn.js +++ b/commands/moderation/warn.js @@ -6,11 +6,11 @@ module.exports = class WarnCommand extends Command { constructor(client) { super(client, { name: 'warn', + aliases: ['warnne'], group: 'moderation', memberName: 'warn', description: 'Warns a user and logs the warn to the mod logs.', guildOnly: true, - allowStaff: true, userPermissions: ['KICK_MEMBERS'], args: [ { @@ -22,9 +22,12 @@ module.exports = class WarnCommand extends Command { key: 'reason', prompt: 'What do you want to set the reason as?', type: 'string', - validate: reason => { - if (reason.length < 140) return true; - return 'Invalid Reason. Reason must be under 140 characters.'; + validate: (reason) => { + if (reason.length < 140) { + return true; + } else { + return 'Invalid Reason. Reason must be under 140 characters.'; + } } } ] @@ -33,32 +36,50 @@ module.exports = class WarnCommand extends Command { async run(msg, args) { const modlogs = msg.guild.channels.get(msg.guild.settings.get('modLog')); - if (!modlogs) return msg.say('This Command requires a channel set with the `mod-channel` command.'); - if (!modlogs.permissionsFor(this.client.user).has('SEND_MESSAGES')) - return msg.say('This Command requires the `SEND_MESSAGES` Permission for the Mod Log Channel.'); - if (!modlogs.permissionsFor(this.client.user).has('EMBED_LINKS')) - return msg.say('This Command requires the `EMBED_LINKS` Permission for the Mod Log Channel.'); const { member, reason } = args; - if (!member.kickable) return msg.say('This member is not warnable. Perhaps they have a higher role than me?'); try { - await member.user.send(stripIndents` - You were warned in ${msg.guild.name}! - Reason: ${reason}. - `); + await msg.say(`Are you sure you want to warn ${member.user.tag} (${member.id})?`); + const collected = await msg.channel.awaitMessages((res) => res.author.id === msg.author.id, { + max: 1, + time: 15000, + errors: ['time'] + }); + if (['y', 'yes'].includes(collected.first().content.toLowerCase())) { + try { + await member.user.send(stripIndents` + You were warned in ${msg.guild.name}! + Reason: ${reason} + `); + } catch (err) { + await msg.say('Failed to Send DM.'); + } + await msg.say(`Successfully warned ${member.user.tag}.`); + if (!modlogs || !modlogs.permissionsFor(this.client.user.has('SEND_MESSAGES'))) { + return msg.say('Could not log the warn to the mod logs.'); + } else if (!modlogs.permissionsFor(this.client.user).has('EMBED_LINKS')) { + return modlogs.send(stripIndents` + **Member:** ${member.user.tag} (${member.id}) + **Action:** Warn + **Reason:** ${reason} + **Moderator:** ${msg.author.tag} + `); + } else { + const embed = new RichEmbed() + .setAuthor(msg.author.tag, msg.author.displayAvatarURL) + .setColor(0xFFFF00) + .setTimestamp() + .setDescription(stripIndents` + **Member:** ${member.user.tag} (${member.id}) + **Action:** Warn + **Reason:** ${reason} + `); + return modlogs.send({ embed }); + } + } else { + return msg.say('Aborting Warn.'); + } } catch (err) { - await msg.say('Failed to Send DM.'); + return msg.say('Aborting Warn.'); } - msg.say(':ok_hand:'); - const embed = new RichEmbed() - .setAuthor(msg.author.tag, msg.author.displayAvatarURL) - .setColor(0xFFFF00) - .setTimestamp() - .setDescription(stripIndents` - **Member:** ${member.user.tag} (${member.id}) - **Action:** Warn - **Reason:** ${reason} - `); - await modlogs.send({ embed }); - return null; } }; diff --git a/commands/numedit/currency.js b/commands/numedit/currency.js index 3598e88f..8e88591c 100644 --- a/commands/numedit/currency.js +++ b/commands/numedit/currency.js @@ -15,21 +15,27 @@ module.exports = class CurrencyCommand extends Command { key: 'base', prompt: 'What currency code do you want to use as the base?', type: 'string', - validate: base => { - if (codes.includes(base.toUpperCase())) return true; - return 'Invalid Currency Code. Use `help currency` to view a list of currency codes.'; + validate: (base) => { + if (codes.includes(base.toUpperCase())) { + return true; + } else { + return 'Invalid Currency Code. Use `help currency` to view a list of currency codes.'; + } }, - parse: base => base.toUpperCase() + parse: (base) => base.toUpperCase() }, { key: 'to', prompt: 'What currency code do you want to convert to?', type: 'string', - validate: to => { - if (codes.includes(to.toUpperCase())) return true; - return 'Invalid Currency Code. Use `help currency` to view a list of currency codes.'; + validate: (to) => { + if (codes.includes(to.toUpperCase())) { + return true; + } else { + return 'Invalid Currency Code. Use `help currency` to view a list of currency codes.'; + } }, - parse: to => to.toUpperCase() + parse: (to) => to.toUpperCase() }, { key: 'amount', @@ -42,18 +48,15 @@ module.exports = class CurrencyCommand extends Command { async run(msg, args) { const { base, to, amount } = args; - if (base === to) return msg.say(`Converting ${base} to ${to} is the same value, dummy.`); - try { - const { body } = await snekfetch - .get('http://api.fixer.io/latest') - .query({ - base, - symbols: to - }); - const rate = body.rates[to]; - return msg.say(`${amount} ${base} is ${amount * rate} ${to}.`); - } catch (err) { - return msg.say(`${err.name}: ${err.message}`); + if (base === to) { + return msg.say(`Converting ${base} to ${to} is the same value, dummy.`); } + const { body } = await snekfetch + .get('http://api.fixer.io/latest') + .query({ + base, + symbols: to + }); + return msg.say(`${amount} ${base} is ${amount * body.rates[to]} ${to}.`); } }; diff --git a/commands/numedit/math.js b/commands/numedit/math.js index f0f1d475..de641efb 100644 --- a/commands/numedit/math.js +++ b/commands/numedit/math.js @@ -21,10 +21,10 @@ module.exports = class MathCommand extends Command { run(msg, args) { const { expression } = args; try { - const solved = math.eval(expression); - return msg.say(solved).catch(() => msg.say('Invalid Statement.')); + const solved = math.eval(expression).toString(); + return msg.say(solved); } catch (err) { - return msg.say('Invalid Statement.'); + return msg.say('Invalid Statement'); } } }; diff --git a/commands/numedit/temperature.js b/commands/numedit/temperature.js index afd07a9c..94a29b7e 100644 --- a/commands/numedit/temperature.js +++ b/commands/numedit/temperature.js @@ -12,21 +12,27 @@ module.exports = class TemperatureCommand extends Command { key: 'base', prompt: 'What temperature unit do you want to use as the base?', type: 'string', - validate: base => { - if (['celsius', 'fahrenheit', 'kelvin'].includes(base.toLowerCase())) return true; - return 'Please enter either `celsius`, `fahrenheit`, or `kelvin`.'; + validate: (base) => { + if (['celsius', 'fahrenheit', 'kelvin'].includes(base.toLowerCase())) { + return true; + } else { + return 'Please enter either `celsius`, `fahrenheit`, or `kelvin`.'; + } }, - parse: base => base.toLowerCase() + parse: (base) => base.toLowerCase() }, { key: 'to', prompt: 'What temperature unit do you want to convert to?', type: 'string', - validate: to => { - if (['celsius', 'fahrenheit', 'kelvin'].includes(to.toLowerCase())) return true; - return 'Please enter either `celsius`, `fahrenheit`, or `kelvin`.'; + validate: (to) => { + if (['celsius', 'fahrenheit', 'kelvin'].includes(to.toLowerCase())) { + return true; + } else { + return 'Please enter either `celsius`, `fahrenheit`, or `kelvin`.'; + } }, - parse: to => to.toLowerCase() + parse: (to) => to.toLowerCase() }, { key: 'amount', @@ -39,16 +45,27 @@ module.exports = class TemperatureCommand extends Command { run(msg, args) { const { base, to, amount } = args; - if (base === to) return msg.say(`Converting ${base} to ${to} is the same value, dummy.`); + if (base === to) { + return msg.say(`Converting ${base} to ${to} is the same value, dummy.`); + } if (base === 'celsius') { - if (to === 'fahrenheit') return msg.say(`${amount}°C is ${(amount * 1.8) + 32}°F.`); - if (to === 'kelvin') return msg.say(`${amount}°C is ${amount + 273.15}°K.`); + if (to === 'fahrenheit') { + return msg.say(`${amount}°C is ${(amount * 1.8) + 32}°F.`); + } else if (to === 'kelvin') { + return msg.say(`${amount}°C is ${amount + 273.15}°K.`); + } } else if (base === 'fahrenheit') { - if (to === 'celsius') return msg.say(`${amount}°F is ${(amount - 32) / 1.8}°C.`); - if (to === 'kelvin') return msg.say(`${amount}°F is ${(amount + 459.67) * (5 / 9)}°K.`); + if (to === 'celsius') { + return msg.say(`${amount}°F is ${(amount - 32) / 1.8}°C.`); + } else if (to === 'kelvin') { + return msg.say(`${amount}°F is ${(amount + 459.67) * (5 / 9)}°K.`); + } } else if (base === 'kelvin') { - if (to === 'celsius') return msg.say(`${amount}°K is ${amount - 273.15}°C.`); - if (to === 'fahrenheit') return msg.say(`${amount}°K is ${(amount * 1.8) - 459.67}°F.`); + if (to === 'celsius') { + return msg.say(`${amount}°K is ${amount - 273.15}°C.`); + } else if (to === 'fahrenheit') { + return msg.say(`${amount}°K is ${(amount * 1.8) - 459.67}°F.`); + } } } }; diff --git a/commands/random/cleverbot.js b/commands/random/cleverbot.js index b003a137..77ee1e31 100644 --- a/commands/random/cleverbot.js +++ b/commands/random/cleverbot.js @@ -29,12 +29,7 @@ module.exports = class CleverbotCommand extends Command { async run(msg, args) { const { text } = args; - msg.channel.startTyping(); - try { - const { response } = await this.clevs.ask(text); - return msg.reply(response).then(() => msg.channel.stopTyping()); - } catch (err) { - return msg.say(`${err.name}: ${err.message}`); - } + const { response } = await this.clevs.ask(text); + return msg.reply(response); } }; diff --git a/commands/random/easter-egg.js b/commands/random/easter-egg.js index 821ef9ae..303dbe23 100644 --- a/commands/random/easter-egg.js +++ b/commands/random/easter-egg.js @@ -14,11 +14,14 @@ module.exports = class EasterEggCommand extends Command { key: 'tag', prompt: 'What easter egg do you want to view?', type: 'string', - validate: tag => { - if (eastereggs[tag.toLowerCase()]) return true; - return 'Nope, that\'s not a valid easter egg. Try again!'; + validate: (tag) => { + if (eastereggs[tag.toLowerCase()]) { + return true; + } else { + return 'Nope, that\'s not a valid easter egg. Try again!'; + } }, - parse: tag => tag.toLowerCase() + parse: (tag) => tag.toLowerCase() } ] }); diff --git a/commands/random/horoscope.js b/commands/random/horoscope.js index b6a246c6..19126eb3 100644 --- a/commands/random/horoscope.js +++ b/commands/random/horoscope.js @@ -17,11 +17,14 @@ module.exports = class HoroscopeCommand extends Command { key: 'sign', prompt: 'Which sign would you like to get the horoscope for?', type: 'string', - validate: sign => { - if (signs.includes(sign.toLowerCase())) return true; - return 'Invalid sign. Use `help horoscope` for a list of signs.'; + validate: (sign) => { + if (signs.includes(sign.toLowerCase())) { + return true; + } else { + return 'Invalid sign. Use `help horoscope` for a list of signs.'; + } }, - parse: sign => sign.toLowerCase() + parse: (sign) => sign.toLowerCase() } ] }); @@ -29,24 +32,20 @@ module.exports = class HoroscopeCommand extends Command { async run(msg, args) { const { sign } = args; - try { - const { text } = await snekfetch - .get(`http://sandipbgt.com/theastrologer/api/horoscope/${sign}/today`); - const body = JSON.parse(text); - const embed = new RichEmbed() - .setColor(0x9797FF) - .setTitle(`Horoscope for ${body.sunsign}...`) - .setTimestamp() - .setDescription(body.horoscope) - .addField('Mood', - body.meta.mood, true) - .addField('Intensity', - body.meta.intensity, true) - .addField('Date', - body.date, true); - return msg.embed(embed); - } catch (err) { - return msg.say(`${err.name}: ${err.message}`); - } + const { text } = await snekfetch + .get(`http://sandipbgt.com/theastrologer/api/horoscope/${sign}/today`); + const body = JSON.parse(text); + const embed = new RichEmbed() + .setColor(0x9797FF) + .setTitle(`Horoscope for ${body.sunsign}...`) + .setTimestamp() + .setDescription(body.horoscope) + .addField('Mood', + body.meta.mood, true) + .addField('Intensity', + body.meta.intensity, true) + .addField('Date', + body.date, true); + return msg.embed(embed); } }; diff --git a/commands/random/meme.js b/commands/random/meme.js index d349aad3..dec69ac5 100644 --- a/commands/random/meme.js +++ b/commands/random/meme.js @@ -15,23 +15,26 @@ module.exports = class MemeCommand extends Command { key: 'type', prompt: 'What meme type do you want to use?', type: 'string', - validate: type => { - if (codes.includes(type.toLowerCase())) return true; - return 'Invalid meme type. Use `help meme` to view a list of meme types.'; + validate: (type) => { + if (codes.includes(type.toLowerCase())) { + return true; + } else { + return 'Invalid meme type. Use `help meme` to view a list of meme types.'; + } }, - parse: type => type.toLowerCase() + parse: (type) => type.toLowerCase() }, { key: 'top', prompt: 'What should the top row of the meme to be?', type: 'string', - parse: top => encodeURIComponent(top.replace(/[ ]/g, '-')) + parse: (top) => encodeURIComponent(top.replace(/[ ]/g, '-')) }, { key: 'bottom', prompt: 'What should the bottom row of the meme to be?', type: 'string', - parse: bottom => encodeURIComponent(bottom.replace(/[ ]/g, '-')) + parse: (bottom) => encodeURIComponent(bottom.replace(/[ ]/g, '-')) } ] }); @@ -39,7 +42,6 @@ module.exports = class MemeCommand extends Command { run(msg, args) { const { type, top, bottom } = args; - return msg.say({ files: [`https://memegen.link/${type}/${top}/${bottom}.jpg`] }) - .catch(err => msg.say(`${err.name}: ${err.message}`)); + return msg.say({ files: [`https://memegen.link/${type}/${top}/${bottom}.jpg`] }); } }; diff --git a/commands/random/soundboard.js b/commands/random/soundboard.js index 5cdc5dd4..5df80545 100644 --- a/commands/random/soundboard.js +++ b/commands/random/soundboard.js @@ -22,11 +22,14 @@ module.exports = class SoundboardCommand extends Command { key: 'sound', prompt: 'What sound would you like to play?', type: 'string', - validate: sound => { - if (names.includes(sound.toLowerCase())) return true; - return 'Invalid Sound. Use `help soundboard` for a list of sounds.'; + validate: (sound) => { + if (names.includes(sound.toLowerCase())) { + return true; + } else { + return 'Invalid Sound. Use `help soundboard` for a list of sounds.'; + } }, - parse: sound => sound.toLowerCase() + parse: (sound) => sound.toLowerCase() } ] }); @@ -34,26 +37,25 @@ module.exports = class SoundboardCommand extends Command { async run(msg, args) { const voiceChannel = msg.member.voiceChannel; - if (!voiceChannel) return msg.say('Please enter a Voice Channel first.'); - if (!voiceChannel.permissionsFor(this.client.user).has('CONNECT')) + if (!voiceChannel) { + return msg.say('Please enter a Voice Channel first.'); + } else if (!voiceChannel.permissionsFor(this.client.user).has('CONNECT')) { return msg.say('This Command requires the `CONNECT` Permission.'); - if (!voiceChannel.permissionsFor(this.client.user).has('SPEAK')) + } else if (!voiceChannel.permissionsFor(this.client.user).has('SPEAK')) { return msg.say('This Command requires the `SPEAK` Permission.'); - if (!voiceChannel.joinable) return msg.say('This Voice Channel is not joinable.'); - const alreadyConnected = this.client.voiceConnections.get(voiceChannel.guild.id); - if (alreadyConnected) return msg.say('I am already playing a sound.'); - const { sound } = args; - try { - const connection = await voiceChannel.join(); - msg.react('🔊'); - const dispatcher = connection.playFile(path.join(__dirname, '..', '..', 'assets', 'sounds', paths[sound])); - dispatcher.on('end', () => { - voiceChannel.leave(); - msg.react('✅'); - return null; - }); - } catch (err) { - return msg.say(`${err.name}: ${err.message}`); + } else if (!voiceChannel.joinable) { + return msg.say('This Voice Channel is not joinable.'); + } else if (this.client.voiceConnections.get(voiceChannel.guild.id)) { + return msg.say('I am already playing a sound.'); } + const { sound } = args; + const connection = await voiceChannel.join(); + msg.react('🔊'); + const dispatcher = connection.playFile(path.join(__dirname, '..', '..', 'assets', 'sounds', paths[sound])); + dispatcher.on('end', () => { + voiceChannel.leave(); + msg.react('✅'); + return null; + }); } }; diff --git a/commands/random/spam.js b/commands/random/spam.js index 3fa875d2..b5c3338e 100644 --- a/commands/random/spam.js +++ b/commands/random/spam.js @@ -13,7 +13,6 @@ module.exports = class SpamCommand extends Command { } run(msg) { - return msg.say({ files: [path.join(__dirname, '..', '..', 'assets', 'images', 'spam.png')] }) - .catch(err => msg.say(`${err.name}: ${err.message}`)); + return msg.say({ files: [path.join(__dirname, '..', '..', 'assets', 'images', 'spam.png')] }); } }; diff --git a/commands/random/star.js b/commands/random/star.js index 46efa8b8..83858dbd 100644 --- a/commands/random/star.js +++ b/commands/random/star.js @@ -1,5 +1,6 @@ const Command = require('../../structures/Command'); const { RichEmbed } = require('discord.js'); +const { stripIndents } = require('common-tags'); const moment = require('moment'); module.exports = class StarCommand extends Command { @@ -24,23 +25,31 @@ module.exports = class StarCommand extends Command { async run(msg, args, reaction) { const { id } = args; const channel = msg.guild.channels.get(msg.guild.settings.get('starboard')); - if (!channel || !channel.permissionsFor(this.client.user).has(['SEND_MESSAGES', 'EMBED_LINKS'])) return null; - if (this.starred.includes(id)) return null; - try { - const message = await msg.channel.fetchMessage(id); - if (!reaction && msg.author.id === message.author.id) - return msg.reply('You cannot star your own messages, baka.'); + if (!channel || this.starred.includes(id)) { + return null; + } else if (!channel.permissionsFor(this.client.user).has('SEND_MESSAGES')) { + return msg.say('I do not have Permission to send the message.'); + } + const message = await msg.channel.fetchMessage(id); + if (!reaction && msg.author.id === message.author.id) { + return msg.reply('You cannot star your own messages, baka.'); + } + this.starred.push(id); + if (!channel.permissionsFor(this.client.user).has('EMBED_LINKS')) { + return msg.say(stripIndents` + **Author:** ${message.author.tag} + **Content:** ${message.content} + **Date:** ${moment(message.createdTimestamp).format('MMMM Do YYYY h:mm:ss A')} + ${message.attachments.first() ? `**Image:** ${message.attachments.first().url}` : ''} + `); + } else { const embed = new RichEmbed() .setColor(0xFFFF00) .setAuthor(message.author.tag, message.author.displayAvatarURL) .setDescription(message.content) .setImage(message.attachments.first() ? message.attachments.first().url : null) .setFooter(moment(message.createdTimestamp).format('MMMM Do YYYY h:mm:ss A')); - this.starred.push(id); - await channel.send({ embed }); - return null; - } catch (err) { - return msg.say(`${err.name}: ${err.message}`); + return channel.send({ embed }); } } }; diff --git a/commands/random/strawpoll.js b/commands/random/strawpoll.js index 2c315f8e..f3858aba 100644 --- a/commands/random/strawpoll.js +++ b/commands/random/strawpoll.js @@ -1,4 +1,5 @@ const Command = require('../../structures/Command'); +const { FriendlyError } = require('discord.js-commando'); const { stripIndents } = require('common-tags'); const snekfetch = require('snekfetch'); @@ -14,9 +15,12 @@ module.exports = class StrawpollCommand extends Command { key: 'title', prompt: 'What would you like the title of the Strawpoll to be?', type: 'string', - validate: title => { - if (title.length < 200) return true; - return 'Invalid Title. Title must be under 200 characters.'; + validate: (title) => { + if (title.length < 200) { + return true; + } else { + return 'Invalid Title. Title must be under 200 characters.'; + } } }, { @@ -24,9 +28,12 @@ module.exports = class StrawpollCommand extends Command { prompt: 'What options do you want me pick from? Maximum of 31.', type: 'string', infinite: true, - validate: choice => { - if (choice.length < 160) return true; - return 'Invalid Choice. Choices must be under 140 characters each.'; + validate: (choice) => { + if (choice.length < 160) { + return true; + } else { + return 'Invalid Choice. Choices must be under 140 characters each.'; + } } } ] @@ -35,18 +42,17 @@ module.exports = class StrawpollCommand extends Command { async run(msg, args) { const { title, options } = args; - if (options.length < 2) return msg.say('You provided less than two choices.'); - if (options.length > 31) return msg.say('You provided more than thirty choices.'); - try { - const { body } = await snekfetch - .post('https://strawpoll.me/api/v2/polls') - .send({ title, options }); - return msg.say(stripIndents` - ${body.title} - http://strawpoll.me/${body.id} - `); - } catch (err) { - return msg.say(`${err.name}: ${err.message}`); + if (options.length < 2) { + throw new FriendlyError('You provided less than two choices.'); + } else if (options.length > 31) { + throw new FriendlyError('You provided more than thirty choices.'); } + const { body } = await snekfetch + .post('https://strawpoll.me/api/v2/polls') + .send({ title, options }); + return msg.say(stripIndents` + ${body.title} + http://strawpoll.me/${body.id} + `); } }; diff --git a/commands/random/today.js b/commands/random/today.js index facdf309..59e2f180 100644 --- a/commands/random/today.js +++ b/commands/random/today.js @@ -14,21 +14,17 @@ module.exports = class TodayCommand extends Command { } async run(msg) { - try { - const { text } = await snekfetch - .get('http://history.muffinlabs.com/date'); - const body = JSON.parse(text); - const events = body.data.Events; - const event = events[Math.floor(Math.random() * events.length)]; - const embed = new RichEmbed() - .setColor(0x9797FF) - .setURL(body.url) - .setTitle(`On this day (${body.date})...`) - .setTimestamp() - .setDescription(`${event.year}: ${event.text}`); - return msg.embed(embed); - } catch (err) { - return msg.say(`${err.name}: ${err.message}`); - } + const { text } = await snekfetch + .get('http://history.muffinlabs.com/date'); + const body = JSON.parse(text); + const events = body.data.Events; + const event = events[Math.floor(Math.random() * events.length)]; + const embed = new RichEmbed() + .setColor(0x9797FF) + .setURL(body.url) + .setTitle(`On this day (${body.date})...`) + .setTimestamp() + .setDescription(`${event.year}: ${event.text}`); + return msg.embed(embed); } }; diff --git a/commands/random/would-you-rather.js b/commands/random/would-you-rather.js index 7dfd3faa..6debd65a 100644 --- a/commands/random/would-you-rather.js +++ b/commands/random/would-you-rather.js @@ -15,17 +15,13 @@ module.exports = class WouldYouRatherCommand extends Command { } async run(msg) { - try { - const { body } = await snekfetch - .get('http://www.rrrather.com/botapi'); - const embed = new RichEmbed() - .setTitle(`${body.title}...`) - .setURL(body.link) - .setColor(0x9797FF) - .setDescription(`${body.choicea} OR ${body.choiceb}?`); - return msg.embed(embed); - } catch (err) { - return msg.say(`${err.name}: ${err.message}`); - } + const { body } = await snekfetch + .get('http://www.rrrather.com/botapi'); + const embed = new RichEmbed() + .setTitle(`${body.title}...`) + .setURL(body.link) + .setColor(0x9797FF) + .setDescription(`${body.choicea} OR ${body.choiceb}?`); + return msg.embed(embed); } }; diff --git a/commands/randomimg/cat.js b/commands/randomimg/cat.js index c4c3e9a7..ea9913f4 100644 --- a/commands/randomimg/cat.js +++ b/commands/randomimg/cat.js @@ -13,12 +13,8 @@ module.exports = class CatCommand extends Command { } async run(msg) { - try { - const { body } = await snekfetch - .get('http://random.cat/meow'); - return msg.say(body.file); - } catch (err) { - return msg.say(`${err.name}: ${err.message}`); - } + const { body } = await snekfetch + .get('http://random.cat/meow'); + return msg.say(body.file); } }; diff --git a/commands/randomimg/dog.js b/commands/randomimg/dog.js index 59eefa96..90778fcf 100644 --- a/commands/randomimg/dog.js +++ b/commands/randomimg/dog.js @@ -12,12 +12,8 @@ module.exports = class DogCommand extends Command { } async run(msg) { - try { - const { body } = await snekfetch - .get('https://random.dog/woof.json'); - return msg.say(body.url); - } catch (err) { - return msg.say(`${err.name}: ${err.message}`); - } + const { body } = await snekfetch + .get('https://random.dog/woof.json'); + return msg.say(body.url); } }; diff --git a/commands/randomimg/xiao.js b/commands/randomimg/xiao.js index ecb5784c..a21124e6 100644 --- a/commands/randomimg/xiao.js +++ b/commands/randomimg/xiao.js @@ -15,7 +15,6 @@ module.exports = class XiaoCommand extends Command { run(msg) { const xiao = Math.floor(Math.random() * 10) + 1; - return msg.say({ files: [path.join(__dirname, '..', '..', 'assets', 'images', `xiao${xiao}.png`)] }) - .catch(err => msg.say(`${err.name}: ${err.message}`)); + return msg.say({ files: [path.join(__dirname, '..', '..', 'assets', 'images', `xiao${xiao}.png`)] }); } }; diff --git a/commands/randomimg/xkcd.js b/commands/randomimg/xkcd.js index 56ed6710..6567c444 100644 --- a/commands/randomimg/xkcd.js +++ b/commands/randomimg/xkcd.js @@ -16,11 +16,14 @@ module.exports = class XKCDCommand extends Command { key: 'type', prompt: 'Would you like to get the comic for today or random?', type: 'string', - validate: type => { - if (['today', 'random'].includes(type.toLowerCase())) return true; - return 'Please enter either `today` or `random`'; - }, - default: 'random' + default: 'random', + validate: (type) => { + if (['today', 'random'].includes(type.toLowerCase())) { + return true; + } else { + return 'Please enter either `today` or `random`'; + } + } } ] }); @@ -28,29 +31,25 @@ module.exports = class XKCDCommand extends Command { async run(msg, args) { const { type } = args; - try { - const current = await snekfetch - .get('https://xkcd.com/info.0.json'); - if (type === 'today') { - const embed = new RichEmbed() - .setTitle(`${current.body.num} - ${current.body.title}`) - .setURL(`https://xkcd.com/${current.body.num}`) - .setImage(current.body.img) - .setFooter(current.body.alt); - return msg.embed(embed); - } else { - const random = Math.floor(Math.random() * current.body.num) + 1; - const { body } = await snekfetch - .get(`https://xkcd.com/${random}/info.0.json`); - const embed = new RichEmbed() - .setTitle(`${body.num} - ${body.title}`) - .setURL(`https://xkcd.com/${body.num}`) - .setImage(body.img) - .setFooter(body.alt); - return msg.embed(embed); - } - } catch (err) { - return msg.say(`${err.name}: ${err.message}`); + const current = await snekfetch + .get('https://xkcd.com/info.0.json'); + if (type === 'today') { + const embed = new RichEmbed() + .setTitle(`${current.body.num} - ${current.body.title}`) + .setURL(`https://xkcd.com/${current.body.num}`) + .setImage(current.body.img) + .setFooter(current.body.alt); + return msg.embed(embed); + } else { + const random = Math.floor(Math.random() * current.body.num) + 1; + const { body } = await snekfetch + .get(`https://xkcd.com/${random}/info.0.json`); + const embed = new RichEmbed() + .setTitle(`${body.num} - ${body.title}`) + .setURL(`https://xkcd.com/${body.num}`) + .setImage(body.img) + .setFooter(body.alt); + return msg.embed(embed); } } }; diff --git a/commands/response/compliment.js b/commands/response/compliment.js index 9fc852fd..af3ae9c8 100644 --- a/commands/response/compliment.js +++ b/commands/response/compliment.js @@ -7,20 +7,21 @@ module.exports = class ComplimentCommand extends Command { name: 'compliment', group: 'response', memberName: 'compliment', - description: 'Compliments something/someone.', + description: 'Compliments a user.', args: [ { - key: 'thing', - prompt: 'What do you want to compliment?', - type: 'string' + key: 'user', + prompt: 'What user do you want to compliment?', + type: 'user', + default: '' } ] }); } run(msg, args) { - const { thing } = args; + const user = args.user || msg.author; const compliment = compliments[Math.floor(Math.random() * compliments.length)]; - return msg.say(`${thing}, ${compliment}`); + return msg.say(`${user}, ${compliment}`); } }; diff --git a/commands/response/name.js b/commands/response/name.js index 0834a126..fc4d6bbe 100644 --- a/commands/response/name.js +++ b/commands/response/name.js @@ -13,11 +13,14 @@ module.exports = class RandomNameCommand extends Command { key: 'gender', prompt: 'Which gender do you want to generate a name for?', type: 'string', - validate: gender => { - if (['male', 'female'].includes(gender.toLowerCase())) return true; - return 'Please enter either `male` or `female`.'; + validate: (gender) => { + if (['male', 'female'].includes(gender.toLowerCase())) { + return true; + } else { + return 'Please enter either `male` or `female`.'; + } }, - parse: gender => gender.toLowerCase() + parse: (gender) => gender.toLowerCase() } ] }); diff --git a/commands/response/roast.js b/commands/response/roast.js index d76d9c5c..e727aa86 100644 --- a/commands/response/roast.js +++ b/commands/response/roast.js @@ -7,11 +7,11 @@ module.exports = class RoastCommand extends Command { name: 'roast', group: 'response', memberName: 'roast', - description: 'Roasts something/someone.', + description: 'Roasts a user.', args: [ { - key: 'thing', - prompt: 'What do you want to roast?', + key: 'user', + prompt: 'What user do you want to roast?', type: 'string' } ] @@ -19,8 +19,8 @@ module.exports = class RoastCommand extends Command { } run(msg, args) { - const { thing } = args; + const user = args.user || msg.author; const roast = roasts[Math.floor(Math.random() * roasts.length)]; - return msg.say(`${thing}, ${roast}`); + return msg.say(`${user}, ${roast}`); } }; diff --git a/commands/response/roll.js b/commands/response/roll.js index 24b9e042..b7c3ac92 100644 --- a/commands/response/roll.js +++ b/commands/response/roll.js @@ -13,7 +13,8 @@ module.exports = class RollCommand extends Command { key: 'value', label: 'maximum number', prompt: 'What is the maximum number you wish to appear?', - type: 'integer' + type: 'integer', + default: 6 } ] }); diff --git a/commands/response/ship.js b/commands/response/ship.js index 2a621c73..1cc8f287 100644 --- a/commands/response/ship.js +++ b/commands/response/ship.js @@ -21,12 +21,6 @@ module.exports = class ShipCommand extends Command { run(msg, args) { const { things } = args; const rating = Math.floor(Math.random() * 100) + 1; - let response; - if (rating < 25) response = 'Ouch. Might want to keep them apart.'; - else if (rating < 50) response = 'Meh, they should keep looking.'; - else if (rating < 75) response = 'Could be worse, they should try it.'; - else if (rating < 90) response = 'Not too bad. It might work out.'; - else response = 'These guys have one bright future ahead of them!'; - return msg.say(`I'd give ${things} a ${rating}%! ${response}`); + return msg.say(`I'd give ${things} a ${rating}%!`); } }; diff --git a/commands/roleplay/cuddle.js b/commands/roleplay/cuddle.js index e2ad0f58..437d360e 100644 --- a/commands/roleplay/cuddle.js +++ b/commands/roleplay/cuddle.js @@ -1,4 +1,5 @@ const Command = require('../../structures/Command'); +const { stripIndents } = require('common-tags'); module.exports = class CuddleCommand extends Command { constructor(client) { @@ -6,19 +7,22 @@ module.exports = class CuddleCommand extends Command { name: 'cuddle', group: 'roleplay', memberName: 'cuddle', - description: 'Cuddles something/someone.', + description: 'Cuddles a user.', args: [ { - key: 'thing', - prompt: 'What do you want to roleplay with?', - type: 'string' + key: 'user', + prompt: 'What user do you want to roleplay with?', + type: 'user' } ] }); } run(msg, args) { - const { thing } = args; - return msg.say(`${msg.author} *cuddles* ${thing}`); + const { user } = args; + return msg.say(stripIndents` + **${msg.author.username}** *cuddles* **${user.username}** + https://i.imgur.com/0yAIWbg.gif + `); } }; diff --git a/commands/roleplay/divorce.js b/commands/roleplay/divorce.js index 65d64dfe..04b7733b 100644 --- a/commands/roleplay/divorce.js +++ b/commands/roleplay/divorce.js @@ -1,4 +1,5 @@ const Command = require('../../structures/Command'); +const { stripIndents } = require('common-tags'); module.exports = class DivorceCommand extends Command { constructor(client) { @@ -6,19 +7,22 @@ module.exports = class DivorceCommand extends Command { name: 'divorce', group: 'roleplay', memberName: 'divorce', - description: 'Divorces something/someone.', + description: 'Divorces a user.', args: [ { - key: 'thing', - prompt: 'What do you want to roleplay with?', - type: 'string' + key: 'user', + prompt: 'What user do you want to roleplay with?', + type: 'user' } ] }); } run(msg, args) { - const { thing } = args; - return msg.say(`${msg.author} *divorces* ${thing}`); + const { user } = args; + return msg.say(stripIndents` + **${msg.author.username}** *divorces* **${user.username}** + https://i.imgur.com/IgvLWaa.gif + `); } }; diff --git a/commands/roleplay/eat.js b/commands/roleplay/eat.js index e0f6a1ab..2ce1256a 100644 --- a/commands/roleplay/eat.js +++ b/commands/roleplay/eat.js @@ -1,4 +1,5 @@ const Command = require('../../structures/Command'); +const { stripIndents } = require('common-tags'); module.exports = class EatCommand extends Command { constructor(client) { @@ -6,19 +7,22 @@ module.exports = class EatCommand extends Command { name: 'eat', group: 'roleplay', memberName: 'eat', - description: 'Eats something/someone.', + description: 'Eats a user.', args: [ { - key: 'thing', - prompt: 'What do you want to roleplay with?', - type: 'string' + key: 'user', + prompt: 'What user do you want to roleplay with?', + type: 'user' } ] }); } run(msg, args) { - const { thing } = args; - return msg.say(`${msg.author} *eats* ${thing}`); + const { user } = args; + return msg.say(stripIndents` + **${msg.author.username}** *eats* **${user.username}** + https://i.imgur.com/O7FQ5kz.gif + `); } }; diff --git a/commands/roleplay/falcon-punch.js b/commands/roleplay/falcon-punch.js index 497644be..70c05e0e 100644 --- a/commands/roleplay/falcon-punch.js +++ b/commands/roleplay/falcon-punch.js @@ -1,4 +1,5 @@ const Command = require('../../structures/Command'); +const { stripIndents } = require('common-tags'); module.exports = class FalconPunchCommand extends Command { constructor(client) { @@ -6,19 +7,22 @@ module.exports = class FalconPunchCommand extends Command { name: 'falcon-punch', group: 'roleplay', memberName: 'falcon-punch', - description: 'Falcon Punches something/someone.', + description: 'Falcon Punches a user.', args: [ { - key: 'thing', - prompt: 'What do you want to roleplay with?', - type: 'string' + key: 'user', + prompt: 'What user do you want to roleplay with?', + type: 'user' } ] }); } run(msg, args) { - const { thing } = args; - return msg.say(`${msg.author} *falcon punches* ${thing}`); + const { user } = args; + return msg.say(stripIndents` + **${msg.author.username}** *falcon punches* **${user.username}** + https://i.imgur.com/LOuK637.gif + `); } }; diff --git a/commands/roleplay/fist-bump.js b/commands/roleplay/fist-bump.js index c9f312b4..c5847795 100644 --- a/commands/roleplay/fist-bump.js +++ b/commands/roleplay/fist-bump.js @@ -1,4 +1,5 @@ const Command = require('../../structures/Command'); +const { stripIndents } = require('common-tags'); module.exports = class FistBumpCommand extends Command { constructor(client) { @@ -6,19 +7,22 @@ module.exports = class FistBumpCommand extends Command { name: 'fist-bump', group: 'roleplay', memberName: 'fist-bump', - description: 'Fistbumps something/someone.', + description: 'Fistbumps a user.', args: [ { - key: 'thing', - prompt: 'What do you want to roleplay with?', - type: 'string' + key: 'user', + prompt: 'What user do you want to roleplay with?', + type: 'user' } ] }); } run(msg, args) { - const { thing } = args; - return msg.say(`${msg.author} *fist-bumps* ${thing} *badalalala*`); + const { user } = args; + return msg.say(stripIndents` + **${msg.author.username}** *fist-bumps* **${user.username}** + *badalalala* https://i.imgur.com/lO2xZHC.gif + `); } }; diff --git a/commands/roleplay/high-five.js b/commands/roleplay/high-five.js index 5cf37f38..2c6676da 100644 --- a/commands/roleplay/high-five.js +++ b/commands/roleplay/high-five.js @@ -1,4 +1,5 @@ const Command = require('../../structures/Command'); +const { stripIndents } = require('common-tags'); module.exports = class HighFivesCommand extends Command { constructor(client) { @@ -9,16 +10,19 @@ module.exports = class HighFivesCommand extends Command { description: 'High Fives something/someone.', args: [ { - key: 'thing', - prompt: 'What do you want to roleplay with?', - type: 'string' + key: 'user', + prompt: 'What user do you want to roleplay with?', + type: 'user' } ] }); } run(msg, args) { - const { thing } = args; - return msg.say(`${msg.author} *high-fives* ${thing}`); + const { user } = args; + return msg.say(stripIndents` + **${msg.author.username}** *high-fives* **${user.username}** + https://i.imgur.com/7BJ6gfM.gif + `); } }; diff --git a/commands/roleplay/hit-with-shovel.js b/commands/roleplay/hit-with-shovel.js index aa2fa243..3659495c 100644 --- a/commands/roleplay/hit-with-shovel.js +++ b/commands/roleplay/hit-with-shovel.js @@ -1,4 +1,5 @@ const Command = require('../../structures/Command'); +const { stripIndents } = require('common-tags'); module.exports = class HitwithShovelCommand extends Command { constructor(client) { @@ -6,19 +7,22 @@ module.exports = class HitwithShovelCommand extends Command { name: 'hit-with-shovel', group: 'roleplay', memberName: 'hit-with-shovel', - description: 'Hits something/someone with a shovel.', + description: 'Hits a user with a shovel.', args: [ { - key: 'thing', - prompt: 'What do you want to roleplay with?', - type: 'string' + key: 'user', + prompt: 'What user do you want to roleplay with?', + type: 'user' } ] }); } run(msg, args) { - const { thing } = args; - return msg.say(`${msg.author} *hits* ${thing} *with a shovel*`); + const { user } = args; + return msg.say(stripIndents` + **${msg.author.username}** *hits* **${user.username}** *with a shovel* + https://i.imgur.com/4yvqw81.gif + `); } }; diff --git a/commands/roleplay/hug.js b/commands/roleplay/hug.js index ecc903f8..8a7f2c62 100644 --- a/commands/roleplay/hug.js +++ b/commands/roleplay/hug.js @@ -1,4 +1,5 @@ const Command = require('../../structures/Command'); +const { stripIndents } = require('common-tags'); module.exports = class HugCommand extends Command { constructor(client) { @@ -6,19 +7,22 @@ module.exports = class HugCommand extends Command { name: 'hug', group: 'roleplay', memberName: 'hug', - description: 'Hugs something/someone.', + description: 'Hugs a user.', args: [ { - key: 'thing', - prompt: 'What do you want to roleplay with?', - type: 'string' + key: 'user', + prompt: 'What user do you want to roleplay with?', + type: 'user' } ] }); } run(msg, args) { - const { thing } = args; - return msg.say(`${msg.author} *hugs* ${thing}`); + const { user } = args; + return msg.say(stripIndents` + **${msg.author.username}** *hugs* **${user.username}** + https://i.imgur.com/q9Wkhz4.gif + `); } }; diff --git a/commands/roleplay/inhale.js b/commands/roleplay/inhale.js index ee479292..f7b85901 100644 --- a/commands/roleplay/inhale.js +++ b/commands/roleplay/inhale.js @@ -1,4 +1,5 @@ const Command = require('../../structures/Command'); +const { stripIndents } = require('common-tags'); module.exports = class InhaleCommand extends Command { constructor(client) { @@ -6,19 +7,22 @@ module.exports = class InhaleCommand extends Command { name: 'inhale', group: 'roleplay', memberName: 'inhale', - description: 'Inhales something/someone.', + description: 'Inhales a user.', args: [ { - key: 'thing', - prompt: 'What do you want to roleplay with?', - type: 'string' + key: 'user', + prompt: 'What user do you want to roleplay with?', + type: 'user' } ] }); } run(msg, args) { - const { thing } = args; - return msg.say(`${msg.author} *inhales* ${thing} *but gained no ability...*`); + const { user } = args; + return msg.say(stripIndents` + **${msg.author.username}** *inhales* **${user.username}** *but gained no ability...* + https://i.imgur.com/b4NeOXj.gif + `); } }; diff --git a/commands/roleplay/kill.js b/commands/roleplay/kill.js index 4bb8ad24..0a7565e1 100644 --- a/commands/roleplay/kill.js +++ b/commands/roleplay/kill.js @@ -1,4 +1,5 @@ const Command = require('../../structures/Command'); +const { stripIndents } = require('common-tags'); module.exports = class KillCommand extends Command { constructor(client) { @@ -6,19 +7,22 @@ module.exports = class KillCommand extends Command { name: 'kill', group: 'roleplay', memberName: 'kill', - description: 'Kills something/someone.', + description: 'Kills a user.', args: [ { - key: 'thing', - prompt: 'What do you want to roleplay with?', - type: 'string' + key: 'user', + prompt: 'What user do you want to roleplay with?', + type: 'user' } ] }); } run(msg, args) { - const { thing } = args; - return msg.say(`${msg.author} *kills* ${thing}`); + const { user } = args; + return msg.say(stripIndents` + **${msg.author.username}** *kills* **${user.username}** + https://i.imgur.com/WxD4XMe.gif + `); } }; diff --git a/commands/roleplay/kiss.js b/commands/roleplay/kiss.js index 58c45324..90ffc347 100644 --- a/commands/roleplay/kiss.js +++ b/commands/roleplay/kiss.js @@ -1,4 +1,5 @@ const Command = require('../../structures/Command'); +const { stripIndents } = require('common-tags'); module.exports = class KissCommand extends Command { constructor(client) { @@ -6,19 +7,22 @@ module.exports = class KissCommand extends Command { name: 'kiss', group: 'roleplay', memberName: 'kiss', - description: 'Kisses something/someone.', + description: 'Kisses a user.', args: [ { - key: 'thing', - prompt: 'What do you want to roleplay with?', - type: 'string' + key: 'user', + prompt: 'What user do you want to roleplay with?', + type: 'user' } ] }); } run(msg, args) { - const { thing } = args; - return msg.say(`${msg.author} *kisses* ${thing}`); + const { user } = args; + return msg.say(stripIndents` + **${msg.author.username}** *kisses* **${user.username}** + https://i.imgur.com/S7mwPfE.gif + `); } }; diff --git a/commands/roleplay/marry.js b/commands/roleplay/marry.js index 6c47df60..e964b955 100644 --- a/commands/roleplay/marry.js +++ b/commands/roleplay/marry.js @@ -1,4 +1,5 @@ const Command = require('../../structures/Command'); +const { stripIndents } = require('common-tags'); module.exports = class MarryCommand extends Command { constructor(client) { @@ -6,19 +7,22 @@ module.exports = class MarryCommand extends Command { name: 'marry', group: 'roleplay', memberName: 'marry', - description: 'Marries something/someone.', + description: 'Marries a user.', args: [ { - key: 'thing', - prompt: 'What do you want to roleplay with?', - type: 'string' + key: 'user', + prompt: 'What user do you want to roleplay with?', + type: 'user' } ] }); } run(msg, args) { - const { thing } = args; - return msg.say(`${msg.author} *marries* ${thing}`); + const { user } = args; + return msg.say(stripIndents` + **${msg.author.username}** *marries* **${user.username}** + https://i.imgur.com/u67QLhB.gif + `); } }; diff --git a/commands/roleplay/pat.js b/commands/roleplay/pat.js index c9417755..d5a6c57b 100644 --- a/commands/roleplay/pat.js +++ b/commands/roleplay/pat.js @@ -1,4 +1,5 @@ const Command = require('../../structures/Command'); +const { stripIndents } = require('common-tags'); module.exports = class PatCommand extends Command { constructor(client) { @@ -6,19 +7,22 @@ module.exports = class PatCommand extends Command { name: 'pat', group: 'roleplay', memberName: 'pat', - description: 'Pats something/someone.', + description: 'Pats a user.', args: [ { - key: 'thing', - prompt: 'What do you want to roleplay with?', - type: 'string' + key: 'user', + prompt: 'What user do you want to roleplay with?', + type: 'user' } ] }); } run(msg, args) { - const { thing } = args; - return msg.say(`${msg.author} *pats* ${thing}`); + const { user } = args; + return msg.say(stripIndents` + **${msg.author.username}** *pats* **${user.username}** + https://i.imgur.com/oynHZmT.gif + `); } }; diff --git a/commands/roleplay/poke.js b/commands/roleplay/poke.js index 0927b103..62c1fd29 100644 --- a/commands/roleplay/poke.js +++ b/commands/roleplay/poke.js @@ -1,4 +1,5 @@ const Command = require('../../structures/Command'); +const { stripIndents } = require('common-tags'); module.exports = class PokeCommand extends Command { constructor(client) { @@ -6,19 +7,22 @@ module.exports = class PokeCommand extends Command { name: 'poke', group: 'roleplay', memberName: 'poke', - description: 'Pokes something/someone.', + description: 'Pokes a user.', args: [ { - key: 'thing', - prompt: 'What do you want to roleplay with?', - type: 'string' + key: 'user', + prompt: 'What user do you want to roleplay with?', + type: 'user' } ] }); } run(msg, args) { - const { thing } = args; - return msg.say(`${msg.author} *pokes* ${thing}`); + const { user } = args; + return msg.say(stripIndents` + **${msg.author.username}** *pokes* **${user.username}** + https://i.imgur.com/XMuJ7K8.gif + `); } }; diff --git a/commands/roleplay/punch.js b/commands/roleplay/punch.js index 61a601d5..5db35d66 100644 --- a/commands/roleplay/punch.js +++ b/commands/roleplay/punch.js @@ -1,4 +1,5 @@ const Command = require('../../structures/Command'); +const { stripIndents } = require('common-tags'); module.exports = class PunchCommand extends Command { constructor(client) { @@ -6,19 +7,22 @@ module.exports = class PunchCommand extends Command { name: 'punch', group: 'roleplay', memberName: 'punch', - description: 'Punches something/someone.', + description: 'Punches a user.', args: [ { - key: 'thing', - prompt: 'What do you want to roleplay with?', - type: 'string' + key: 'user', + prompt: 'What user do you want to roleplay with?', + type: 'user' } ] }); } run(msg, args) { - const { thing } = args; - return msg.say(`${msg.author} *punches* ${thing}`); + const { user } = args; + return msg.say(stripIndents` + **${msg.author.username}** *punches* **${user.username}** + https://i.imgur.com/R5KBiYV.gif + `); } }; diff --git a/commands/roleplay/slap.js b/commands/roleplay/slap.js index f395bb85..e231e37f 100644 --- a/commands/roleplay/slap.js +++ b/commands/roleplay/slap.js @@ -1,4 +1,5 @@ const Command = require('../../structures/Command'); +const { stripIndents } = require('common-tags'); module.exports = class SlapCommand extends Command { constructor(client) { @@ -6,19 +7,22 @@ module.exports = class SlapCommand extends Command { name: 'slap', group: 'roleplay', memberName: 'slap', - description: 'Slaps something/someone.', + description: 'Slaps a user.', args: [ { - key: 'thing', - prompt: 'What do you want to roleplay with?', - type: 'string' + key: 'user', + prompt: 'What user do you want to roleplay with?', + type: 'user' } ] }); } run(msg, args) { - const { thing } = args; - return msg.say(`${msg.author} *slaps* ${thing}`); + const { user } = args; + return msg.say(stripIndents` + **${msg.author.username}** *slaps* **${user.username}** + https://i.imgur.com/rfy8z2K.gif + `); } }; diff --git a/commands/search/anime.js b/commands/search/anime.js index a3f8e32c..b41059ac 100644 --- a/commands/search/anime.js +++ b/commands/search/anime.js @@ -1,6 +1,7 @@ const Command = require('../../structures/Command'); const { RichEmbed } = require('discord.js'); const snekfetch = require('snekfetch'); +const { cleanXML } = require('../../util/Util'); const { promisifyAll } = require('tsubaki'); const xml = promisifyAll(require('xml2js')); const { ANIMELIST_LOGIN } = process.env; @@ -32,14 +33,7 @@ module.exports = class AnimeCommand extends Command { q: query }); const { anime } = await xml.parseStringAsync(text); - const synopsis = anime.entry[0].synopsis[0].substr(0, 2000) - .replace(/(
)/g, '') - .replace(/(')/g, '\'') - .replace(/(—)/g, '—') - .replace(/(")/g, '"') - .replace(/(&)/g, '&') - .replace(/(")/g, '"') - .replace(/(\[i\]|\[\/i\])/g, '*'); + const synopsis = cleanXML(anime.entry[0].synopsis[0].substr(0, 2000)); const embed = new RichEmbed() .setColor(0x2D54A2) .setAuthor('My Anime List', 'https://i.imgur.com/R4bmNFz.png') @@ -47,17 +41,17 @@ module.exports = class AnimeCommand extends Command { .setThumbnail(anime.entry[0].image[0]) .setTitle(`${anime.entry[0].title[0]} (English: ${anime.entry[0].english[0] || 'N/A'})`) .setDescription(synopsis) - .addField('Type', + .addField('❯ Type', `${anime.entry[0].type[0]} - ${anime.entry[0].status[0]}`, true) - .addField('Episodes', + .addField('❯ Episodes', anime.entry[0].episodes[0], true) - .addField('Start Date', + .addField('❯ Start Date', anime.entry[0].start_date[0], true) - .addField('End Date', + .addField('❯ End Date', anime.entry[0].end_date[0], true); return msg.embed(embed); } catch (err) { - return msg.say('Error: No Results.'); + return msg.say('No Results.'); } } }; diff --git a/commands/search/bot-info.js b/commands/search/bot-info.js index 7a3a08b5..95b9ce55 100644 --- a/commands/search/bot-info.js +++ b/commands/search/bot-info.js @@ -26,22 +26,24 @@ module.exports = class BotSearchCommand extends Command { try { const { body } = await snekfetch .get(`https://bots.discord.pw/api/bots/${bot.id}`) - .set({ Authorization: DBOTS_KEY }); + .set({ + Authorization: DBOTS_KEY + }); const embed = new RichEmbed() .setColor(0x9797FF) .setAuthor('Discord Bots', 'https://i.imgur.com/lrKYBQi.jpg') .setTitle(body.name) .setURL(`https://bots.discord.pw/bots/${bot.id}`) .setDescription(body.description) - .addField('Library', + .addField('❯ Library', body.library, true) - .addField('Invite', + .addField('❯ Invite', `[Here](${body.invite_url})`, true) - .addField('Prefix', + .addField('❯ Prefix', body.prefix, true); return msg.embed(embed); } catch (err) { - return msg.say(`${err.name}: ${err.message}`); + return msg.say(err.message); } } }; diff --git a/commands/search/bulbapedia.js b/commands/search/bulbapedia.js index 48616fba..14f78a3c 100644 --- a/commands/search/bulbapedia.js +++ b/commands/search/bulbapedia.js @@ -23,28 +23,26 @@ module.exports = class BulbapediaCommand extends Command { async run(msg, args) { const { query } = args; - try { - const { body } = await snekfetch - .get('http://bulbapedia.bulbagarden.net/w/api.php') - .query({ - action: 'query', - prop: 'extracts', - format: 'json', - titles: query, - exintro: '', - explaintext: '', - redirects: '', - formatversion: 2 - }); - if (body.query.pages[0].missing) throw new Error('No Results.'); - const embed = new RichEmbed() - .setColor(0x3E7614) - .setTitle(body.query.pages[0].title) - .setAuthor('Bulbapedia', 'https://i.imgur.com/09eYo5T.png') - .setDescription(body.query.pages[0].extract.substr(0, 2000).replace(/[\n]/g, '\n\n')); - return msg.embed(embed); - } catch (err) { - return msg.say(`${err.name}: ${err.message}`); + const { body } = await snekfetch + .get('http://bulbapedia.bulbagarden.net/w/api.php') + .query({ + action: 'query', + prop: 'extracts', + format: 'json', + titles: query, + exintro: '', + explaintext: '', + redirects: '', + formatversion: 2 + }); + if (body.query.pages[0].missing) { + return msg.say('No Results.'); } + const embed = new RichEmbed() + .setColor(0x3E7614) + .setTitle(body.query.pages[0].title) + .setAuthor('Bulbapedia', 'https://i.imgur.com/09eYo5T.png') + .setDescription(body.query.pages[0].extract.substr(0, 2000).replace(/[\n]/g, '\n\n')); + return msg.embed(embed); } }; diff --git a/commands/search/danbooru.js b/commands/search/danbooru.js index af5c0cf2..3042c28f 100644 --- a/commands/search/danbooru.js +++ b/commands/search/danbooru.js @@ -22,18 +22,15 @@ module.exports = class DanbooruCommand extends Command { async run(msg, args) { const { query } = args; - try { - const { body } = await snekfetch - .get('https://danbooru.donmai.us/posts.json') - .query({ - tags: `${query ? `${query} ` : ''}order:random`, - limit: 1 - }); - if (!body.length) throw new Error('No Results.'); - if (!body[0].file_url) throw new Error('No Results.'); - return msg.say(`${query ? `Result for ${query}:` : 'Random Image:'} https://danbooru.donmai.us${body[0].file_url}`); - } catch (err) { - return msg.say(`${err.name}: ${err.message}`); + const { body } = await snekfetch + .get('https://danbooru.donmai.us/posts.json') + .query({ + tags: `${query ? `${query} ` : ''}order:random`, + limit: 1 + }); + if (!body.length || !body[0].file_url) { + return msg.say('No Results'); } + return msg.say(`${query ? `Result for ${query}:` : 'Random Image:'} https://danbooru.donmai.us${body[0].file_url}`); } }; diff --git a/commands/search/define.js b/commands/search/define.js index 3f10d314..ac5bb910 100644 --- a/commands/search/define.js +++ b/commands/search/define.js @@ -16,7 +16,7 @@ module.exports = class DefineCommand extends Command { key: 'query', prompt: 'What would you like to define?', type: 'string', - parse: query => encodeURIComponent(query) + parse: (query) => encodeURIComponent(query) } ] }); @@ -24,23 +24,21 @@ module.exports = class DefineCommand extends Command { async run(msg, args) { const { query } = args; - try { - const { body } = await snekfetch - .get(`http://api.wordnik.com:80/v4/word.json/${query}/definitions`) - .query({ - limit: 1, - includeRelated: false, - useCanonical: false, - api_key: WORDNIK_KEY - }); - if (!body.length) throw new Error('No Results.'); - const embed = new RichEmbed() - .setColor(0x9797FF) - .setTitle(body[0].word) - .setDescription(body[0].text); - return msg.embed(embed); - } catch (err) { - return msg.say(`${err.name}: ${err.message}`); + const { body } = await snekfetch + .get(`http://api.wordnik.com:80/v4/word.json/${query}/definitions`) + .query({ + limit: 1, + includeRelated: false, + useCanonical: false, + api_key: WORDNIK_KEY + }); + if (!body.length) { + return msg.say('No Results.'); } + const embed = new RichEmbed() + .setColor(0x9797FF) + .setTitle(body[0].word) + .setDescription(body[0].text); + return msg.embed(embed); } }; diff --git a/commands/search/discrim.js b/commands/search/discrim.js index ef57cb46..946c490e 100644 --- a/commands/search/discrim.js +++ b/commands/search/discrim.js @@ -15,9 +15,13 @@ module.exports = class DiscrimCommand extends Command { key: 'discrim', prompt: 'Which discriminator would you like to search for?', type: 'string', - validate: discrim => { - if (/[0-9]+$/g.test(discrim) && discrim.length === 4) return true; - return `${discrim} is not a valid discriminator.`; + default: '', + validate: (discrim) => { + if (/[0-9]+$/g.test(discrim) && discrim.length === 4) { + return true; + } else { + return 'Invalid Discriminator.'; + } } } ] @@ -25,8 +29,8 @@ module.exports = class DiscrimCommand extends Command { } run(msg, args) { - const { discrim } = args; - const users = this.client.users.filter(u => u.discriminator === discrim).map(u => u.username).sort(); + const discrim = args.discrim || msg.author.discriminator; + const users = this.client.users.filter((u) => u.discriminator === discrim).map((u) => u.username); const embed = new RichEmbed() .setTitle(`${users.length} Users with the discriminator: ${discrim}`) .setDescription(users.join(', ')); diff --git a/commands/search/forecast.js b/commands/search/forecast.js index 16188d59..f04f2dea 100644 --- a/commands/search/forecast.js +++ b/commands/search/forecast.js @@ -22,37 +22,35 @@ module.exports = class ForecastCommand extends Command { async run(msg, args) { const { query } = args; - try { - const { body } = await snekfetch - .get('https://query.yahooapis.com/v1/public/yql') - .query({ - q: `select * from weather.forecast where u=\'f\' AND woeid in (select woeid from geo.places(1) where text="${query}")`, - format: 'json' - }); - if (!body.query.count) throw new Error('Location Not Found.'); - const forecasts = body.query.results.channel.item.forecast; - const embed = new RichEmbed() - .setColor(0x0000FF) - .setAuthor(body.query.results.channel.title, 'https://i.imgur.com/2MT0ViC.png') - .setURL(body.query.results.channel.link) - .setTimestamp() - .addField(`${forecasts[0].day} - ${forecasts[0].date}`, - `**High:** ${forecasts[0].high}°F, **Low:** ${forecasts[0].low}°F, **Condition:** ${forecasts[0].text}`) - .addField(`${forecasts[1].day} - ${forecasts[1].date}`, - `**High:** ${forecasts[1].high}°F, **Low:** ${forecasts[1].low}°F, **Condition:** ${forecasts[1].text}`) - .addField(`${forecasts[2].day} - ${forecasts[2].date}`, - `**High:** ${forecasts[2].high}°F, **Low:** ${forecasts[2].low}°F, **Condition:** ${forecasts[2].text}`) - .addField(`${forecasts[3].day} - ${forecasts[3].date}`, - `**High:** ${forecasts[3].high}°F, **Low:** ${forecasts[3].low}°F, **Condition:** ${forecasts[3].text}`) - .addField(`${forecasts[4].day} - ${forecasts[4].date}`, - `**High:** ${forecasts[4].high}°F, **Low:** ${forecasts[4].low}°F, **Condition:** ${forecasts[4].text}`) - .addField(`${forecasts[5].day} - ${forecasts[5].date}`, - `**High:** ${forecasts[5].high}°F, **Low:** ${forecasts[5].low}°F, **Condition:** ${forecasts[5].text}`) - .addField(`${forecasts[6].day} - ${forecasts[6].date}`, - `**High:** ${forecasts[6].high}°F, **Low:** ${forecasts[6].low}°F, **Condition:** ${forecasts[6].text}`); - return msg.embed(embed); - } catch (err) { - return msg.say(`${err.name}: ${err.message}`); + const { body } = await snekfetch + .get('https://query.yahooapis.com/v1/public/yql') + .query({ + q: `select * from weather.forecast where u=\'f\' AND woeid in (select woeid from geo.places(1) where text="${query}")`, + format: 'json' + }); + if (!body.query.count) { + return msg.say('Location Not Found.'); } + const forecasts = body.query.results.channel.item.forecast; + const embed = new RichEmbed() + .setColor(0x0000FF) + .setAuthor(body.query.results.channel.title, 'https://i.imgur.com/2MT0ViC.png') + .setURL(body.query.results.channel.link) + .setTimestamp() + .addField(`❯ ${forecasts[0].day} - ${forecasts[0].date}`, + `**High:** ${forecasts[0].high}°F, **Low:** ${forecasts[0].low}°F, **Condition:** ${forecasts[0].text}`) + .addField(`❯ ${forecasts[1].day} - ${forecasts[1].date}`, + `**High:** ${forecasts[1].high}°F, **Low:** ${forecasts[1].low}°F, **Condition:** ${forecasts[1].text}`) + .addField(`❯ ${forecasts[2].day} - ${forecasts[2].date}`, + `**High:** ${forecasts[2].high}°F, **Low:** ${forecasts[2].low}°F, **Condition:** ${forecasts[2].text}`) + .addField(`❯ ${forecasts[3].day} - ${forecasts[3].date}`, + `**High:** ${forecasts[3].high}°F, **Low:** ${forecasts[3].low}°F, **Condition:** ${forecasts[3].text}`) + .addField(`❯ ${forecasts[4].day} - ${forecasts[4].date}`, + `**High:** ${forecasts[4].high}°F, **Low:** ${forecasts[4].low}°F, **Condition:** ${forecasts[4].text}`) + .addField(`❯ ${forecasts[5].day} - ${forecasts[5].date}`, + `**High:** ${forecasts[5].high}°F, **Low:** ${forecasts[5].low}°F, **Condition:** ${forecasts[5].text}`) + .addField(`❯ ${forecasts[6].day} - ${forecasts[6].date}`, + `**High:** ${forecasts[6].high}°F, **Low:** ${forecasts[6].low}°F, **Condition:** ${forecasts[6].text}`); + return msg.embed(embed); } }; diff --git a/commands/search/gelbooru.js b/commands/search/gelbooru.js index 2218d799..f4eab674 100644 --- a/commands/search/gelbooru.js +++ b/commands/search/gelbooru.js @@ -23,7 +23,6 @@ module.exports = class GelbooruCommand extends Command { async run(msg, args) { const { query } = args; - try { const { text } = await snekfetch .get('https://gelbooru.com/index.php') .query({ @@ -34,10 +33,9 @@ module.exports = class GelbooruCommand extends Command { limit: 1 }); const { posts } = await xml.parseStringAsync(text); - if (posts.$.count === '0') throw new Error('No Results.'); + if (posts.$.count === '0') { + return msg.say('No Results.'); + } return msg.say(`Result for ${query}: https:${posts.post[0].$.file_url}`); - } catch (err) { - return msg.say(`${err.name}: ${err.message}`); - } } }; diff --git a/commands/search/giphy.js b/commands/search/giphy.js index 4c53c13d..378dbeba 100644 --- a/commands/search/giphy.js +++ b/commands/search/giphy.js @@ -21,19 +21,17 @@ module.exports = class GiphyCommand extends Command { async run(msg, args) { const { query } = args; - try { - const { body } = await snekfetch - .get('http://api.giphy.com/v1/gifs/search') - .query({ - q: query, - api_key: GIPHY_KEY, - rating: msg.channel.nsfw ? 'r' : 'pg' - }); - if (!body.data.length) throw new Error('No Results.'); - const random = Math.floor(Math.random() * body.data.length); - return msg.say(body.data[random].images.original.url); - } catch (err) { - return msg.say(`${err.name}: ${err.message}`); + const { body } = await snekfetch + .get('http://api.giphy.com/v1/gifs/search') + .query({ + q: query, + api_key: GIPHY_KEY, + rating: msg.channel.nsfw ? 'r' : 'pg' + }); + if (!body.data.length) { + return msg.say('No Results.'); } + const random = Math.floor(Math.random() * body.data.length); + return msg.say(body.data[random].images.original.url); } }; diff --git a/commands/search/github.js b/commands/search/github.js index b4f1d17d..bce9e9ed 100644 --- a/commands/search/github.js +++ b/commands/search/github.js @@ -34,21 +34,21 @@ module.exports = class GithubCommand extends Command { .setTitle(body.full_name) .setDescription(body.description) .setThumbnail(body.owner.avatar_url) - .addField('Creation Date', + .addField('❯ Creation Date', moment(body.created_at).format('MMMM Do YYYY'), true) - .addField('Last Updated On', + .addField('❯ Last Updated On', moment(body.updated_at).format('MMMM Do YYYY'), true) - .addField('Stargazers', + .addField('❯ Stargazers', body.stargazers_count, true) - .addField('Watchers', + .addField('❯ Watchers', body.watchers_count, true) - .addField('Open Issues', + .addField('❯ Open Issues', body.open_issues_count, true) - .addField('Language', + .addField('❯ Language', body.language, true); return msg.embed(embed); } catch (err) { - return msg.say(`${err.name}: ${err.message}`); + return msg.say(err.message); } } }; diff --git a/commands/search/google.js b/commands/search/google.js index 75eb4e5f..a385125b 100644 --- a/commands/search/google.js +++ b/commands/search/google.js @@ -23,19 +23,17 @@ module.exports = class GoogleCommand extends Command { async run(msg, args) { const { query } = args; const message = await msg.say('Searching...'); - try { - const { text } = await snekfetch - .get('https://www.google.com/search') - .query({ - q: query - }); - const $ = cheerio.load(text); - let href = $('.r').first().find('a').first().attr('href'); - if (!href) throw new Error('No Results.'); - href = querystring.parse(href.replace('/url?', '')); - return message.edit(href.q); - } catch (err) { - return message.edit(`${err.name}: ${err.message}`); + const { text } = await snekfetch + .get('https://www.google.com/search') + .query({ + q: query + }); + const $ = cheerio.load(text); + let href = $('.r').first().find('a').first().attr('href'); + if (!href) { + return msg.say('No Results.'); } + href = querystring.parse(href.replace('/url?', '')); + return message.edit(href.q); } }; diff --git a/commands/search/konachan.js b/commands/search/konachan.js index 96912807..0eecde46 100644 --- a/commands/search/konachan.js +++ b/commands/search/konachan.js @@ -22,17 +22,15 @@ module.exports = class KonachanCommand extends Command { async run(msg, args) { const { query } = args; - try { - const { body } = await snekfetch - .get('https://konachan.net/post.json') - .query({ - tags: `${query ? `${query} ` : ''}order:random`, - limit: 1 - }); - if (!body.length) throw new Error('No Results.'); - return msg.say(`${query ? `Result for ${query}:` : 'Random Image:'} https:${body[0].file_url}`); - } catch (err) { - return msg.say(`${err.name}: ${err.message}`); + const { body } = await snekfetch + .get('https://konachan.net/post.json') + .query({ + tags: `${query ? `${query} ` : ''}order:random`, + limit: 1 + }); + if (!body.length) { + return msg.say('No Results.'); } + return msg.say(`${query ? `Result for ${query}:` : 'Random Image:'} https:${body[0].file_url}`); } }; diff --git a/commands/search/lmgtfy.js b/commands/search/lmgtfy.js index 2ddc3718..e22f2e95 100644 --- a/commands/search/lmgtfy.js +++ b/commands/search/lmgtfy.js @@ -12,7 +12,7 @@ module.exports = class LMGTFYCommand extends Command { key: 'query', prompt: 'What would you like to the link to search for?', type: 'string', - parse: query => encodeURIComponent(query) + parse: (query) => encodeURIComponent(query) } ] }); diff --git a/commands/search/manga.js b/commands/search/manga.js index b3ad39fc..7b64faf4 100644 --- a/commands/search/manga.js +++ b/commands/search/manga.js @@ -1,6 +1,7 @@ const Command = require('../../structures/Command'); const { RichEmbed } = require('discord.js'); const snekfetch = require('snekfetch'); +const { cleanXML } = require('../../util/Util'); const { promisifyAll } = require('tsubaki'); const xml = promisifyAll(require('xml2js')); const { ANIMELIST_LOGIN } = process.env; @@ -32,14 +33,7 @@ module.exports = class MangaCommand extends Command { q: query }); const { manga } = await xml.parseStringAsync(text); - const synopsis = manga.entry[0].synopsis[0].substr(0, 2000) - .replace(/(
)/g, '') - .replace(/(')/g, '\'') - .replace(/(—)/g, '—') - .replace(/(")/g, '"') - .replace(/(&)/g, '&') - .replace(/(")/g, '"') - .replace(/(\[i\]|\[\/i\])/g, '*'); + const synopsis = cleanXML(manga.entry[0].synopsis[0].substr(0, 2000)); const embed = new RichEmbed() .setColor(0x2D54A2) .setAuthor('My Anime List', 'https://i.imgur.com/R4bmNFz.png') @@ -47,17 +41,17 @@ module.exports = class MangaCommand extends Command { .setThumbnail(manga.entry[0].image[0]) .setTitle(`${manga.entry[0].title[0]} (English: ${manga.entry[0].english[0] || 'N/A'})`) .setDescription(synopsis) - .addField('Type', + .addField('❯ Type', `${manga.entry[0].type[0]} - ${manga.entry[0].status[0]}`, true) - .addField('Volumes / Chapters', + .addField('❯ Volumes / Chapters', `${manga.entry[0].volumes[0]} / ${manga.entry[0].chapters[0]}`, true) - .addField('Start Date', + .addField('❯ Start Date', manga.entry[0].start_date[0], true) - .addField('End Date', + .addField('❯ End Date', manga.entry[0].end_date[0], true); return msg.embed(embed); } catch (err) { - return msg.say('Error: No Results.'); + return msg.say('No Results.'); } } }; diff --git a/commands/search/map.js b/commands/search/map.js index 7b07cf28..0791cdd8 100644 --- a/commands/search/map.js +++ b/commands/search/map.js @@ -16,10 +16,12 @@ module.exports = class MapCommand extends Command { label: 'zoom level', prompt: 'What would you like the zoom level for the map to be? Limit 1-20.', type: 'integer', - validate: zoom => { - if (zoom < 21 && zoom > 0) + validate: (zoom) => { + if (zoom < 21 && zoom > 0) { return true; - return 'Please enter a zoom value from 1-20'; + } else { + return 'Please enter a zoom value from 1-20'; + } } }, { @@ -33,19 +35,14 @@ module.exports = class MapCommand extends Command { async run(msg, args) { const { zoom, query } = args; - try { - const { body } = await snekfetch - .get('https://maps.googleapis.com/maps/api/staticmap') - .query({ - center: query, - zoom, - size: '500x500', - key: GOOGLE_KEY - }); - return msg.say({ files: [{ attachment: body, name: 'map.png' }] }) - .catch(err => msg.say(`${err.name}: ${err.message}`)); - } catch (err) { - return msg.say(`${err.name}: ${err.message}`); - } + const { body } = await snekfetch + .get('https://maps.googleapis.com/maps/api/staticmap') + .query({ + center: query, + zoom, + size: '500x500', + key: GOOGLE_KEY + }); + return msg.say({ files: [{ attachment: body, name: 'map.png' }] }); } }; diff --git a/commands/search/neopet.js b/commands/search/neopet.js index 35e17b2f..f1f51109 100644 --- a/commands/search/neopet.js +++ b/commands/search/neopet.js @@ -21,20 +21,18 @@ module.exports = class NeopetCommand extends Command { async run(msg, args) { const { query } = args; - try { - const { text } = await snekfetch - .get('http://www.sunnyneo.com/petimagefinder.php') - .query({ - name: query, - size: 5, - mood: 1 - }); - const $ = cheerio.load(text); - const link = $('textarea').first().text(); - if (!link.includes('cp')) throw new Error('Invalid Pet Name.'); - return msg.say(link); - } catch (err) { - return msg.say(`${err.name}: ${err.message}`); + const { text } = await snekfetch + .get('http://www.sunnyneo.com/petimagefinder.php') + .query({ + name: query, + size: 5, + mood: 1 + }); + const $ = cheerio.load(text); + const link = $('textarea').first().text(); + if (!link.includes('cp')) { + return msg.say('Invalid Pet Name.'); } + return msg.say(link); } }; diff --git a/commands/search/osu.js b/commands/search/osu.js index 4803904f..d857b45f 100644 --- a/commands/search/osu.js +++ b/commands/search/osu.js @@ -23,46 +23,44 @@ module.exports = class OsuCommand extends Command { async run(msg, args) { const { query } = args; - try { - const { body } = await snekfetch - .get('https://osu.ppy.sh/api/get_user') - .query({ - k: OSU_KEY, - u: query, - type: 'string' - }); - if (!body.length) throw new Error('No Results.'); - const embed = new RichEmbed() - .setColor(0xFF66AA) - .setAuthor('osu!', 'https://i.imgur.com/EmnUp00.png') - .setURL('https://osu.ppy.sh/') - .addField('Username', - body[0].username, true) - .addField('ID', - body[0].user_id, true) - .addField('Level', - body[0].level, true) - .addField('Accuracy', - body[0].accuracy, true) - .addField('Rank', - body[0].pp_rank, true) - .addField('Play Count', - body[0].playcount, true) - .addField('Country', - body[0].country, true) - .addField('Ranked Score', - body[0].ranked_score, true) - .addField('Total Score', - body[0].total_score, true) - .addField('SS', - body[0].count_rank_ss, true) - .addField('S', - body[0].count_rank_s, true) - .addField('A', - body[0].count_rank_a, true); - return msg.embed(embed); - } catch (err) { - return msg.say(`${err.name}: ${err.message}`); + const { body } = await snekfetch + .get('https://osu.ppy.sh/api/get_user') + .query({ + k: OSU_KEY, + u: query, + type: 'string' + }); + if (!body.length) { + return msg.say('No Results.'); } + const embed = new RichEmbed() + .setColor(0xFF66AA) + .setAuthor('osu!', 'https://i.imgur.com/EmnUp00.png') + .setURL('https://osu.ppy.sh/') + .addField('❯ Username', + body[0].username, true) + .addField('❯ ID', + body[0].user_id, true) + .addField('❯ Level', + body[0].level, true) + .addField('❯ Accuracy', + body[0].accuracy, true) + .addField('❯ Rank', + body[0].pp_rank, true) + .addField('❯ Play Count', + body[0].playcount, true) + .addField('❯ Country', + body[0].country, true) + .addField('❯ Ranked Score', + body[0].ranked_score, true) + .addField('❯ Total Score', + body[0].total_score, true) + .addField('❯ SS', + body[0].count_rank_ss, true) + .addField('❯ S', + body[0].count_rank_s, true) + .addField('❯ A', + body[0].count_rank_a, true); + return msg.embed(embed); } }; diff --git a/commands/search/rule34.js b/commands/search/rule34.js index 951a8c7e..b19679e2 100644 --- a/commands/search/rule34.js +++ b/commands/search/rule34.js @@ -23,21 +23,19 @@ module.exports = class Rule34Command extends Command { async run(msg, args) { const { query } = args; - try { - const { text } = await snekfetch - .get('https://rule34.xxx/index.php') - .query({ - page: 'dapi', - s: 'post', - q: 'index', - tags: query, - limit: 1 - }); - const { posts } = await xml.parseStringAsync(text); - if (posts.$.count === '0') throw new Error('No Results.'); - return msg.say(`Result for ${query}: https:${posts.post[0].$.file_url}`); - } catch (err) { - return msg.say(`${err.name}: ${err.message}`); + const { text } = await snekfetch + .get('https://rule34.xxx/index.php') + .query({ + page: 'dapi', + s: 'post', + q: 'index', + tags: query, + limit: 1 + }); + const { posts } = await xml.parseStringAsync(text); + if (posts.$.count === '0') { + return msg.say('No Results.'); } + return msg.say(`Result for ${query}: https:${posts.post[0].$.file_url}`); } }; diff --git a/commands/search/soundcloud.js b/commands/search/soundcloud.js index cc2b2aa7..1154ae22 100644 --- a/commands/search/soundcloud.js +++ b/commands/search/soundcloud.js @@ -23,33 +23,31 @@ module.exports = class SoundCloudCommand extends Command { async run(msg, args) { const { query } = args; - try { - const { body } = await snekfetch - .get('https://api.soundcloud.com/tracks') - .query({ - q: query, - client_id: SOUNDCLOUD_KEY - }); - if (!body.length) throw new Error('No Results.'); - const embed = new RichEmbed() - .setColor(0xF15A22) - .setAuthor('SoundCloud', 'https://i.imgur.com/lFIz7RU.png') - .setTitle(body[0].title) - .setURL(body[0].permalink_url) - .setThumbnail(body[0].artwork_url) - .addField('Artist', - body[0].user.username) - .addField('Download Count', - body[0].download_count, true) - .addField('Comment Count', - body[0].comment_count, true) - .addField('Playback Count', - body[0].playback_count, true) - .addField('Favorited Count', - body[0].favoritings_count, true); - return msg.embed(embed); - } catch (err) { - return msg.say(`${err.name}: ${err.message}`); + const { body } = await snekfetch + .get('https://api.soundcloud.com/tracks') + .query({ + q: query, + client_id: SOUNDCLOUD_KEY + }); + if (!body.length) { + return msg.say('No Results.'); } + const embed = new RichEmbed() + .setColor(0xF15A22) + .setAuthor('SoundCloud', 'https://i.imgur.com/lFIz7RU.png') + .setTitle(body[0].title) + .setURL(body[0].permalink_url) + .setThumbnail(body[0].artwork_url) + .addField('❯ Artist', + body[0].user.username) + .addField('❯ Download Count', + body[0].download_count, true) + .addField('❯ Comment Count', + body[0].comment_count, true) + .addField('❯ Playback Count', + body[0].playback_count, true) + .addField('❯ Favorited Count', + body[0].favoritings_count, true); + return msg.embed(embed); } }; diff --git a/commands/search/urban.js b/commands/search/urban.js index e8285bbd..b08f54c3 100644 --- a/commands/search/urban.js +++ b/commands/search/urban.js @@ -22,24 +22,22 @@ module.exports = class UrbanCommand extends Command { async run(msg, args) { const { query } = args; - try { - const { body } = await snekfetch - .get('http://api.urbandictionary.com/v0/define') - .query({ - term: query - }); - if (!body.list.length) throw new Error('No Results.'); - const embed = new RichEmbed() - .setColor(0x32a8f0) - .setAuthor('Urban Dictionary', 'https://i.imgur.com/fzFuuL7.png') - .setURL(body.list[0].permalink) - .setTitle(body.list[0].word) - .setDescription(body.list[0].definition.substr(0, 2000)) - .addField('Example', - body.list[0].example.substr(0, 2000) || 'None'); - return msg.embed(embed); - } catch (err) { - return msg.say(`${err.name}: ${err.message}`); + const { body } = await snekfetch + .get('http://api.urbandictionary.com/v0/define') + .query({ + term: query + }); + if (!body.list.length) { + return msg.say('No Results.'); } + const embed = new RichEmbed() + .setColor(0x32a8f0) + .setAuthor('Urban Dictionary', 'https://i.imgur.com/fzFuuL7.png') + .setURL(body.list[0].permalink) + .setTitle(body.list[0].word) + .setDescription(body.list[0].definition.substr(0, 2000)) + .addField('❯ Example', + body.list[0].example.substr(0, 2000) || 'None'); + return msg.embed(embed); } }; diff --git a/commands/search/wattpad.js b/commands/search/wattpad.js index 064c14d6..310e9a63 100644 --- a/commands/search/wattpad.js +++ b/commands/search/wattpad.js @@ -24,37 +24,37 @@ module.exports = class WattpadCommand extends Command { async run(msg, args) { const { query } = args; - try { - const { body } = await snekfetch - .get('https://api.wattpad.com:443/v4/stories') - .query({ - query, - limit: 1 - }) - .set({ Authorization: `Basic ${WATTPAD_KEY}` }); - if (!body.stories.length) throw new Error('No Results.'); - const embed = new RichEmbed() - .setColor(0xF89C34) - .setAuthor('Wattpad', 'https://i.imgur.com/Rw9vRQB.png') - .setURL(body.stories[0].url) - .setTitle(body.stories[0].title) - .setDescription(body.stories[0].description.substr(0, 2000)) - .setThumbnail(body.stories[0].cover) - .addField('Created On', - moment(body.stories[0].createDate).format('MMMM Do YYYY'), true) - .addField('Author', - body.stories[0].user, true) - .addField('Parts', - body.stories[0].numParts, true) - .addField('Reads', - body.stories[0].readCount, true) - .addField('Votes', - body.stories[0].voteCount, true) - .addField('Comments', - body.stories[0].commentCount, true); - return msg.embed(embed); - } catch (err) { - return msg.say(`${err.name}: ${err.message}`); + const { body } = await snekfetch + .get('https://api.wattpad.com:443/v4/stories') + .query({ + query, + limit: 1 + }) + .set({ + Authorization: `Basic ${WATTPAD_KEY}` + }); + if (!body.stories.length) { + return msg.say('No Results.'); } + const embed = new RichEmbed() + .setColor(0xF89C34) + .setAuthor('Wattpad', 'https://i.imgur.com/Rw9vRQB.png') + .setURL(body.stories[0].url) + .setTitle(body.stories[0].title) + .setDescription(body.stories[0].description.substr(0, 2000)) + .setThumbnail(body.stories[0].cover) + .addField('❯ Created On', + moment(body.stories[0].createDate).format('MMMM Do YYYY'), true) + .addField('❯ Author', + body.stories[0].user, true) + .addField('❯ Parts', + body.stories[0].numParts, true) + .addField('❯ Reads', + body.stories[0].readCount, true) + .addField('❯ Votes', + body.stories[0].voteCount, true) + .addField('❯ Comments', + body.stories[0].commentCount, true); + return msg.embed(embed); } }; diff --git a/commands/search/weather.js b/commands/search/weather.js index 7f9971d5..de9b739b 100644 --- a/commands/search/weather.js +++ b/commands/search/weather.js @@ -22,46 +22,44 @@ module.exports = class WeatherCommand extends Command { async run(msg, args) { const { query } = args; - try { - const { body } = await snekfetch - .get('https://query.yahooapis.com/v1/public/yql') - .query({ - q: `select * from weather.forecast where u=\'f\' AND woeid in (select woeid from geo.places(1) where text="${query}")`, - format: 'json' - }); - if (!body.query.count) throw new Error('Location Not Found.'); - const embed = new RichEmbed() - .setColor(0x0000FF) - .setAuthor(body.query.results.channel.title, 'https://i.imgur.com/2MT0ViC.png') - .setURL(body.query.results.channel.link) - .setTimestamp() - .addField('City', - body.query.results.channel.location.city, true) - .addField('Country', - body.query.results.channel.location.country, true) - .addField('Region', - body.query.results.channel.location.region, true) - .addField('Condition', - body.query.results.channel.item.condition.text, true) - .addField('Temperature', - `${body.query.results.channel.item.condition.temp}°F`, true) - .addField('Humidity', - body.query.results.channel.atmosphere.humidity, true) - .addField('Pressure', - body.query.results.channel.atmosphere.pressure, true) - .addField('Rising', - body.query.results.channel.atmosphere.rising, true) - .addField('Visibility', - body.query.results.channel.atmosphere.visibility, true) - .addField('Wind Chill', - body.query.results.channel.wind.chill, true) - .addField('Wind Direction', - body.query.results.channel.wind.direction, true) - .addField('Wind Speed', - body.query.results.channel.wind.speed, true); - return msg.embed(embed); - } catch (err) { - return msg.say(`${err.name}: ${err.message}`); + const { body } = await snekfetch + .get('https://query.yahooapis.com/v1/public/yql') + .query({ + q: `select * from weather.forecast where u=\'f\' AND woeid in (select woeid from geo.places(1) where text="${query}")`, + format: 'json' + }); + if (!body.query.count) { + return msg.say('Location Not Found.'); } + const embed = new RichEmbed() + .setColor(0x0000FF) + .setAuthor(body.query.results.channel.title, 'https://i.imgur.com/2MT0ViC.png') + .setURL(body.query.results.channel.link) + .setTimestamp() + .addField('❯ City', + body.query.results.channel.location.city, true) + .addField('❯ Country', + body.query.results.channel.location.country, true) + .addField('❯ Region', + body.query.results.channel.location.region, true) + .addField('❯ Condition', + body.query.results.channel.item.condition.text, true) + .addField('❯ Temperature', + `${body.query.results.channel.item.condition.temp}°F`, true) + .addField('❯ Humidity', + body.query.results.channel.atmosphere.humidity, true) + .addField('❯ Pressure', + body.query.results.channel.atmosphere.pressure, true) + .addField('❯ Rising', + body.query.results.channel.atmosphere.rising, true) + .addField('❯ Visibility', + body.query.results.channel.atmosphere.visibility, true) + .addField('❯ Wind Chill', + body.query.results.channel.wind.chill, true) + .addField('❯ Wind Direction', + body.query.results.channel.wind.direction, true) + .addField('❯ Wind Speed', + body.query.results.channel.wind.speed, true); + return msg.embed(embed); } }; diff --git a/commands/search/wikipedia.js b/commands/search/wikipedia.js index c8b87a26..035f1fd6 100644 --- a/commands/search/wikipedia.js +++ b/commands/search/wikipedia.js @@ -22,28 +22,26 @@ module.exports = class WikipediaCommand extends Command { async run(msg, args) { const { query } = args; - try { - const { body } = await snekfetch - .get('https://en.wikipedia.org/w/api.php') - .query({ - action: 'query', - prop: 'extracts', - format: 'json', - titles: query, - exintro: '', - explaintext: '', - redirects: '', - formatversion: 2 - }); - if (body.query.pages[0].missing) throw new Error('No Results.'); - const embed = new RichEmbed() - .setColor(0xE7E7E7) - .setTitle(body.query.pages[0].title) - .setAuthor('Wikipedia', 'https://i.imgur.com/a4eeEhh.png') - .setDescription(body.query.pages[0].extract.substr(0, 2000).replace(/[\n]/g, '\n\n')); - return msg.embed(embed); - } catch (err) { - return msg.say(`${err.name}: ${err.message}`); + const { body } = await snekfetch + .get('https://en.wikipedia.org/w/api.php') + .query({ + action: 'query', + prop: 'extracts', + format: 'json', + titles: query, + exintro: '', + explaintext: '', + redirects: '', + formatversion: 2 + }); + if (body.query.pages[0].missing) { + return msg.say('No Results.'); } + const embed = new RichEmbed() + .setColor(0xE7E7E7) + .setTitle(body.query.pages[0].title) + .setAuthor('Wikipedia', 'https://i.imgur.com/a4eeEhh.png') + .setDescription(body.query.pages[0].extract.substr(0, 2000).replace(/[\n]/g, '\n\n')); + return msg.embed(embed); } }; diff --git a/commands/search/youtube.js b/commands/search/youtube.js index 6d5c6f02..e86010c7 100644 --- a/commands/search/youtube.js +++ b/commands/search/youtube.js @@ -23,27 +23,25 @@ module.exports = class YouTubeCommand extends Command { async run(msg, args) { const { query } = args; - try { - const { body } = await snekfetch - .get('https://www.googleapis.com/youtube/v3/search') - .query({ - part: 'snippet', - type: 'video', - maxResults: 1, - q: query, - key: GOOGLE_KEY - }); - if (!body.items.length) throw new Error('No Results.'); - const embed = new RichEmbed() - .setColor(0xDD2825) - .setTitle(body.items[0].snippet.title) - .setDescription(body.items[0].snippet.description) - .setAuthor(`YouTube - ${body.items[0].snippet.channelTitle}`, 'https://i.imgur.com/hkUafwu.png') - .setURL(`https://www.youtube.com/watch?v=${body.items[0].id.videoId}`) - .setThumbnail(body.items[0].snippet.thumbnails.default.url); - return msg.embed(embed); - } catch (err) { - return msg.say(`${err.name}: ${err.message}`); + const { body } = await snekfetch + .get('https://www.googleapis.com/youtube/v3/search') + .query({ + part: 'snippet', + type: 'video', + maxResults: 1, + q: query, + key: GOOGLE_KEY + }); + if (!body.items.length) { + return msg.say('No Results.'); } + const embed = new RichEmbed() + .setColor(0xDD2825) + .setTitle(body.items[0].snippet.title) + .setDescription(body.items[0].snippet.description) + .setAuthor(`YouTube - ${body.items[0].snippet.channelTitle}`, 'https://i.imgur.com/hkUafwu.png') + .setURL(`https://www.youtube.com/watch?v=${body.items[0].id.videoId}`) + .setThumbnail(body.items[0].snippet.thumbnails.default.url); + return msg.embed(embed); } }; diff --git a/commands/search/yu-gi-oh.js b/commands/search/yu-gi-oh.js index 6bf40559..93503cd7 100644 --- a/commands/search/yu-gi-oh.js +++ b/commands/search/yu-gi-oh.js @@ -15,7 +15,7 @@ module.exports = class YuGiOhCommand extends Command { key: 'query', prompt: 'What card would you like to get data for?', type: 'string', - parse: text => encodeURIComponent(text) + parse: (text) => encodeURIComponent(text) } ] }); @@ -23,32 +23,31 @@ module.exports = class YuGiOhCommand extends Command { async run(msg, args) { const { query } = args; - try { - const { body } = await snekfetch - .get(`http://yugiohprices.com/api/card_data/${query}`); - if (body.status === 'fail') throw new Error('No Results.'); - const embed = new RichEmbed() - .setColor(0xBE5F1F) - .setTitle(body.data.name) - .setDescription(body.data.text) - .setAuthor('Yu-Gi-Oh!', 'https://i.imgur.com/7gPm9Rr.png') - .addField('Card Type', - body.data.card_type, true); - if (body.data.card_type === 'monster') { - embed.addField('Type', - body.data.type, true) - .addField('Attribute', - body.data.family, true) - .addField('ATK', - body.data.atk, true) - .addField('DEF', - body.data.def, true) - .addField('Level', - body.data.level, true); - } - return msg.embed(embed); - } catch (err) { - return msg.say(`${err.name}: ${err.message}`); + const { body } = await snekfetch + .get(`http://yugiohprices.com/api/card_data/${query}`); + if (body.status === 'fail') { + return msg.say('No Results.'); } + const embed = new RichEmbed() + .setColor(0xBE5F1F) + .setTitle(body.data.name) + .setDescription(body.data.text) + .setAuthor('Yu-Gi-Oh!', 'https://i.imgur.com/7gPm9Rr.png') + .addField('❯ Card Type', + body.data.card_type, true); + if (body.data.card_type === 'monster') { + embed + .addField('❯ Type', + body.data.type, true) + .addField('❯ Attribute', + body.data.family, true) + .addField('❯ ATK', + body.data.atk, true) + .addField('❯ DEF', + body.data.def, true) + .addField('❯ Level', + body.data.level, true); + } + return msg.embed(embed); } }; diff --git a/commands/settings/clear-setting.js b/commands/settings/clear-setting.js index 246237ac..e063770d 100644 --- a/commands/settings/clear-setting.js +++ b/commands/settings/clear-setting.js @@ -15,9 +15,12 @@ module.exports = class ClearSettingCommand extends Command { key: 'setting', prompt: 'What setting do you want to clear?', type: 'string', - validate: setting => { - if (settings.includes(setting)) return true; - return `Please enter one of the following: ${settings.join(', ')}.`; + validate: (setting) => { + if (settings.includes(setting)) { + return true; + } else { + return `Please enter one of the following: ${settings.join(', ')}.`; + } } } ] diff --git a/commands/settings/member-message.js b/commands/settings/member-message.js index 6aca7c82..93bd71c5 100644 --- a/commands/settings/member-message.js +++ b/commands/settings/member-message.js @@ -16,18 +16,24 @@ module.exports = class MemberMsgCommand extends Command { key: 'type', prompt: 'Which message would you like to change? Please enter either `joinMsg` or `leaveMsg`.', type: 'string', - validate: type => { - if (['joinMsg', 'leaveMsg'].includes(type)) return true; - return 'Please enter either `joinMsg` or `leaveMsg`.'; + validate: (type) => { + if (['joinMsg', 'leaveMsg'].includes(type)) { + return true; + } else { + return 'Please enter either `joinMsg` or `leaveMsg`.'; + } } }, { key: 'message', prompt: 'What should be sent to the channel? Use , , and as placeholders.', type: 'string', - validate: message => { - if (message.length < 150) return true; - return 'Invalid Message. Message must be under 150 characters.'; + validate: (message) => { + if (message.length < 150) { + return true; + } else { + return 'Invalid Message. Message must be under 150 characters.'; + } } } ] diff --git a/commands/settings/setting-list.js b/commands/settings/setting-list.js index 84e6c4e4..4efb8a4a 100644 --- a/commands/settings/setting-list.js +++ b/commands/settings/setting-list.js @@ -13,7 +13,6 @@ module.exports = class SettingListCommand extends Command { } run(msg) { - const staffRole = msg.guild.settings.get('staffRole', false); const modLog = msg.guild.settings.get('modLog', false); const memberLog = msg.guild.settings.get('memberLog', false); const singleRole = msg.guild.settings.get('singleRole', false); @@ -22,14 +21,13 @@ module.exports = class SettingListCommand extends Command { return msg.say(stripIndents` **Prefix:** ${msg.guild.commandPrefix} **Invite Guard:** ${msg.guild.settings.get('inviteGuard', false)} - **Staff Role:** ${staffRole ? (msg.guild.roles.has(staffRole) ? msg.guild.roles.get(staffRole).name : 'Missing') : 'None'} - **Mod Channel:** ${modLog ? (msg.guild.channels.has(modLog) ? msg.guild.channels.get(modLog).name : 'Missing') : 'None'} - **Starboard:** ${starboard ? (msg.guild.channels.has(starboard) ? msg.guild.channels.get(starboard).name : 'Missing') : 'None'} - **Join Role:** ${joinRole ? (msg.guild.roles.has(joinRole) ? msg.guild.roles.get(joinRole).name : 'Missing') : 'None'} - **Member Channel:** ${memberLog ? (msg.guild.channels.has(memberLog) ? msg.guild.channels.get(memberLog).name : 'Missing') : 'None'} + **Mod Channel:** ${modLog ? msg.guild.channels.has(modLog) ? msg.guild.channels.get(modLog).name : 'Missing' : 'None'} + **Starboard:** ${starboard ? msg.guild.channels.has(starboard) ? msg.guild.channels.get(starboard).name : 'Missing' : 'None'} + **Join Role:** ${joinRole ? msg.guild.roles.has(joinRole) ? msg.guild.roles.get(joinRole).name : 'Missing' : 'None'} + **Member Channel:** ${memberLog ? msg.guild.channels.has(memberLog) ? msg.guild.channels.get(memberLog).name : 'Missing' : 'None'} **Join Message:** ${msg.guild.settings.get('joinMsg', 'Welcome ! (Default)')} **Leave Message:** ${msg.guild.settings.get('leaveMsg', 'Bye ... (Default)')} - **Single Role:** ${singleRole ? (msg.guild.roles.has(singleRole) ? msg.guild.roles.get(singleRole).name : 'Missing') : 'None'} + **Single Role:** ${singleRole ? msg.guild.roles.has(singleRole) ? msg.guild.roles.get(singleRole).name : 'Missing' : 'None'} `); } }; diff --git a/commands/settings/staff-role.js b/commands/settings/staff-role.js deleted file mode 100644 index 6758cf5c..00000000 --- a/commands/settings/staff-role.js +++ /dev/null @@ -1,27 +0,0 @@ -const Command = require('../../structures/Command'); - -module.exports = class StaffRoleCommand extends Command { - constructor(client) { - super(client, { - name: 'staff-role', - group: 'settings', - memberName: 'staff-role', - description: 'Sets the role that can use Mod Commands without perms.', - guildOnly: true, - userPermissions: ['ADMINISTRATOR'], - args: [ - { - key: 'role', - prompt: 'What role should be staff?', - type: 'role' - } - ] - }); - } - - run(msg, args) { - const { role } = args; - msg.guild.settings.set('staffRole', role.id); - return msg.say(`Server Staff role set to ${role.name}.`); - } -}; diff --git a/commands/textedit/binary.js b/commands/textedit/binary.js index e5949bed..bfe7467e 100644 --- a/commands/textedit/binary.js +++ b/commands/textedit/binary.js @@ -12,11 +12,14 @@ module.exports = class BinaryCommand extends Command { key: 'text', prompt: 'What text would you like to convert to binary?', type: 'string', - validate: text => { - if (this.binary(text).length < 2000) return true; - return 'Your text is too long.'; + validate: (text) => { + if (this.binary(text).length < 2000) { + return true; + } else { + return 'Your text is too long.'; + } }, - parse: text => this.binary(text) + parse: (text) => this.binary(text) } ] }); @@ -28,7 +31,7 @@ module.exports = class BinaryCommand extends Command { } binary(text) { - return unescape(encodeURIComponent(text)).split('').map(str => { + return unescape(encodeURIComponent(text)).split('').map((str) => { const converted = str.charCodeAt(0).toString(2); return `${'00000000'.slice(converted.length)}${converted}`; }).join(''); diff --git a/commands/textedit/cow-say.js b/commands/textedit/cow-say.js index c28204c6..efe7c722 100644 --- a/commands/textedit/cow-say.js +++ b/commands/textedit/cow-say.js @@ -13,9 +13,12 @@ module.exports = class CowsayCommand extends Command { key: 'text', prompt: 'What text would you like the cow to say?', type: 'string', - validate: text => { - if (text.length < 1500) return true; - return 'Invalid Text. Text must be under 1500 characters.'; + validate: (text) => { + if (text.length < 1500) { + return true; + } else { + return 'Invalid Text. Text must be under 1500 characters.'; + } } } ] diff --git a/commands/textedit/morse.js b/commands/textedit/morse.js index 73300bbc..3584e45f 100644 --- a/commands/textedit/morse.js +++ b/commands/textedit/morse.js @@ -14,11 +14,14 @@ module.exports = class MorseCommand extends Command { key: 'text', prompt: 'What text would you like to convert to morse?', type: 'string', - validate: text => { - if (letterTrans(text, dictionary, ' ').length < 1999) return true; - return 'Your text is too long.'; + validate: (text) => { + if (letterTrans(text, dictionary, ' ').length < 1999) { + return true; + } else { + return 'Your text is too long.'; + } }, - parse: text => letterTrans(text.toLowerCase(), dictionary, ' ') + parse: (text) => letterTrans(text.toLowerCase(), dictionary, ' ') } ] }); diff --git a/commands/textedit/pirate.js b/commands/textedit/pirate.js index cec84e0d..ffa03ee7 100644 --- a/commands/textedit/pirate.js +++ b/commands/textedit/pirate.js @@ -14,11 +14,14 @@ module.exports = class PirateCommand extends Command { key: 'text', prompt: 'What text would you like to convert to pirate?', type: 'string', - validate: text => { - if (wordTrans(text, dictionary).length < 1999) return true; - return 'Your text is too long.'; + validate: (text) => { + if (wordTrans(text, dictionary).length < 1999) { + return true; + } else { + return 'Your text is too long.'; + } }, - parse: text => wordTrans(text, dictionary) + parse: (text) => wordTrans(text, dictionary) } ] }); diff --git a/commands/textedit/repeat.js b/commands/textedit/repeat.js index d6420cf7..d5f9c738 100644 --- a/commands/textedit/repeat.js +++ b/commands/textedit/repeat.js @@ -12,7 +12,7 @@ module.exports = class RepeatCommand extends Command { key: 'text', prompt: 'What text would you like to repeat over and over and over and over?', type: 'string', - parse: text => text.repeat(2000).substr(0, 1999) + parse: (text) => text.repeat(2000).substr(0, 1999) } ] }); diff --git a/commands/textedit/reverse.js b/commands/textedit/reverse.js index 052b7f5a..27872b3c 100644 --- a/commands/textedit/reverse.js +++ b/commands/textedit/reverse.js @@ -12,7 +12,7 @@ module.exports = class ReverseCommand extends Command { key: 'text', prompt: 'What text would you like to reverse?', type: 'string', - parse: text => text.split('').reverse().join('') + parse: (text) => text.split('').reverse().join('') } ] }); diff --git a/commands/textedit/temmie.js b/commands/textedit/temmie.js index 2884d0c1..d9280519 100644 --- a/commands/textedit/temmie.js +++ b/commands/textedit/temmie.js @@ -14,11 +14,14 @@ module.exports = class TemmieCommand extends Command { key: 'text', prompt: 'What text would you like to convert to Temmie speak?', type: 'string', - validate: text => { - if (wordTrans(text, dictionary).length < 1999) return true; - return 'Your text is too long.'; + validate: (text) => { + if (wordTrans(text, dictionary).length < 1999) { + return true; + } else { + return 'Your text is too long.'; + } }, - parse: text => wordTrans(text, dictionary) + parse: (text) => wordTrans(text, dictionary) } ] }); diff --git a/commands/textedit/translate.js b/commands/textedit/translate.js index c7706c49..21c5ef63 100644 --- a/commands/textedit/translate.js +++ b/commands/textedit/translate.js @@ -23,22 +23,28 @@ module.exports = class TranslateCommand extends Command { key: 'to', prompt: 'Which language is being translated to?', type: 'string', - validate: to => { - if (codes[to.toLowerCase()]) return true; - return 'Invalid Language Code. Use `help translate` for a list of codes.'; + validate: (to) => { + if (codes[to.toLowerCase()]) { + return true; + } else { + return 'Invalid Language Code. Use `help translate` for a list of codes.'; + } }, - parse: to => to.toLowerCase() + parse: (to) => to.toLowerCase() }, { key: 'from', prompt: 'Which language is being translated from?', type: 'string', - validate: from => { - if (codes[from.toLowerCase()]) return true; - return 'Invalid Language Code. Use `help translate` for a list of codes.'; + default: '', + validate: (from) => { + if (codes[from.toLowerCase()]) { + return true; + } else { + return 'Invalid Language Code. Use `help translate` for a list of codes.'; + } }, - parse: from => from.toLowerCase(), - default: '' + parse: (from) => from.toLowerCase() } ] }); @@ -46,24 +52,20 @@ module.exports = class TranslateCommand extends Command { async run(msg, args) { const { text, to, from } = args; - try { - const { body } = await snekfetch - .get('https://translate.yandex.net/api/v1.5/tr.json/translate') - .query({ - key: YANDEX_KEY, - text, - lang: from ? `${from}-${to}` : to - }); - const lang = body.lang.split('-'); - const embed = new RichEmbed() - .setColor(0x00AE86) - .addField(`From: ${codes[lang[0]]}`, - text) - .addField(`To: ${codes[lang[1]]}`, - body.text[0]); - return msg.embed(embed); - } catch (err) { - return msg.say(`${err.name}: ${err.message}`); - } + const { body } = await snekfetch + .get('https://translate.yandex.net/api/v1.5/tr.json/translate') + .query({ + key: YANDEX_KEY, + text, + lang: from ? `${from}-${to}` : to + }); + const lang = body.lang.split('-'); + const embed = new RichEmbed() + .setColor(0x00AE86) + .addField(`❯ From: ${codes[lang[0]]}`, + text) + .addField(`❯ To: ${codes[lang[1]]}`, + body.text[0]); + return msg.embed(embed); } }; diff --git a/commands/textedit/upside-down.js b/commands/textedit/upside-down.js index 44397208..7817e166 100644 --- a/commands/textedit/upside-down.js +++ b/commands/textedit/upside-down.js @@ -15,7 +15,7 @@ module.exports = class UpsideDownCommand extends Command { key: 'text', prompt: 'What text would you like to flip upside-down?', type: 'string', - parse: text => letterTrans(text, dictionary) + parse: (text) => letterTrans(text, dictionary) } ] }); diff --git a/commands/textedit/webhook.js b/commands/textedit/webhook.js index 17072040..e85e71d7 100644 --- a/commands/textedit/webhook.js +++ b/commands/textedit/webhook.js @@ -23,20 +23,12 @@ module.exports = class WebhookCommand extends Command { }); } - hasPermission(msg) { - return this.client.isOwner(msg.author); - } - async run(msg, args) { const { content } = args; - try { - msg.delete(); - await snekfetch - .post(WEBHOOK_URL) - .send({ content }); - return null; - } catch (err) { - return msg.say(`${err.name}: ${err.message}`); - } + msg.delete(); + await snekfetch + .post(WEBHOOK_URL) + .send({ content }); + return null; } }; diff --git a/commands/textedit/zalgo.js b/commands/textedit/zalgo.js index 2b1a325e..47bb0541 100644 --- a/commands/textedit/zalgo.js +++ b/commands/textedit/zalgo.js @@ -13,11 +13,14 @@ module.exports = class ZalgoCommand extends Command { key: 'text', prompt: 'What text would you like to convert to zalgo?', type: 'string', - validate: text => { - if (text.length < 500) return true; - return 'Invalid Text. Text must be under 500 characters.'; + validate: (text) => { + if (text.length < 500) { + return true; + } else { + return 'Invalid Text. Text must be under 500 characters.'; + } }, - parse: text => zalgo(text) + parse: (text) => zalgo(text) } ] }); diff --git a/commands/userinfo/avatar.js b/commands/userinfo/avatar.js index 880cb394..98a9f772 100644 --- a/commands/userinfo/avatar.js +++ b/commands/userinfo/avatar.js @@ -11,14 +11,15 @@ module.exports = class AvatarCommand extends Command { { key: 'user', prompt: 'Which user would you like to get the avatar of?', - type: 'user' + type: 'user', + default: '' } ] }); } run(msg, args) { - const { user } = args; + const user = args.user || msg.author; return msg.say(user.avatarURL('webp', 2048) || user.displayAvatarURL); } }; diff --git a/commands/userinfo/user-info.js b/commands/userinfo/user-info.js index 6ed3b78c..631e7f10 100644 --- a/commands/userinfo/user-info.js +++ b/commands/userinfo/user-info.js @@ -1,8 +1,7 @@ const Command = require('../../structures/Command'); const { RichEmbed } = require('discord.js'); -const { stripIndents } = require('common-tags'); const moment = require('moment'); -require('moment-duration-format'); +const { statuses, colors } = require('../../assets/json/user-info'); module.exports = class UserInfoCommand extends Command { constructor(client) { @@ -18,54 +17,30 @@ module.exports = class UserInfoCommand extends Command { { key: 'member', prompt: 'Which user would you like to get info on?', - type: 'member' + type: 'member', + default: '' } ] }); } run(msg, args) { - const { member } = args; - let stat; - let color; - switch(member.user.presence.status) { - case 'online': - stat = '<:online:313956277808005120> Online'; - color = 0x00AE86; - break; - case 'idle': - stat = '<:away:313956277220802560> Idle'; - color = 0xFFFF00; - break; - case 'dnd': - stat = '<:dnd:313956276893646850> Do Not Disturb'; - color = 0xFF0000; - break; - case 'offline': - stat = '<:offline:313956277237710868> Offline'; - color = 0x808080; - break; - } + const member = args.member || msg.member; + const status = member.user.presence.status; const embed = new RichEmbed() - .setColor(color) + .setColor(colors[status]) .setThumbnail(member.user.displayAvatarURL) - .addField('Name', + .addField('❯ Name', member.user.tag, true) - .addField('ID', + .addField('❯ ID', member.id, true) - .addField('Discord Join Date', - stripIndents` - ${moment(member.user.createdTimestamp).format('MMMM Do YYYY h:mm:ss A')} - ${moment.duration(Date.now() - member.user.createdTimestamp).format('y[ years], M[ months], w[ weeks, and ]d[ days]')} ago. - `) - .addField('Server Join Date', - stripIndents` - ${moment(member.joinedTimestamp).format('MMMM Do YYYY h:mm:ss A')} - ${moment.duration(Date.now() - member.joinedTimestamp).format('y[ years], M[ months], w[ weeks, and ]d[ days]')} ago. - `) - .addField('Status', - stat, true) - .addField('Playing', + .addField('❯ Discord Join Date', + moment(member.user.createdAt).format('MMMM Do YYYY h:mm:ss A')) + .addField('❯ Server Join Date', + moment(member.joinedTimestamp).format('MMMM Do YYYY h:mm:ss A')) + .addField('❯ Status', + statuses[status], true) + .addField('❯ Playing', member.user.presence.game ? member.user.presence.game.name : 'None', true); return msg.embed(embed); } diff --git a/commands/util/help.js b/commands/util/help.js index da9ceca3..32f4c3a7 100644 --- a/commands/util/help.js +++ b/commands/util/help.js @@ -37,17 +37,19 @@ module.exports = class HelpCommand extends Command { **Group:** ${commands[0].group.name} ${commands[0].details || ''} `); - } else return msg.say(`Could not identify command. Use \`${msg.usage(null)}\` to view a list of commands you can use.`); + } else { + return msg.say(`Could not identify command. Use \`${msg.usage(null)}\` to view a list of commands you can use.`); + } } else { const embed = new RichEmbed() .setTitle(!showAll ? `Commands Available in ${msg.guild ? msg.guild.name : 'this DM'}` : 'All Commands') .setDescription(`Use \`${msg.usage('')}\` to view detailed information about a specific command.`) .setColor(0x00AE86); for (const group of this.client.registry.groups.values()) { - embed.addField(group.name, - showAll ? - group.commands.map(c => c.name).join(', ') : - group.commands.filter(c => c.isUsable(msg)).map(c => c.name).join(', ') || 'None Available'); + embed.addField(`❯ ${group.name}`, + showAll + ? group.commands.map((c) => c.name).join(', ') + : group.commands.filter((c) => c.isUsable(msg)).map((c) => c.name).join(', ') || 'None Available'); } try { await msg.direct({ embed }); diff --git a/commands/util/info.js b/commands/util/info.js index 14063643..4526b9c8 100644 --- a/commands/util/info.js +++ b/commands/util/info.js @@ -1,6 +1,5 @@ const Command = require('../../structures/Command'); const { RichEmbed } = require('discord.js'); -const { oneLine } = require('common-tags'); const { version } = require('../../package'); const moment = require('moment'); require('moment-duration-format'); @@ -23,27 +22,24 @@ module.exports = class InfoCommand extends Command { const memory = await this.client.shard.broadcastEval('Math.round(process.memoryUsage().heapUsed / 1024 / 1024)'); const embed = new RichEmbed() .setColor(0x00AE86) - .setFooter(oneLine` - ©2017 dragonfire535#8081 | - Created ${moment.duration(Date.now() - this.client.user.createdTimestamp).format('y[ years], M[ months], w[ weeks, and ]d[ days]')} ago! - `) - .addField('Servers', + .setFooter('©2017 dragonfire535#8081') + .addField('❯ Servers', guilds.reduce((prev, val) => prev + val, 0), true) - .addField('Shards', + .addField('❯ Shards', this.client.options.shardCount, true) - .addField('Commands', + .addField('❯ Commands', this.client.registry.commands.size, true) - .addField('Source Code', + .addField('❯ Source Code', '[View Here](https://github.com/dragonfire535/xiaobot)', true) - .addField('Memory Usage', + .addField('❯ Memory Usage', `${memory.reduce((prev, val) => prev + val, 0)}MB`, true) - .addField('Uptime', + .addField('❯ Uptime', moment.duration(this.client.uptime).format('d[d]h[h]m[m]s[s]'), true) - .addField('Version', + .addField('❯ Version', `v${version}`, true) - .addField('Node Version', + .addField('❯ Node Version', process.version, true) - .addField('Library', + .addField('❯ Library', '[discord.js](https://github.com/hydrabolt/discord.js)[-commando](https://github.com/Gawdl3y/discord.js-commando)', true); return msg.embed(embed); } diff --git a/commands/util/shard-info.js b/commands/util/shard-info.js index cef992bc..eec8fd32 100644 --- a/commands/util/shard-info.js +++ b/commands/util/shard-info.js @@ -18,9 +18,12 @@ module.exports = class ShardInfoCommand extends Command { key: 'shard', prompt: 'Which Shard would you like to get data for?', type: 'integer', - validate: shard => { - if (shard < this.client.options.shardCount && shard > -1) return true; - return 'Invalid Shard ID'; + validate: (shard) => { + if (shard < this.client.options.shardCount && shard > -1) { + return true; + } else { + return 'Invalid Shard ID'; + } } } ] @@ -35,11 +38,11 @@ module.exports = class ShardInfoCommand extends Command { const embed = new RichEmbed() .setTitle(`Shard ${shard}`) .setColor(0x00AE86) - .addField('Servers', + .addField('❯ Servers', guilds[shard], true) - .addField('Memory Usage', + .addField('❯ Memory Usage', `${memory[shard]}MB`, true) - .addField('Uptime', + .addField('❯ Uptime', moment.duration(uptime[shard]).format('d[d]h[h]m[m]s[s]'), true); return msg.embed(embed); } diff --git a/package.json b/package.json index 4a8ec80d..8293b7ac 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "xiaobot", - "version": "21.4.7", + "version": "22.0.0", "description": "A Discord Bot", "main": "Shard.js", "scripts": { @@ -23,12 +23,12 @@ "postgresql", "cleverbot" ], - "author": "dragonfire535", + "author": "dragonfire535 ", "license": "ISC", "bugs": { "url": "https://github.com/dragonfire535/xiaobot/issues" }, - "homepage": "http://dragonfire535.weebly.com/xiaobot.html", + "homepage": "https://github.com/dragonfire535/xiaobot#readme", "engines": { "node": "8.0.0" }, diff --git a/providers/Sequelize.js b/providers/Sequelize.js index 85cab50e..7f93f793 100644 --- a/providers/Sequelize.js +++ b/providers/Sequelize.js @@ -93,29 +93,33 @@ class SequelizeProvider extends SettingProvider { .set('commandPrefixChange', (guild, prefix) => this.set(guild, 'prefix', prefix)) .set('commandStatusChange', (guild, command, enabled) => this.set(guild, `cmd-${command.name}`, enabled)) .set('groupStatusChange', (guild, group, enabled) => this.set(guild, `grp-${group.id}`, enabled)) - .set('guildCreate', guild => { + .set('guildCreate', (guild) => { const settings = this.settings.get(guild.id); if (!settings) return; this.setupGuild(guild.id, settings); }) - .set('commandRegister', command => { + .set('commandRegister', (command) => { for (const [guild, settings] of this.settings) { if (guild !== 'global' && !client.guilds.has(guild)) continue; this.setupGuildCommand(client.guilds.get(guild), command, settings); } }) - .set('groupRegister', group => { + .set('groupRegister', (group) => { for (const [guild, settings] of this.settings) { if (guild !== 'global' && !client.guilds.has(guild)) continue; this.setupGuildGroup(client.guilds.get(guild), group, settings); } }); - for (const [event, listener] of this.listeners) client.on(event, listener); + for (const [event, listener] of this.listeners) { + client.on(event, listener); + } } destroy() { // Remove all listeners from the client - for (const [event, listener] of this.listeners) this.client.removeListener(event, listener); + for (const [event, listener] of this.listeners) { + this.client.removeListener(event, listener); + } this.listeners.clear(); } @@ -137,14 +141,18 @@ class SequelizeProvider extends SettingProvider { { guild: guild !== 'global' ? guild : '0', settings: JSON.stringify(settings) }, { where: { guild: guild !== 'global' ? guild : '0' } } ); - if (guild === 'global') this.updateOtherShards(key, val); + if (guild === 'global') { + this.updateOtherShards(key, val); + } return val; } async remove(guild, key) { guild = this.constructor.getGuildID(guild); const settings = this.settings.get(guild); - if (!settings || typeof settings[key] === 'undefined') return undefined; + if (!settings || typeof settings[key] === 'undefined') { + return undefined; + } const val = settings[key]; settings[key] = undefined; @@ -152,7 +160,9 @@ class SequelizeProvider extends SettingProvider { { guild: guild !== 'global' ? guild : '0', settings: JSON.stringify(settings) }, { where: { guild: guild !== 'global' ? guild : '0' } } ); - if (guild === 'global') this.updateOtherShards(key, undefined); + if (guild === 'global') { + this.updateOtherShards(key, undefined); + } return val; } @@ -170,18 +180,27 @@ class SequelizeProvider extends SettingProvider { * @private */ setupGuild(guild, settings) { - if (typeof guild !== 'string') throw new TypeError('The guild must be a guild ID or "global".'); + if (typeof guild !== 'string') { + throw new TypeError('The guild must be a guild ID or "global".'); + } guild = this.client.guilds.get(guild) || null; // Load the command prefix if (typeof settings.prefix !== 'undefined') { - if (guild) guild._commandPrefix = settings.prefix; - else this.client._commandPrefix = settings.prefix; + if (guild) { + guild._commandPrefix = settings.prefix; + } else { + this.client._commandPrefix = settings.prefix; + } } // Load all command/group statuses - for (const command of this.client.registry.commands.values()) this.setupGuildCommand(guild, command, settings); - for (const group of this.client.registry.groups.values()) this.setupGuildGroup(guild, group, settings); + for (const command of this.client.registry.commands.values()) { + this.setupGuildCommand(guild, command, settings); + } + for (const group of this.client.registry.groups.values()) { + this.setupGuildGroup(guild, group, settings); + } } /** @@ -194,7 +213,9 @@ class SequelizeProvider extends SettingProvider { setupGuildCommand(guild, command, settings) { if (typeof settings[`cmd-${command.name}`] === 'undefined') return; if (guild) { - if (!guild._commandsEnabled) guild._commandsEnabled = {}; + if (!guild._commandsEnabled) { + guild._commandsEnabled = {}; + } guild._commandsEnabled[command.name] = settings[`cmd-${command.name}`]; } else { command._globalEnabled = settings[`cmd-${command.name}`]; @@ -211,7 +232,9 @@ class SequelizeProvider extends SettingProvider { setupGuildGroup(guild, group, settings) { if (typeof settings[`grp-${group.id}`] === 'undefined') return; if (guild) { - if (!guild._groupsEnabled) guild._groupsEnabled = {}; + if (!guild._groupsEnabled) { + guild._groupsEnabled = {}; + } guild._groupsEnabled[group.id] = settings[`grp-${group.id}`]; } else { group._globalEnabled = settings[`grp-${group.id}`]; diff --git a/structures/Command.js b/structures/Command.js index 9c81f5fa..5b4e539d 100644 --- a/structures/Command.js +++ b/structures/Command.js @@ -7,33 +7,29 @@ class XiaoCommand extends Command { this.ownerOnly = info.ownerOnly; this.nsfw = info.nsfw; this.clientPermissions = info.clientPermissions; - this.allowStaff = info.allowStaff; this.userPermissions = info.userPermissions; } hasPermission(msg) { - if (this.ownerOnly) { - if (!this.client.isOwner(msg.author)) return 'This Command can only be used by the bot owner.'; + if (this.ownerOnly && !this.client.isOwner(msg.author)) { + return 'This Command can only be used by the bot owner.'; } - if (this.nsfw) { - if (!msg.channel.nsfw) return 'This Command can only be used in NSFW Channels.'; + if (this.nsfw && !msg.channel.nsfw) { + return 'This Command can only be used in NSFW Channels.'; } if (msg.channel.type !== 'dm') { if (this.clientPermissions) { for (const permission of this.clientPermissions) { - if (!msg.channel.permissionsFor(this.client.user).has(permission)) + if (!msg.channel.permissionsFor(this.client.user).has(permission)) { return `This Command requires the \`${permission}\` Permission.`; + } } } - const staffRole = msg.guild.settings.get('staffRole'); - if (staffRole && this.allowStaff) { - if (!msg.member.roles.has(staffRole)) - return `This Command can only be used by the \`${msg.guild.roles.get(staffRole).name}\` role.`; - } - if (this.userPermissions && (this.allowStaff ? !msg.member.roles.has(staffRole) : true)) { + if (this.userPermissions) { for (const permission of this.userPermissions) { - if (!msg.channel.permissionsFor(msg.author).has(permission)) + if (!msg.channel.permissionsFor(msg.author).has(permission)) { return `You do not have the \`${permission}\` Permission.`; + } } } } diff --git a/structures/CommandoClient.js b/structures/CommandoClient.js index d2671897..9245950e 100644 --- a/structures/CommandoClient.js +++ b/structures/CommandoClient.js @@ -4,6 +4,7 @@ const Database = require('./PostgreSQL'); class CommandoClient extends Client { constructor(options) { super(options); + this.database = Database.db; Database.start(); diff --git a/structures/PostgreSQL.js b/structures/PostgreSQL.js index 56e421a3..d3659f5e 100644 --- a/structures/PostgreSQL.js +++ b/structures/PostgreSQL.js @@ -9,14 +9,14 @@ class Database { static start() { database.authenticate() - .then(() => console.log('[Database] Connection has been established successfully.')) - .then(() => console.log('[Database] Synchronizing...')) + .then(() => console.log('[DATABASE] Connection has been established successfully.')) + .then(() => console.log('[DATABASE] Synchronizing...')) .then(() => database.sync() - .then(() => console.log('[Database] Synchronizing complete!')) - .catch(err => console.error(`[Database] Error synchronizing: ${err}`)) + .then(() => console.log('[DATABASE] Synchronizing complete!')) + .catch(err => console.error(`[DATABASE] Error synchronizing: ${err}`)) ) - .then(() => console.log('[Database] Ready!')) - .catch(err => console.error(`[Database] Unable to connect: ${err}`)); + .then(() => console.log('[DATABASE] Ready!')) + .catch(err => console.error(`[DATABASE] Unable to connect: ${err}`)); } } diff --git a/structures/Stats.js b/structures/Stats.js index 778213e4..403e2977 100644 --- a/structures/Stats.js +++ b/structures/Stats.js @@ -2,21 +2,28 @@ const snekfetch = require('snekfetch'); const { CARBON_KEY, DBOTS_KEY } = process.env; class Stats { - static dBots(server_count, id) { + static dBots(count, id) { snekfetch .post(`https://bots.discord.pw/api/bots/${id}/stats`) - .set({ Authorization: DBOTS_KEY }) - .send({ server_count }) - .then(() => console.log('[Carbon] Successfully posted to Carbon.')) - .catch(err => console.error(`[Carbon] Failed to post to Carbon. ${err}`)); + .set({ + Authorization: DBOTS_KEY + }) + .send({ + server_count: count + }) + .then(() => console.log('[CARBON] Successfully posted to Carbon.')) + .catch(err => console.error(`[CARBON] Failed to post to Carbon. ${err}`)); } - static carbon(servercount) { + static carbon(count) { snekfetch .post('https://www.carbonitex.net/discord/data/botdata.php') - .send({ key: CARBON_KEY, servercount }) - .then(() => console.log('[DBots] Successfully posted to DBots.')) - .catch(err => console.error(`[DBots] Failed to post to DBots. ${err}`)); + .send({ + key: CARBON_KEY, + servercount: count + }) + .then(() => console.log('[DBOTS] Successfully posted to Discord Bots.')) + .catch(err => console.error(`[DBOTS] Failed to post to Discord Bots. ${err}`)); } } diff --git a/structures/Util.js b/structures/Util.js new file mode 100644 index 00000000..932c634a --- /dev/null +++ b/structures/Util.js @@ -0,0 +1,13 @@ +class Util { + static cleanXML(str) { + return str + .replace(/(
)/g, '') + .replace(/(')/g, '\'') + .replace(/(—)/g, '—') + .replace(/("|")/g, '"') + .replace(/(&)/g, '&') + .replace(/(\[i\]|\[\/i\])/g, '*'); + } +} + +module.exports = Util;

@EPIk3gn!1?XHH|0Zd40`k)H85(G--5SK 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 diff --git a/assets/sounds/zelda-chest.mp3 b/assets/sounds/zelda-chest.mp3 deleted file mode 100644 index 30d70ded8e77e71f68c244d3d72d7376bc02adfd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 101399 zcmeFZc~sKd|Nr}D5J3?EQ31)oDKrN_9J4}HoX~Kn)U3dP)Fw?E?9>TFal&~B%?iiV zthCXl6Ns}|npRrY(JUKIooqbK{_JxH`3TE7&7+a|ChV}=cxY<;m*Y; zi^%|d0F?g{(9+h?)5jVb6PGMCvsh+h>%d^TxO=Sj^!E1k=dK9}UmqF0Sr8{o+_obn zZBP1v-^CJ%G&jGnq^z>)$T3BIQ}fBw?dL9bUj0LJ|4Udf7nRxJU`tj4}FJI5U z`}q0mkA+`3S1?Ad`KLZ!8W zw(z71Vk4{yQ%%as-FK6vP>?^`(8RGsED}U7En64ol2c#Z;NB{!kvcaBX4M!vGc7eC z##t-Y&y^wIqcbXf=qC=DV+R8Q{JLWzO-`IRQPKP7KR*`sF710qlC3V9{esV)P3fH4 z;bKxSHe`;;>9Lg2)b1bNT|T&S)c+ZQt=$B~;(L4PqQy$lpL*tYYhecNwfg5Xw}pjfHeul(w_CS!MlZSD zOs%27y;hzU!-9y+{UQUsvQdDChJpYXLfRA45$W#y?wQ-|9Lgo9{;p}c6+#5i{IRr7 ztL2>Tm29;1&_ecQg(vd;cou-vlRjuf(~C1H$H%P-h|Gl1ODp-GUE#^Bah&roI;(s{ zQ>DRxnYYr8$%X-zis~qVO(~yaG(qedRdJFg)Z3Me=PvUaSCu=;V4}CWNT4T29jA-* z%kb!i(`0;(rfZvp2A|V?>&Y7p1hTKc`!ZLl@wgcsFzo83?85Ohk9$c2@?t%5ZbDc0 zIxZZLDHEVU*nvz{=eo)_LBw3VsypJToAIP+nLE)GxUU^~^)x>Lx9O#Ly+k$Lj|RA{QU&u5`V8s7Gr@>h6A{3*Zl(b;=$Pp>~~guZTh#&EgcO=3D_ zvX_0cwu=RpmJ-M=K4jZH?a&o{YOa{UUG@#?>e`t(}G2P$vH z{^M}yevd-!cx5R3@}~<&#?L=o0>Bz?vfsRUf2m;W?(2!&)W)61ckepATDEjUMMv*p z+m?>ru&C;_>neYR3k&t{zAr2+Tv}N8aq!e)r23xGV))}-#|>@s<%5>xrREcldrnpx zFR`hJvCqnlT=Lj|3F%RAS(|{H>Fn!u`gh!kbK`bVyO!=mK!K8m~tmDenGF ztNP>6*S+jB zgQ_j7vVT(o?c5WJX+97;T!sjKad@zp{wPO#mO>~}-m7_{ACfB%z|YmFnjDpQ{T#aF zb3Oj{7$HYxBtHfBEJB1YIdb80S%|y*L@p(#IRfvTNtfVpAd!E`3GNC|i1#wb;cV+G zlR+bB%o(j6L~yb~pUj2A2i!cq%b@^u-cSc%bX~M^J$19RK$v6ct@jRpq^(bc;m zyp~x(neW%Ey`ETQ(=LNltlgv@KXZ$@IlMe)L&fS{Z{ZNQ5)%@=dCiqn<3dv{pdRPz zw!>q6;N`&L4-p_S>+B@|+UX&?Lq8WH1m9${3s=58oA~~0^{aEZ3N29A^UBG_BM&Xy zw3m$s{{84=;I3WgD@!9Ed@x-0;;${#b4w!$&sNYYHx_8Z7Td!AO+V>I8(|j+PSTj} z7JJ%1t?P}pA02Mrzg`-@ixsrG_`#zOXIGv%Tp+dk#JW!02o3s~e&6R>oG#}3T8?z~ zx^?9sVXM*R9Bm%s^X4wzap(K&@iiUKmAQ#+)yAvN-s$RfdOaI*f9OUzVMWox!r#|^ z-?PTx4A5=2W#eBdT{>T{^S(z}7WlQb{^pUuIJ{Y&ySZ@+{u+Jk=$)YpZ_|`K5fG5e zF}Oom1|eRwJbwB{RpA1$98p#5f(Psg-aGNDK=L+HE)pKhz@t$P+Td7ouXB2RnP53n zAx{EVb#Ir)0CMaK($^t5H4Kj?9-WwygMk8^uNmB`Qql_sTRG&NxE+&IJbx_P*3@o` z{h?2ObE`{@Eq#bDSC%>aK7~$*5z*Lb_pcvZR(W~Xbe46-B$9Z~_QJCs79ff$Zg)xX zHf}j!l2euyn2=x?|3{Ti#@oG^i9?p(UVU39ta!?}oS$1h`Np%dxq3H%^AaPZ@B19e zR)F@zsiR%Z^4d-={0vvL)t^5{Xe<^hviG`|b=oX3pZ4*)>xz4F zUQJ)sSwZ&4>eErCq2QR9jWd5RY0%YQ9$FpSnRjT$X435Rm`-`g-x*#w>F&Fu7gO-t zGHq{YKfl0rbgy;gFY8NOY591{)}czklXf1Ti&~j>=!AEVf4hnjHx;Z6a`WhU&)r%a zz0O_{lxOy+j?X*ugV^|N*H*t*pWf-k{`j80Fdx3;&wC3$Y>wmst-Y6boP4pobZw!9 z&ZVxIAH5CX$*=163)fh$9kE#9M9LpOwR*zV29f`@$KyBrn3jQ!>o;Ope&sH=43L^i z8Kt+Glxa`v(e?G->+&|zJP76v^DAiw4d3gtG_;ejFf0b9qxIq#Z3*5-6e%XU;k$C_ z+267WJG4`>BWer{n|2zdZ9(63TO1B)O{zHQ!4l;sN}TtkK+GP;dwK_r$K0 zOg>^=u-)4X#Ye}#-K!To>zdc!@h6KcNJbwfSx!z$KF7;VwJ-;hb2)>*9 zsZ!yOHBUKd-JCmyu&U9mvh0GmIUu)<`U8TfXA29)HA{BBYv^0`$6rWKmE!QM?#|GZ_Wj-$A_L>^CsU4u z?%U(IfB%Q?y!5jHe`gXuKT=$B{(0pb<4ifI7$D{jqn<&y>F8ju)x!yEWM{bCU9QMS z5SS+SSY;M&Wd77FuQRk|pNs>O;V3~T6~hhiF=*Gj?pywyN?!9hD;H23`$qwTiQQrsJzN~|cDZ$NQ9yA5 zAxgKz{Yd^6UiaLgyX=b>n4q%VT4HUm-2WZg|IZUnT-?Um(>;(>lgY~;x+?z^jq9zJ z$Fwg``{D6Nsnt)a?n3YfmQ4rUvO_!MlYatX=;Eh~@qaF+JgvW`9KZXZ*msBi;M=v^4He*@jP)+?~c^)jx@;^Ncdo)vJZh28Bu!=$Ef-!h&SsqY0z{xNCD zqsxbu1uolj{$lvei64%``sbe(_T`H_{AD{sry6d;_nf_PYv|+D&giRq^MHawJ>;(N z7R|SwhyjX@=6)})XFi6zTHGeLmg#4RNEo3TMT(UvXP@_yo7qHprat~ItV$Y+$C+12 zZSectjwrUt=a*FxpOD@GRgYLENiKxp!_`cb{22du^kca!L|%BHiWg#X@aGZ5YIy*M zz}EQ}6bc6m<5>9*yV9=O?qib((Nt9d(te8(QSC_SzBd~Ki1+wC07NVWOdwj-Fg^uk zThK1d^^H}SiKM7&%pp&ZNx4qD9*>qncz5>_EP(nweZN&(BPNzTznj()BiX({Tk1OIB|FAL-uRp=Pnp#Xe?for3#$3YG%59(TTj0@-+F z?eJ33t-9FG!E)7jV&Ri?8&YrR?yFg$4!)N+8a^5?-?M(_m(GVjcl4&;kdp!JRbqU( zEoWij&BK9v5ASR%-VKTVojydOd_C*8qawTS=z7EK8*f6p_lNwn7_hi$VjNw>h2Hn( zS5`rsdOrQ5e)0Qza>*r6ckOW>|Eyf2s2C;liL&aTWow9~?KioZ>pQ~X=9pwaBm)sa zh3(eI_jfa<&pQ>Z3D#TEvEp9hu9GnjZ%HEXFKP=`R;sKs{EjC6Wp6J#Wm=#-|9Xr$ zM}E2LtV=={Vc=5CnVB7pGP|c?#}}=YJ&#&O98ZqR?)cMgDW1F?yJbAwl*35=pnf8u znsF`i&HUu7V{w9%0;RdP8k2=YTGQkQlrdvOEiMx2*wP*m$B$8650Wl3IzorVNI+tk zFe!+%1HI*TNF7wj^&y->!}b*B7yVV>ko6qi909ggcI6oRXywRl(bLpfGCg~$;45ZU8tvJ=fPaNDLQ?rmmQ<8^vF zvHr_pc`z)w_FevYZ{N+ey$MMl-OF)AwlY*9Pw}ZHJ=R==r<+!9xQw#j6MCWU3=s&6 zzR+@@I&kH%xOQ^wogJGTro_3`(g#+{@4&h#{j0p}3#aRPM*`(r-I+_uIaBMdO>CUp zSk(-RG|3waR=WgaV)P8J9hi=Oqq#9oZ+)Bl&E=}_)}6|GjUY46A91`>fBrH6Kh`Bz zt_t2F>SGGM-LN+s*pp#rYg&yA0_;ZaTKHc!MKl}_U()b2s+wJ6W_}ooU)ZsdzpX?! z%Z&c&7ng0+=;eevh8$4&m;;zh zFNgsIru`TYWP(7u746m;`L5r0Z0R;>AUNH>V7+c8pQAETxZFJmY_tLWITZCxz%k2$zp@gO+8K&>xn~_tD zZxpYWS0DPNl>b3JeZo(9c>DGk>dL!6?z*zO9kKCu7ZzR@;jS~zHjJKly~45Q-TQUM z8@Z2XTTnCKAJ;YbwouebhtP+ISXl zKMuujX|I7c)L7=EKoD&DA4l6uOg(R|A!)x`iT?We-bd3u!k|vc+>>m^AF))E@&v3O zugntv%|ZFxZ`my|Z?pe9sV2Mg@Om_-TZPvh-MUg&{f{MK#9q7K{U$isK6W&JfDfi# zmDv`!EqV3W#t}h9!RPy>1t8YLWhjEH(p%5R>*4d)3<$w#tIAg2Dwa><_{o!^AUXL) zOr+iuNQ5Y7mcjpPX8Dr0I;k0%eH>@Fp3XVpdCFDktU95IudAhV6d`RFO~1EaX(Bs2 z^OQ_U__P^~P3DULHLL$m8=~1}#vpLFnCM(j)lLkdpyuy_tCayDk%0! zFA!1)zZ;I(!(r8Nb12wGPIQO z&NY6-VP*?HA*ZBOrqfS>#c|}~UOpQadgI;OX<+2Hg+ssKv8c_9W5~iwR76U(-Jp1z z!MjL7gir^s@PqCRx$Yug?zb6{vGLNe6SRi?V8y1!obM5f_TbM`j>_2<pnXFH4H;7IUeW?!?b`!*+h7%Uny+#%}i4m@~qRj1iWbd9o zo#ujHos07Bu`*@Hh0DWwFMIwGxBHCAR_$+~qo&Ece0?t{FGjydX6U9tV>QaGTY>sq zM<3Zb47ZhmRBCfMMo6Y1cNdtOj^aLqb2E$kGsEC1`0-fHk8YAYcGe2#tpj#S_yvWf z(3jHqA>FID=c{ECbbwfx7*ytH|3<$n%JCrp2wi8_g)_{(Jm65MJUOx~vzn08Z_uho zfGt0^ys9!sUaXQ?;gwxvJh_+*Rr+f(;Uu#?+ZDVpQ(tU73QR*Q^T(h_h5$mL=z!_( zi^P;SUE?9)IHVHH1iF_aC1X1d45QIjrg&jsU5Pqai-RLYh5lrkW4DcmGJSOKwspgN z0-SIq7EyT|7AxG0XB5#zWGG8_DF+HFO`NVN^kV#V@zBE0S5A8mEZkYP@a)f@p|itN7l?+i$rq=6?_B@pU~YKJ z=S^V$1V~_mhXXQ$#-#bC$v0O)VMJNZ2av9b;U}MHPRf5e6qfFq>|TtDPq@MradvBQ&BV=ldRR7Ct}RV^ubvg>Ve*882C*DavDjV zSF>dR85hb|4(<|j%yz|b`aknqoA#VvClXo=Az?Z+KE&KmI2{>!pPY%L8n2?^YAsn* zimU=HHou&kgUyjhV7W5*J{1&DNQtnx40As#IF%3fZX{=T?*(U3Y`C{=(n`s|kLj z2%Yn@>F)jSiS?kfrv**OEO-}^-M+p=eSFQPM``rG{#;n_`S`l;&C9;U>UzC4;UCHK zr>k}>f4`dA7oh9tv^bYSEE*KhK^x)xUQJYqROl z?9jW3q+_JOyPf~supi%q@@*slvdnknb&jt#C}^63r5i5CMa6!a%V4iLf5$!*uq`=I z{9%wu8)@RB1vaQ6`_qHA)>rmcUnlQTU65~Y8 zBbW2UpcAPOlZ-qAMn#yEV3|%daC$WP%6hyN7rMPNA}8g(|C*=aae@CV%^oW-tULd1 z$KE@e$GwcE$Flie$L_H}Q}HQZX5~hkb+p5oxjR{$GcqR$P4xiaC_nNNq)L8&a}|hCW~k+l zEY4BiLS|CCJVo{5R)l57MWcCAM3)qPk!%y2L9%?Jf=g|!bCZdguDs;+nZqcfKm(d! z7_4?(3AKX5BO=y@H0cOPX1Nj^22OLGfm+Hy_N)?L@0`#oudU%|f@N8d=P07JP~t=G z`7q4Cp;DzW;YbRxQY)DgZF6epB77IVziTM#+s<2b5WiVDCBx?+9aPT`loH)-Byr!qeC20@x`)o`9461tw7yc=1)S&zif2U{Vx z`)W*Gx!mP?uV^xkWY`s>L4&zRiJBb@=Pw`Te8L>$NTW~}d^bCSw!C3bJxhUb`7Vy) z5ceQ&AXJUg(UzU*e17e@r{gau&`{s0@d3Km#&!XK9vJ{Y9#vI%{k{200APv$0E$O- ziBk3bG}R{i;a*l8Ejfj2vD0cffgm^XMT1}>=v}mb!k8IrW->RZ*BgOH??bC;bezib z90?Nj90c$?S~4NcIsEqIk*DSeU)&v+T#bKaw4qMYb=^Y*{BOle(_uO7h|iXMXSX_5 zq9KgzxOIIi3x2ff1KW`k7a~Im*2xuAEj-Z{Jq&mD759k6l5ES2b7CJx85#ttGibt* z$)J=wie@AQTVaGa!9N=x%b%`SZef*z*o{!M5zp|^vBtT@X7cmdot=&4x7JpL#a;jB zhIVO;KiV_$MMp7$^9r6r2+?~ez+o!#^>wv%AT}bhm84c35gSa0cuDNEDjXasYOP9c z9|jCzu+*Z$Ec@J|Ffxr5ReqsbkHHHl)ATB6TbG(6pwo;MKB+cO!ks#om96Z0OAH>< z@vd|#$EfYz|FPO_nUhnhlm7vR$94L5y;aU`D_USqqH#w%TbgSvz3ia#S#1W_o8G4F zGX2o;`3I+s0>|)U^e2GXet*Cm4feV)XJC|PPNhhE4yXF+)}uTx?ht@#;ybFh>?`Jz z-TBOGTftFa6B)=y&xx$<6}DfTdDIOPL7#7=ulPK8{+w5tp0f$YH~_-guSZ1KZ*}a1 zCkv!6%C&_{BOx1wyY1!M2G`w1`BwRH6Pz)pJbMkS2_B)zwc^^!*~nOGNkOxO;Wyrm zJGTnPZ9hiFSNj#mO}CsG?Y-cPZx+R!rIhk|LB_SY#ad0)rr?aG)g*!UPJ#px_iu31wAl%7}`x&d^afXt`!YDgT!1!*%i_EA$wTn>qx_C z%c;6V0V^Q|QFF@55NG1aiD6skS=YG`q+@f&Hb=@uvB}n%tXeO6VY$^WD5MrG*u?ij z9zK5eZz!w?sv_#|-T5CV1PM(%oVVA~3rFV8I#(guFoTTFoPm~Pw6g1z*Ro2De4~q| z6Inn6kO6A^Q;V-b%)!f8Wj)ZXiK-U<=tRCocz2(z(SNl*}Yw#N|8#hSz9TR z35RNFVEVLq%^(=lFn~$!(n@YGS3+hjp_&K~o%);>=dQ)E+PwAnVu${5SLdb$DySE! zG)A_5Z+i96?$GpW%JcTZ*j;d}JGv*j3VEg6yT{f`CR5EMmLbPN^ zQaQUAV%9D~saTW=HS>X3?Qlm!jSYyaK-ktTdc?I;fs1v!@U5T{`|VODLBQ?Q`D5-26 znF@{z7Wi60jlL9S%9AM~lstrdmo7t#3pB+RgDB(yfxe7OBiS5zo>KpmzTm7*cGRWY z8yS#d${0UPXH7gG(f=_!N1P8~oJXA_zN=;IHBm!KkJAT`2KsMJX*Xaa%??^@@9qg} zu4ngnSA!AK-}Ah(*hpp-5Z#5dkQpj#l(eN>H(*NjSr185wIi4K1w#N;x=7*5_u#=m zu_QqkmLuSR^@JoHd$le`f|ka(;m7TTF>Vhtg@=|_0}099U#?_H#>19DP)7~u)-=u2 zv2{k8@0S@A^v$L)gW}73$Ko^ae7@2%nQu#$@dc_pB?pYd zyBgu`F@?hu-i(~#_OQBFu3sc5ev>SlmK_x6C7`K`orwOtd@K|~^Sos~ozdI*_86lA z%J>BZnf{MPp&w-GPW!*1;4)K1(%-xNKTufHn+oQMR5H?#Y|NZFZ+V+*#7R>&D`VUEXmc=tbjzp?xjmHHb9lF?L3~1z0YI$Mvsfg&4z6~WUp_=v z4wEKrM_v$SD#zyOAkUfH!MeLx?a{n18;6vofHXqV;o2Mu zSiYu$P)i%dHyVwWML6TLbrW+x3#wjPEx}G7{rk8H%fG79wko0re{)aOjmoN;t!O}q z*P9DJEX6D4tVx^|P^or-mv2I|5!;-w!J+Cy1U@0H3i*R5#EUa3MH#6+{^Z>Wf=*`q z3-@%iO&n!$mc-^O+O`SWl0ePEeGy4;K3{xAAA0KlxH8uIJNg7 zaoriD)ANkGqF5)}LTz%Ai;?_>N*q(mA<-V^WXPa28>4st+)Ls6K^G(NX2 zdsKn&>YGh5<_3`H;cd8SQ}5~=BfJ(}o-@=Ih505Za_I1MW}k;lZ#}%$_xX(YrF50lDKNtw+eYu8EYSsd}=xNb#VT7LQf0R`> zX5%_OXi>rTCw%8UHO&A0{bJSrJg|xGvwpKhX~?kW=<9>QzB%3@+BZW?_p!v4lLPh- zOYqjUy1zCw)}p>e3;iY6hUWhb1=puXNNe_P@BjDoVeM`$ifyvRw>6!t=@4($_A_f^ z+D^Ul=5W!7^j?`Z4xJ25`>-eEzEgYVV9W2r%OJcd_-$mXx^0xX7r7<7`z{wNYs`Y) zjH7E-cy8+jpc)i>-*EHdQbLb%5beT^TEhLgO~0)qsDvP^#p$hpYM!8EjnZMH*6@<0 zTrW%6W^=a6O*$lZRYQ?5yJ9Qn>|TP_36tfV)j*RLS;)*e!Oov1Gij_a1B;F3bg-kZ zmjQ9q05un0B1Craiboizv(1(-@iSX^~}7OJx$kUpA(tk{~=;BD4xU z2?BWIwtA$Gs4Hr#F(oY2%|EX9!Wl$i6%U#Dqd_*Yl~IEnrj}m zU;zc#Mn_Eeh$R*TS00O?SgKDvp;S^DbE-tP1H~qKr{NMLK3WGWP^#3d>248SnTj%D zjFG8jpEWEMjKSDKoqL5ZDV*V@_38L@6nD7QgoNTcDj#KF3$OoJ_%ROhjy#|Xj^66L zc}tSdMyk!Du~n55;2czr#eG5ha&l%(D0Kvs#A|a*`?JOElX$d*OTe_!v%oRm$ju6uz z#vf&k#JGWGLkzVUC8ztF%Q9UKgLHGEJNxTyhLq2&(Ol-;Qw52x4fh7gb7tl>tZ|a5 z;>9sR7uQzA8$k?{Jp9lj-l9HLxT7`zB1yc9gS|JAO2JEG=FmEDhHf2n8ysy72{ot0 zUNP7_jb%%!Nm$baSpqa_&-mF_BdgTt&}<%Wm9h@P)sdr%&-bRpf3sS7Hiu`c6Sb+OHDyXinKo;vupNFBa&gRl#K-Qaq_ z)X}Uks@?C+lj$Eaz_5|WOiVfEm!Z&7_+4MqgqC~cxkQ?SwP-`}e)>j!JQ16UILi_(TLtBQw!8gg%i#G~Yx(=ekMU==f9sk)fdC z??F{rH1lIsBRfFW3PUsSM>3}q2C43KTWbl5KBW1}fzX4i)w~t1#waM&We#-j* z?`tn}LH0y`$hJ2IHn}vJUb9lmfC^lBf^y-e}V!01r44b)OdeXv`<-TvfysWUK@fxLR$q&^r%1xh z1|7lYDl@!x{TCGeyGHN-5$PDh0RUL%X!up{<>Fp0@B4mbo)mTmHvh%BVBtG`{Ab#Z zT@QT; zNiLq5OkszJW(HSX2&V$93687X@IJG*1fSE&D7dIr<`Dp}Sua42j(YoMk$QRn$Gh10 zpj~zaI@8|&jJchI9|G%TzUCxdWbfxewD{^o)df?m2J)@U56`U1IjwURf8NK;$w~12 z_FJe;dApCP7fn!ETeHm-k^Qv9y86@pvW8r@xkv;z$+Amh@7_aVKk2=_QEc(rwD zH~xY`Ir!^7AvdgAo&0Y@!Oj0D`AzC}*1rvfiy~_2NtGt9tGq)e=*RPjSY(2%%V@#F zZwFX(u4I~h&iyW4%Va-RbP2g`7=C}8h`a>v@7hNhju1!miKN`W5ae#na&B8@x0;uv z*`@}%Cek$+2%yHtb8|)gq$(#d`qP$k$MU&_9gb9seoCzN`ogF*$HhH&r_ZtRO3&2r z3&?R-x=wPR3W7rc4PoXM8gF;Hd)pwwkttDXO=CYK@7RR{aG9|ao}CR<%(Bz!B@}{CF&@k6u6e!Yk3i5k9up&aM4?6006*;3kU2 zQR#3mE}TJ2g+b}XYTLynhuIh?9i7~ojBg)oMMsb7OUv|fz0G+_5qG7BY8-i+=^owzN|&Crs7e0pp6 zOcC3PWKVOB1923(c!zYU{KChbsRmuEn5J!ZJJ3;aNw-|z5jVEp9t!9&Y>AyMgM0bi z*`F+0MpA;1u23>OtpN$mhJZn|k>ty8SEqvnqJKqki4l~FGg;Pot|~`dJyO=ZZKSSO zouzxeOU3R`zX;} zlc1B+%YAHMr>eUnFL%jL2^xIML3jxw%T()TP^Pknt%=yzYwd@~Tc#mT_ZA?N$z#0( zObU!geEIaM)c>RskE9 zbMwlb2L^HJFOv3#ya+!*kT;zE*^(Z56K(k~KVxOax9a$T{Hcl1e?!4ZaKt?Leb9eq z4;z0*EnK#%;x$|gIeaIEu0@E_aFzq)T>~(Y!){po3$P8$He%Y??GW?p$(7ml9eYbG z|1Q65h86&_6g->-0@?J}GX_OO0OlNTe=)URnjj<#bnm8tqT@>UC8?Fd5f-L^mK0lqp^K+C!oQC;)pJYO+K)2?7J{SdUM380`ziht=x$hyzr+B6tTA9d zD7OE=nE3D@CYD_+^LD0nv<)=QSYdK~V5=Mm)9Yecd~2$^4->z*<7eK&tFvu*n4Xal zU+vY`Oz({5jwjD3x8ccsp{L!a9=kCUP+GGv8F@&b(JKws;^Qlt06}EA7M>ErW}WKN zCSaRr#1qXCDE9>1K?Tvt?`CQXY^hlU4b28@qWg>EpRkdi$sBdWlW>qDtM-Jv2TT_7 zfu?!odwbL|XMRQ(Jo`*jP~ciKG#a6EKcLmIduzsVKVsXB6^9CTKYj?!5bL2TITzWi z_TeLrf59{5^i$DnKY4=4x>&~yrnLiOd*2Wlj@rlEU4;kFWQly0YVAe$9@UD%wmk+a zlt}OtVOyHcD)gk4nU%-z(~dj;Q=qUoum=b~M(vm>-yYh!J=a|bxW}+N6Wf~-7z&|l zVSETfn0HrrF6D}amy!#IU=s6u?2RouJFhgowlBm8q%ti(+o47=c}4Mk1`(&i(u zN9{zet8~a`T>NZJ9X-%@$zv>S*}G`CjTYMqX;1~=@JDGnpNG_`8F@0=fZIfSH!Bt8 zJRBWKCwC4=9St%OA)EpN0p2foS1aq|=mZz&dg=IhCT4J?aDq5vuD#_jpIfwzcS5w5}yuM8)-Vav(@#Pi63j z@9Q-`pnM>sd-O$?o-^Gl@Fg6DPkG82Lj`~g;cO&6=jwGkML%eo+gz^OJik2k$F-F9 z`4vTu%?np|A>=|&dZ2di@kx11(LXy&hj<>&xuZq3LjSv9+(F-VX4;0Ld zHt=6cR6|YQgXMF^EpwPAc>~e2f)+`5P-tC7-cF#S=uIPa`29t-`4dz4Pjc(SRZ9qE z@Chn|YoX<*ET?GLBIRJ4r)GEn=uKmC0k7_Ul57}33r?-Ph40i`heLLd3wYMZPO^qm zjl69mt1#~^Hd8Q#?>x3XMyF9?_G*H+PkaC~GWlO}{pbo!?r|IciY@-N9UWz;%W@xU z%|n7>?s6LyQU6$cYL;*Yj>uIYq;;5UApgU8EvE&7oXnY;krW+e43!oG0=w(UKMmvk zHsYD~a=B5inbqn7SU5@=)G|jo)kJ~Tds3q#u+}nHuv*-XhR3j&eBO?DqD7o%+BW&M zSl5v_{JgNgQxLk1pRB`2Cr0=%((aHb5>Io&ofoM6E-eeL<+eo`tJ@rN4bWwy`z6 z=9Hma@fMw5lt!Y+?ixIFHnCly=WBGNk^)dcLKx1Lv??B|*WaU(*)nf= zt9A4V4Ji6G+%#zMmcF}9S zpcF^OIplKhFPta;Ut0>aIi|V4xdSbSI?uDHu0evNiVXxL`h}c#Ozu+nB12gvuhg3< zpcdix>qUxPYw_C(ax*9F@c!9u8T04lm&J7Ha|C`VjF6F#ix0{2&rCrOdSK}pXaQbJ zjL3Mt8(#;0n?dC-u0iICI;{;wpOsKu#Jq^AIqkj8ww0DJ-7oR7hWmu}?F}?RDiXyn znsHm6c@Xcc+qF5_#wOMy@u*Umhs9qsLs9VaNgxiPA#|M~SgWAvChaYLKy7XWNW?I^ zK>R)(9|#uQ&>oG_VOAacoh`?@7U+m5WiT<9M#F-O!Q5gv4L_pt8bjD}h1zTCAxMPJ zw88Y-m6k}r9hTvfAwoyy>dd)7(b_Nw)2jdus9Lb=Y#)p=@&~j@5ORqkW)1{83S^wk z6%?9A`LSfv7F~KL@%@X74_*JZ6g>0}6L0O!{|^+ne&`4^f6p#5mdzT{rW)t{K)rm0C!;9d_AO?1<$^Eg4KbzX^ZqeF4E z46Xx45AWbGBA)b1GTK2$M_|Y$@_krgbMDzbb&!%b-(?mHwjR`t5qrTF&p<3g8Om{` z0!~EqftciGC`%v)6dp?UdrV<>W+Nc6gq0;g@h;7LoR`C-jH41eZ--R5ax?9v^^aRk72{Xc}PYDoz>sN^1^^bz&Qlc zkIkKCFQbVgx)syBPWWnVE0sDG1e1|qw0>IGG+$9X^jxA3R+0gpPSm>p7AP$4cM)|r z^b`sLBKoKAYYNrmyWbs=S{bxazal+68`^JC$=%>>(LYtL*`Jv+j@ttABE>UJ=f(}@ zmKAe44>xUJCZ(gyyh_g4s17SsRkw2Acc#<|Lyjs(GrJPS(}JRm^m<5Q7GR=J!yC~) z+c+f;JMY=)I9|?dE1>lUG2lyR2cjANmuV3xjNNYZNn=N+&GdZ+jvIt@+&;(o2#}GK zNu0wh5p=&Tx~Z%jJ=ZNIG6)f+yBbxae+sYYmqRpUtkV>!M_X+p27%PpK(@CP!sp2T z1KT@1#d(x&FMv2Kk9UTr^@B_J$+X8pX^Sj~bAVlSz}4FX0!OYhc3$3oBWv+IFt=Ng zA(#}4=Yma0AqV)%8Hq%R&bLNuY4(`Xay;U^(IGY>O}GQo(Hhdrk`lD>X&B=@vP=k_ zOtBYdnS=5*HEU3MSz<0`Rp?`ggT|-AwY~C{=An__pNWUvQ3r6BDUr-+6_vN@=efhq zYk}rvVI8~svRN=X!pu6$OG&mCNnlG1gT8U-XjlZ`Ty}LG*%GT>`ncTPXU0&aBaI3vk*u{yGE=+lNVQq z0n1bPPGpXRRSz~88GTYYPoQJaj%Uv~yS%o8Xmu1ZZ-dmBkta?mwg%h|z>x*>qAKg@ zr#Co)Q+6^`D@NgR~tz3#`MJIK|ZqxQAjZWcOm>vHle1NATvxpR~<|8HozdB^9PtoM5GYjgojse z*|Ve+TIKF`^rUSy7hSDmu4`l!mERlKG6xqmD6C8Cz8vXFtf_CwtqaL0rAUP(IbD8C zn1voBuXeV3p8?&Y(NTs4i|1B|IZ1!Of-`!-a1Id$GX`L=lDUu)NCrWyqF2~dpTn=% zcJpG;=L8jWfUU=!AHCZv>eCH6dKN`SngaCmvtzm1_V`G6+}H-2Oes!_Ez^9!$>JVM zZKL*e#Ik|}I&$5M6GRH1)t_O2zal*7jc462(AoZFUC*bylOOMh@nO5SYJsqBHfzrR zb1czqc9)B#S!RAc7mT{e`#OB-!@bdwe&C+?SZ?#*79wHt{+QV$2XF_rnNk4Kqx{ht zqK_&fHNy$Y@GJzhXI3P{(ViLgC-`**Knx0x@+06#n4sG-W-fxW84dU!6=@BR6NCN> z3jc2w9{}0P$ZKOYPF!2HYd>Z)GQZTe_lY&KJ12SY^I_SDMn3R;hpfC*q3YI00)?G@ zEIkcJG~dh9)3}S|-L?}!Mgy82YKY7Tu;@jykuk)cnseoUor4a9MHHB82h(Fd^p)ct z32eJWI8}^amnu#3sX;j->K^@ki&6gO{F5Hfwx0QRERMkMgj%x!?#Q;(g!Ki#&AO=@ zM%k&|Jk)NIi;(#!DRoU17uZU_pWGva_`rjbN?ex6zj(s_;Fn-d7fYS_&8`s{F|5%% z=^V!jKhE8*Gj&f+s={pNykIf?PA;hRRSCf zY7tO5#Tt8<##FDXkwHCS(kPpK^bmNHmU~yP9*Zxmd%G@gZ4zRm#C_on$8+_|ULU9; z-93)^YHPA0i07aG&|c5~sTyk0Z}uu?b5~*f3uHC)@jRrP>8p-4VkDW;|JIU(%Qu;j zEWJaY_fQ4Us7NK=Pk8o{^dBfZEdIGKPOJau8S`IISQxAV=Wj2P{;SX^n~(_TA#^Mx zjk_40Wemr=;MXuWpAZrLtXtp{X}6AZknzYDk@_K%u^;E}8^Q5_>uL1b=P)fnW7|ps za~W;YMZjZ`4JQ!+`X2m2rq2!5*KGI3Jl5(mNRaNSEHTQNN-~$r|B~-?MQ0Kkov~tm zWh2ILuDwETL8e73Y5FC!-4TMP(b^vA?{W4|-S}PVWF4o!x0Za}h>aXpl5EWn=7NvU zsN@t?q9u4vOkpmoPWMpRo&ndRt4QSR6*v7x7|or!Adzt^@9q+>11{Z&dKhWhhq(~g zpS04zL)nIdIf6Sp#YY*LV|{T;^KjhLG?f4^crV<4pIfuws4y#7?qEO(wX~yIVNb^p ziA2x!liWgF-EiCt^=zCZk1{T*1tV=G&!Qv=z40Gm`FN5ZM8`1v>`V;EfdOc$k#gKz z9C>|VPN3`8etUJ-2o_;CUeXHT1q>oMC6a+4?MRGToieM{0i?$xf^}I`v*vqf*@1g} z{iqeA5?w<;1ni|iP^+k`4fwgpHX*<2zA53dZYPguz3ScjG+s1rzODL#RJeAPsh%;s zb)!(iDAZ~>4zn@>?0jmH#_VgP3vc5&Q?xSOO*oz}%K;`nq=B(~K^s{c^r7h25LGxH?rsP4YeY>N{47AlELhs`=bk-8#7`B?_ zWU4WZ*uZE++8GWZnZ?*iJoPZE)40reVl@+sn!wCc3FP@%wNNG;b6vWR$5DVul~{(WDq30O5m??o*Uq{)bnh}ofB!9YyPmV6--N+ScMh5~Ius3E9mbFCgNutCa5Xcxsg)m*KCLY`RdBo?d@THWBiB0ft zAg&Z1^4oI2JcYKGUQq_jDnm`*Ub1P_!t7y8QCLOYhS}LvcFl{U!QRJt2mf*i$;xu+ ziX9o#4moc2Mx>cf{m7F$Q&{e8{fR{xcilfwctZGjMyxe{co+IN6x^%9<^Oej zuq=rpVyvT92j$hCl?BLuJ z2UxNcJaHHdDpU=xMdXdlSqmFK*E^Z5siP0q(Md$}L=EMtO;vO*IBgFqAeFC)GND#= z!qGf?jw<9#UO~H_Jj?Q^u~XhhTJEH+p0QWH239h;x^MV}#W!D@o#s0VL=oSlVN>a0 zN~L)$!coiNau-(dPb46Rj-s{BCWjRE1dj6Du|%>O29$9TMqqNQI6SNwiG~M&R2N>% zZ2x1p#26yOvFMF9HbLri9h}b}RNG6N$~8~ROjLLXnt$0q>GoHQltYKQsA+uIVM*6C zF&1psN8_hflBi(66Vb~Y21eNn$E&83=XIH^d?;+rs~` zvggGg8O>{#Cg{4V-MVknS3F-BgpMP>3cONu4Bk_+(sPA{bO{I7j>jvqT?6jnBmLIa zl?F@ug#yU!i@=UeFOQp`Vs^vfGV~O}QAJ&OLO^Z8fR8R8|t+i{+jz*PhSa#rffA z2*oHl&x9>xJ)gs1Z)SbFf;Zr;#^jPFE$&4`m$e^$SEjssb6~!AO3TE_ZlTQ?bM0~W z>M!SDi>f-237>`Cjk$K_)u(??aDQ1JJ%yWdq=qIUWmva}!x=^T+M>|v8UFU|j+H!G zo~cDfaWYweUncmpT0YDTsjX&2iDTPTL5(|{m2`e=cuJL@c7ZEJ2N&`)O4tK3!KGMT zwwb&_0UQw8?c4%Ps&r*r8e1P zNa%trjC^*awQ0Q_T&XY>w8qRSDOB)isRF@xVs@82&yhl3dBn(}sUSw?(efr{nqB=2 z-W~lSv~Sx3kG(A=qYvJNjml#V`g)IFPCI;g-I8@rnx0EqO`y_bq%DJ;u7P>H1<6oe zC>F*J&g@Ed>w*E@(6mHbS0{u@W~g)_EJ+NG{{w}4@}C#Qy(b?{{9EPh#i%x&pBC}& zOaU1K!1i~m2i08<@kW*?RXQ~LZs8n@inSpD3Jx2_jy=H>Z*`s$Subexp1VR6^5GTZ z<${mvT0bxsm>F-JY*-Kr+L@K(;3}KqpgAA`BdZY_C~LEAvcLw)5%`Y0v6HIhMVwZ? zr)ploQ08=qvK8H`-Uu=Z-{)|afJ^j-&T^(I#tT;Y@WbM=|qTnj66_*?Pc1Np-Eg=;K(?(V3?J{l5lurUuV z-_kg4Qzd*KtUzi@iz%>7iII|TD{K`|s$ztt#f9B{nr(;hUmq}6Ti$w;<%_v#z0|Gk z+;zvSP%f!-E(G7NffK5lcE-+XgZ1Rt1*IrIO}ph$-s1%fwp82W zZ>BOJC!x&IWILt1 zJUwYi#MnweE3Us?#LX_f8zoPVFVx)_4{&Mg*y)~F>VB?e_(S542T#wv@3=2Xllob% zJ^RH292{{b0V1SHpxlP2&mQbb2+=Qqrck1syoH*qCBYOrS5Q4athJ*IoEAGdNF%6_OZ#^~SVvlc!H`rSv9IIe|r zk3^`R@r3G^MQh}%NEY2uiPEqJ?YJ|ebf&Ml>u^+)q)d1rRBJ+2Defk&VBEkq`e5{< zW%czK8ZX6~)!Y+Q>}|=wTKdhnm$XdSm*G_gOnZiKw+1muH`gTynIGI#7_on%(wKJG zN|}#KV7$-Glr~S46^PdvD%s{SrKLh^JBZ@8Qb46+u8T^W^ZeBDU!z+DB#fh1aiRso zp=&9^z^K*FI1qD-1E+b+z1dzCiR_-8#Dx=-ZCi3a+6P#sch8nr!@gk;umFnS(8Zv$ zt}LUCx5|URoF{0mS5)^qw|f$VN-e43UizKWzjPhLZ#E=bOcIQaIXg;v^H}J9o|_6= zZE2ZWQBuCQ6DYZ2|rfG(I5wTo%_` z_;7Um-rj8NHX zD6hBHXO!&LQ)z#*C!mXS?$*fe+otsH?vg(KF(-(^j;cyhR=eN-Lu3I2mme~BDa~9C zek=V$0-oIQ0bXOrxpX`~=&)yEZ$8Kvy4b6-557&Z@EnwOOh3V24eGkd=Dhge=N*|~ zCl)+&qit%Vkvzo5PrLUYNEN?g@6FIgii2Glo}Dk29<+^88BX_3GPH%qq~ zYzl~#Q3vG;CV7ff&|vYUMANP2g#U3>=XjixbA9(Chh@*ZV_P58*(W8V3DL<%;qOGP z&q_B(CG(DPai?Jjo36l16muH{B!T!T1u!$%!l)8y5ScWaH(S~##x}2Xg5!8bWlCv& zqygHv2kt3(D5Q!H}5U1*-2nKFU2q^qL6 z^6b(IE6O&B%YzT^(V2~ZSH$xR2X|8BKRbfuQf3=p9 zRTnm$WPj)O%_iM-Fckl(=Ye5=>`NoIJv?HGrC2;pSMqsrrvyW3YrUA;5PA_TVI6e_ zF4z`aYEn9rPw}K3lbW$vkOY@fl}iCqfD(Z+ns|LFfuSCV3XLw$=#^p6g5lar)YYYE ziWEKRd4D>pP;pANEHW|ysApW`k(wRJM<{&fqFq27cay_L!H zmQL4xl0$Xrq_b@f0%;ln&Uz0BO83LF^(*r=m0%t=lZ-T1fvWw0(zC$i^wC$R?^qH3 zNfgHR|7;Qm>OXqO|973S>z^6Pu)%*Zfy`)~GysHn%PL+J+qIEk&9aNJokSWlAb$r# zjNxhwHX#}+SlV7SImT#lV^Jozx;G(3^J{Oo$tj3Po287$=Eg|AhT)YlNlwXO1u$cX z9gHI;BKy{0s1Rq&f;PCL$YloV=d=BOy@_UK&q>DT#h%9wG1Cp1UrCH-_uX}7Ebz<% z!Fi^SJ_3U_D5hpqdT3EhTV9DK6juwJb&Nwux zLaskYyVG&XTuKYU+2F(SV<-h#Z71VYdB~JPoBNCy!89)pQzZuAJUn>N7(6#$MTn)O z(-6nYjC*S_zQU$j`-Nb70{F>E7GMnTg2j$^Gdz1+vq2^x9l{*I`()|I0G2pC0Qr%m zVG+AUrqViru8Yb>!j;xUvI!a?r(sZl!)-fuKtnEr0q8<)NN}1P5S4%d-ms#HH4@K4 z3?(22ZnTs&w@;Q?MsRmV)^ejMROp$s?x>C2-ZOibfx;#7+{l8CQ@2D#$i>0$x2_h2 zoH+Al-SJ2AUEW$4Kw9rQ%}z{5`pKTv=i*991Tpa$eqa$>*C67AZ!h(pTRqL^i7C zCZlj%iCq8a)V#UqT_i3Yj1$qPO@+7^@gTI`*c@wYo8=$sU=)|!6+zah1$|I!0upkg zG6VM@4;(e}q{is!)1nIU)uL(pn1)(fTD1@J4nU$5lT_cn9k9Tws#A6x0^#^>X(L#b z>_6exF4vSQ=`J2^PQ+!->*7oKXJLa| zv%vdK7i9omNi*Mu=VvFF)8%QaW~C!;vnL4TJ|Mevu>IZYTx><9$*i4+>m|9(DPjjbQnG{Bjh5BV zKQMbAYZY$1l@T7Pos6B92;pEY(;daKS9h~m#ve%|#te$_>^Rr};{vISpzen};O#)| zYvu;McAWGh(?vgxXLE%a1Y{uvv!1i~kBIR#5a28#8oh_&a1rpC)eujw%y4EDqM=4C zI4dAGlpRLm3c293PzM$;0w~6obv>|~ie;BrRD567Na6{d907TQ-K~>z z&2H+btX;&xOuZJ25la|^+`?jWs#P^^arSLF15*ny;EX^7n>bC7?<9ihnWE>iB242! zJ4&FXkNZlfj+#OI*@LH&xAbszJL{Jr*)DYhEy+6qD^9X$KAc=p+6!E4v8V}LGhpsdY41`GPBss7sXO~toPpX*$@Env;o8(w$rcn+2_@Clb?xqB@Yoyx09M0zYEEJ`0|it@}0%3!lKS z1OZPgykhTM?Lb<&8UcgqhRGGow#~zjY51rRRCL^EVVp<8$etU%@Ry$^ka&T)XUWI8fEfd#)g#pV86RLHA#gfFMy)qg?_eY>D)W)dg^rLWji}F= zHnzsd@f%DZgh;P6f+5mNGbiq0JTTE15la}0NbN8_3VLrg0%sp#luTe z1deOmNXh21OcA{^F$)vhoF`U4jPZOUoDLUr;2TL7;=S`kCptxEsqsS{o8Z7^?19ZY zhK15E;=#+_ST_x-+s^)a1o65ZNp9?`pGMC6XpN3osF-~8dQk(bIV1FAf_$NF#NE#A zs_4y_ht&Uklz071*d{zgNbo{Q%lEkF$EfrHlh zv*Hn9y^UGw-4f(i{6nz+vB!?xZ;0ScQKm))=jJf3)fKIy5=A;0+FdkfJTx z)JBnUqwT2AIby9a8x`BQK1q~?c1b=wUNXZ_9ml(DRp-!%#eDdO3qwoOcwf7uKts01 z@Q(M^-zwX0{|MB|?o(uNp9)7)A{}{hVQ0%C=f@8ZkWWlMwu2o^_3+LV2#4$V{xo5v zqUS_YjF8)w&R&DIWlSOT5gtz$q%QJflD2vKpP5QRyKL);(u^OJM+^M&(DS=GC;)1d}*J;1-kNTbwS4O%fufOa}i#JrWqvQs~R zj_B3vNuEKkks{op`Z`gjy*9vB5olQJxl~8Z z8t>V@kB6x(SeaY=F(E zuoGeJS2OylWhjaNvUXsc$ykkyfK6C3Y_Roc{sG7UWele-g~UKThP}lNkMuVLqM;SY zGN-U5{W>+ix16YvM0ZQ2dEN}*Gs8{BVm$VI-oPlSFhWiR=Aj+88`8VbGg!+3`wzl) z3L2(kK3bH*_QnWi(q6-y`(R0zTJk9hkm$a(W3rK*m8zld$nkTy?Laib)iv#Qg4-CW zDt@kjo7O}k1z{h2GqW*OB{O%N%8%Z!K?QJ33^xX-CAIv7IgXVpZyw9hjo(i_r#nl%BK+E6s8=7ZM{1 z1hCXoS5Kg$*JQz@%gpum_s7cs((`PCN~;y0XQwva+zcxJOu{qbY5#jD{ExKwUw;6Q zb7FfZT$ioK2mKzkPO;6ern}f$v8ikK^}H(ldU$`2n@JI)H$a<_cGGw%G|=-wAu*(@ zTU>Y(#U1@)rd{=C^C@j5g$d-%||Q5kj`Q!zSIYw zQVTzZEog$}|3Q(30sHlOtc5maKHPnZ2XApiV;9vndOlSVP@mCwFAr< zOY_P%-Lh%*4AcYB|0F8AOEYFIUk(GPK1lKyrq7e0@bM@`Ai#qmIULDrTzc!W7>ToM z(!Bg@5Yc|+oC-Eq4@L3)6g%6PLjARq=c3OEK)e6J-n^Qfr$g4`vcp{XaG_x4>~6LZ z8Drxu_G?Y*+0>CzkK)Kk0%;V^-kh|g4NSVdhMsqM?bi|?gvJA%s)`*%KnLp)ml7ymijL!c;r-2mT%v${@3v#cy}2l%10mw%k7r8 z8&@DPDH!lN9*1lQ$_QNYRZ5F7Za&?o^W~sQaFnzuJ^_jbvk!1hKE)sLGW7ZlH z-a34Yg@gH{->3TY$9V4ix!`hzJAW5Cil!ve96Hgla`Y67`#@g{A-UM9#%Lni^MHEO zn*oV(%p|H$qP||I>uzs)Fa0z+)0tof?KWWqtcMw(SGLG2aE&M+AFL2`V7PKp?L z?@X;oGbi-Gx4sn1Sf$uBUmq@AEr-=*N~t9m_EZPCELWP6z{hhCnMrA;0a*tABBa_L zg~Fu4)nx{cjoV%!tdT5OW^-b`21&Ie0Cc9efZfq4oblc%iOV3 zua~vL+3+xK1BXpSzD2iJmMGD;>cVS4(aC*h?iYhoo6uLwKE1mfSO3f^)#G#kkVa!G22FIBn>Bq=2NiliPq);DX9Mti@i@h@ZoY1hm13a`%=6a40I<8?Ri`Jz zz};x!vJZbFq~8MoEnLtUuyktsyWN7{&AED1YXKaX0@!lF7=wnX#|w_?$pN)TB%pzf zzYJsm##I_@VirUKaneBvc5x;V5gsR)?P<&(i-Pme>dx-3&IbN6q((}L@`^$_N+VHF zP#nt1fup-oTatliuah-}oK%Y9SIC1)*-`?Wr3 z9{Gk9>ysy7T~G5L0?C4Y+${whrpconzEF2hwGhc^R;=8SDf6Z}ZG*6SdWw4F>_UqW z3q~CkNHnoUCj1?e%cwQ@xf#1hCY7e(e%4A)fJ4%bfQvr1kpT$Vc=S_*&PAVLhexBM z^X}MRs`iCvDSZyzXHSCC;`OYgx1B7Q#-NuZzkTj}y5;-Nk7o!`qenqS)ENuKQm2lMzmYGQ#}y1t zd5WAbez?3kt>k^ncI%)krepe~^5oDU2lgZJkdwMcTteA;V|{(^SV5;jD4QC!_sH4& zd&%hy!Lffn_%uFb@*}hEd9WbGXl$8DC9F1Yl56sXt~v9>>->w98k^#r_unNhR;s>6 zf}c&^JIjD=_Qqc4e|dL)JifQ)_s@j{L+=;yzbqvfq=|JN?kM-_xKwc3vvExRQ@m`H zmNZ@xYnwK;Ch@6ox#cdmsKnml&ABt8xto)cJ_&;I;)s4*_|c-YgF@`!KIh~F+0Phi zO`OrO_>7>KSLItKUnS$jTa*OB*ydRJ&R8%~$nTEf{3W0+i=||GTZ55)6v?3jJME+| zv&U__m8aQ@jg^hCi?fYF1g z1j)n7dEQprPmF{dxx*yQN-X^=9+&B}kJ+;aU$rTN3{_1iDO>{~KM2Zk2Fiq8md>Dw z^cWjHwC|8vT;uQ%^Zl&riz<72(Ck#xY+mu-zjE#0cqf zkZz=43)MkLGF11%y=9d-K~J`A9K?XdaN4O)^E$rf_}Lj|cBDQLqc~&RqrN|QYYMHKsx$@Wh9!Yyrbv5b9j-l20%`Zl+o%(|O@uXAQp&HwiOa^k{AVPNrH8y6DJf&S7- zztI3jZog46bEos<*fqr;NflRC?bP^+(a8KiRLaCJd%FTlaUh|#0LW6Ey;MNEpSTe(M%LdC861L^#sxJp61gM3%A8< z7k)oWbn&~^bkluO&u!S9sFU^H9rchNJx!-`^SA;wXJY$$UuOBXUEh88e5+QC{&7OM zx#hR505wyZM_F4__uaXo<^hqD8FSA3*P^zIp0*bKj-2B3Zi-E7=@sH6Xq$cijPW6r z_vPliG!vzL{`-QYzf>L=tW;WGh29_B%9ohC$%8Zd&A={2N){cXblzWDdd?CY$h0Yy zv|u>)TIF86KLDx+A^h*0R`oM350lCFT&xSq!guq82KM>_@+qx8;3KGli-}!g0SPr_ z(zR1G%wVgR`t3;X0=OZ@+>k=5K#Z)dZ6g8`vi~?ftj~LEEe=@t=*iIpXVX+5`h&Yc zCEjp*6{qmzLjbd--$W`+hir8$b$>1Pus@pG4w=H!V6}_gFc2Wkv4(lJtm(!e0GkIZ z0*sZ$Fj+Qzk;=W+MwYNhiG+tqJ%KB42ex$e1|dn1#9)_L4krnKDKcqCEaUgF=N;2g2EjUaerrnhcM29x(~!TsTYUHLB8V7$=M(Q! zLJ;cl!I2mUC@DR^YlYYS#Mk$@3&#N8ecyk)`1^LvZI`&n;mU8va=Nw3^r0m#?CsQxO}KLw)gx@aQTGh!Q|wSX<)Mzlil$>#Dx zKY5I~fi|qJTZlx6^|Pt*$pKm-XPc-BJ%t3=F{wB-VKQ3uCjvbOmM%y_Q)@|(GtwB= zN`qtuc9zt9$Oo>0@#!_LUt8Ifd(Er!1&|WR#MqfHP4ZVBr9? zNkQM)-=@+~aL$!)7Ud}R2tvIw5s@Q}kz#trUA_e>y4XJInRO;0(C^}c=GbI*p^eb` z2n7bsOpbhT$0O1nvCYB5ak{zgD1d7RyDuaK5y73c`gb$eygcX95;8K{J9pw@TQ;&z z;`cK)HGUbY`{w8dynXiaW9M6K&>_rsKkKOzD>@lfP6+GdU*8CLm^S;~sfCR&1O25{ z(N^J|H&cnMpJP0XendOY#9%W!aL3leAAYwSDh&SsP!0`g^Uyw$=f2z9{;&@%f%(yj zC8a)=tGCu%n{_cdk}B9OWy1pWQMNIo{7-+^BsFhS$|SA)&Yk?${bi-Bjo|ydla`#C zTPq53ro`JeYX9(iqd7o8dX56kCNFl=Gq7yP>SKdLuvzLz$GP7>WG;5~k&p;Nf$OK~ zlx6?!EU{XU z!}CA)oC`VnA1fv8+NFU}|LH|sUl2VhVXs*D)RU{;{pVH!(jnsxm;nVhkMBq9^} z3@vE{JJ`m!EoHs1gZ{}B7UI7jh|`okdL&4CttWw3eMos!hM&K^T-C{(1K>9H@3!}W z*jiEBYM44w@)6)ymEwb3p9TS%eWwwsQz#O z3g_6G(%v+Ab@o11y}fApe3#)ODYwLsw40rV_R40*dm8l}enXV74I95DR&DiCqUXHy z7C%m%iVG-7`asnZ;x0>aoozYmV?_&QcWwp5qy}3dy3~Aet-vxd+`I11NxNx!- zlVh3WcdD`4|5?0cj20%dw_*9?ImJ+LwC|EJNHGYFy|Xe3jl<$8rpw@~43%a&KZJp& zsg91}xf%0(7UF*h@y3X#u_(-XF(RvP=c%ca`_Xt*odk2vZb>~li-0@7vP2;5uVXnW z@RTUu?W4CRg@QVw)20o|l4Z&Mf>wp4rFepGl=(RRo(N2~F2FDP6*@bX#Tef|)2t1* zS$xO@8ADBbRQ!g^rhJyykGQ;0l0io8L=3dg%2#ezr`0< zk~Amvrn#p%Y0=$9pH_Wd_)9tM{-gcJ@1nUyKVB^*fJFG2x18j>Rv3VhXSOv*8wLCY z_$^&@1B3Pp2xxb$(34&+ef?|qt#Y-{CbQP5`!M;-0(h{){ozHiQaegM9N$uP(|b1X zziPv5q%Nay+|nBA^vC@%$e)uvh92?6d{oUt&?nry?MG9{B5wS**U4a2y zC(3rVQ_e_L$JREe4rE@EDpyq`nyjnSU4O}t5Eq{CzgmMNBeN(97fad+H z)k=K!K+!)?@F0AD6|2$z`AV{hS2+$}{bBRgQi5SxhV11m6wvPmrcY&}TW5QuMQhMK zy-G2@d-m`@iqoyliq_cM^NtN?4}cz=OqUo>Bn>uhF4#+)G8z}}XruX%i(zoKfDS>O zq3-QH&=};Z6VByf;5s8#D3*p_hy-jfR2WoFW2``XxjfTzdP;PM=|)}AO30IPZmt~V zrw-}Wm)2&T>#Y-z_3FrP4qTFo*nCHV-l0DQT%^)1t{Uf@nR(B4+e0q{De&U$%C`&r zv5Jo<88`AHcVmD|meCq#Fw7kb5}Mj8KoZ(EZ4+wAlfKV;HMd*ySWtor;vw=w5*$L4 z2)~}E0M-Gpjr%V8_3iufVsQJHQ*BaWxAYNfN9Vjv<-bdh&W0otxL+*u6hy48q+a>_ zZrAV)PQ5T2NbYq=V7OED_h<@V!i^}t|J*OHd{-E%VYfcosa9>ef8nj_8*b)Y>Y-bg zEk_p5|3&dIfAP+*>5gJcrOTPKxiRM}ZR9rffU&k>%W1vKr&iPU={D zbVP&K-3QeeJ@(H*ww=6cZo}>)zW&RD4?8B#J_$06I3+o?;BUwV1`a^qX+!ToR zxx1FTYkn^SpeLSjmXm&xKfU<+9}!uX}1v3==rZ>is7?dJt$N z$W>W>ld5HzFJ+z^XIF<_l1&>bEdWMl$C@J!a=3_qymv`9K%-h5aYwuN5R4nmxd<5- z^sMRlD&kl|f(fw1zAMIVr$q4(#2ZE)H-ho3UEPDqGl-VfJHlNw-IKL}UA;T391?^NT6ZwLss9M8&U4=(x{Vmo1My$O8X_IQ|Z!DyVOZ@tEOiw z00e^E(Qiht52hY=gYX*0#(hj@|FU)Yt!^b}{25tV6SojaDE~vkpYT6()~^4aF7Qd4zTUD<;20}gw&C7>|E=%OYw#7$V)mEN%TZIM27CTk&pgWJhr$Uw$E zbMmdThc?$s%V=1|0h~z1>#^MZ>&FTD%&Zg9zW0lsy!bVNSU;lAukG5pdEexR%4-kG zJ?%`SinEHXTNk_=UO%;^j=zi_P&u?ZgJb)iYJL7eHo&4NB8)cQM!@EL3EA-LV^2Wj zp#Hi;CwH~_4On|#9N*lf_z~nk_UGuHCe7W&ug%`y&7Szv<7ZvVoNDQsc2iDog{a)9 z5Kgk0w~v@GMB${b={v)hMT7}o?{Z2})AlgSVv4hd>BQ?bv>)!`_F)^iU?JdNjy`l= zU4C=a`1ai=$U)Tt#l8XMP(8xnD`$puTU+BEC4N)EU6eylPLS%InDuxL0l8rUSD~p_ zW7v}2N!EIeIO*NQPR?Ave3aF4Koq^-%C<8J@L^JgB{nQ+W|w!GR(gxOAYpZyp<;k-}5_Okx;$H1hhLEeuB zV_%Jgui*DCXuPtiYh9zx_F)6R{PEsrpG@D;F9C@;g*DTc50^x=YBwBtxAI8A^py(sBH%CcG5Sh8+_8jcameAHL}5PRub#L* zi-!+u3-J9!xcSWHu*zAPLKtp&d#w~RsWul^*vNXsdqb6=G$EyVa#TCVkz!c|q21ss zklgL9`k{CxpP7*yv@B-uea_9sr^_sT-&MA7*N6gW4X@&l#f`7Z`4uaYiwVe~yNUz$ zxsB)=94>z5@fMH>2AjMPzPWmwl%w3KSa~I(FQO)vmjt(Q*||owClGOhAKvc%cHL9z zxi<+XgDioD7dxAX$QodfoVIy6iBvs+%6s5OFy3lAvv%{}?eTGa^?QjxC6{;(hb;E*L*ld1&!Ax82&xuG_gFW zrmia;v~9T#)|a2V@Qv^0`|N{<{{3Gmdybsk_vhOE4u9I1F<+IH?!v^{_Q&13v~6!H zXHL$Q(_?gH>VuXTt5SbV(_vhTwD-h`EDgUHS?SN8HSHG6#et%tyMi7yK3qj^%^trl zRPM1;mB7DR7%L`n1{`aMl%a;PCzP~<`4>wHRWB4ahXvJOens$^)>EctUx!?}b$fD; z4Rr3s-|X?xC=tBkUVJx$tFSG!*EHD|nU2d9laASl{F9o)y%FIRWw0(0!bFf#E6Vz? z$EG|+niL;&Ks25l+dOS+rdzclwAf66!Wvj%X35%D#4gMxDfCF8A>-Ru-}Y= ze*iv4f&obC(#%jDQ5l#DbSkf7_;V8z;sys5MHpq0qP-=a#^rpfAR{n*`0SFXs9g+u z7lPys&Cabcl@z{W>qyG|wR!`!%x{SO>XiG%dtP1p^{aBnua?9usk=6O@V)*#hIHzA z(lYJjTgxQxcf&Lv$2W&p1R3$HOa#B3!0kv0gEyZ6=QZ@7x?cJBuZwr4_BWiNMT`00 zF+XD#=X?O)A4rLn?j)7YeKK|JSLs24)~Gk$lfKE)FR8-TJvV1{;S3ds0o2hw`h2sJ z64W6-a7Rt>_{pl-RN~je9Y0IsOs;&7So-c5_@bPPU6%|qKmtp8bC&y!`?6!vWUo!- z`h4b4=sZ|_3UXt>Q`h3LyJ0|0nmqo-Y=^NXBt_Fq}Y%b)Q*P~JZ^^3{N_*Po>yh0gFX z?diJ#li8F#md1XI!rxyt(U_uC=SX*ybEiXx)nKWzIr8~vjHG+?4Ujv)Emd8#`+k8J5D z{t0;3$%rDXSuLKJ-4SUUc0j@C<|UqwwztIWNF`b`0o`gNK(NO4W)9mKzWZ`_Uv}}q zadtotGAJEsr%67k|G0r@9(Qn$A&XhfKp$gx*@$y;dNe`A|qhO zI+HiOsZBu!dO7Su{k=n1jm+P;2?`w21~zW^CjzrENcs7(BJR-H8(kV6=)iy>7yv?g zuVIT_DdX=4xz^rcv=S5u=z_@f^FvkEo5smst2Y})ypZ5KF0eyY$P8hZ5@jPtiY5;U%0H;Wp)ZD`} z_t(#FKYqOv*X(XcHgeYWtl>kV=$UcZ(GzuhWd?dI8dbS9^AArnhpJ?&K?0b4@C^!X zjm5=Wi14(yZ=_wA_X33=wXDH$BY8=?5z8^5VJyH-_eW6_5F*%y?Tj#cP4;wQRe z6t*;HbphZIfh%1F{e~;Uw62CS@CbbCT4)|wG`lMfV(8C~{pv29hU(N0gIH-d6u(un zYCqLo@WCyhe7zl74?BJHD~6fTPyR}ygGvu^SzB2*t=J6*=jBPD1imJ?)kp}dtqqn3 z3WT0SWPGNoOD=JIg5DWqF~(g8iXsszR&8W$VysM8V7Foi4=E$sxry=AG#)$bZ{df^)H9WUyxkTetv`01)%wRHlC|G3TfZFKoBp8_-s& z>&jttail1{%J+xSdT{vCI^o2CB9YIZptxNlz?Bk*=Ir>DTPQ#zTxs$7qc=n#DG(bODM84gPU?>i;<)(6CeYa^kc1Kk`k6*Qj+`XcN8#CZosR2;8xHPvgyd|uYd0uo!N?fy2%}Z zW2au_Pr`_S6D77+d=3oL7wr2r=Rg0yPub>_A<^+Nwhx6UKm(e3cHK#7a$fMyckPH} zu&4g>-7t)s%d;F=p@Q2$pQ=tC{zavilN*P9%O*~1DVV8!@VJA}ASeo(q1t27f~S6C1Eco$+W|JFicX|x%cQ6*Ta7<5o5fLx!UjBzS+k3Z z%563urAHKQfsU8%GG4xgB}rS%aeF`h@?$v?wx`XjAV!4&;CiST<+0%F}I)gADC>(hsT|F^|(waM^u$7t2c+fvx%efjlMZ zIeV9}Kff&}dw$-KU>x)F_#mOpqRRi;(mw*D&wW~w`da<+?ukPEititvNHpJaeW~{x zH@#gVb{pn17ti1JDCZ?_rh_g)tf8cfR%C`C0#&+E*I?tx{#D6R_`89dP?Id#ErBtgtjFYsUCI~>`iv!HJ20a>y z3Tx~lXx@HPVsW}o8ZbTFaMCk)_Y>}hmA35Kd`U_#4gv5>v^PF;V|5)zhrgWtaQ)P7 zsiF&9q40mu+AlCxaMWY}hqpJ6YU=LWes|^&LP!8{2LTfZF(B&B00cx0Bm~f)VNk)U z%>WS)l}SZwZ6-p%06`EEMH>bqDq0+imfI%GXjCT0ss&N1*0wmb)!war)93Vl?sL{U z?^^Hsyw5p*W|92E+Uwfi-}iT2pR32TP2|_t=J6u@pLefDIukp*Qns+PsxBv@{(OI1 zEsB)H`V*@I(}03=8Dk$QK3-xPj#{6}(BPq!ksjD*_!hjbd!b^EJ9!SXv)0FF$Us35 z2x;kqKdf4kK3?gzSbTNt`op)^dqjH2a3j9)$%7Fd7LDsFE=6w$f!5{U)LHZjMt|m$ zTs}r1lwpJ^rc66k)eo=Q`Sv^X*341iiHY3oX~h~ve71kkGh79y6?!7(?W%7!y^2oj z7WI6gM;au9zQ2?ekruDFE8X9h&LO9$%4eBDdy~nr6JEUwh@Gx}i(r`5<9le@uD8 zHqq?#2QM&ZqcR*k`NC&j2PB7HE_(FoA?%vu`&*xxYHjgWTW2@VOV*Z}xd+1Ub}!pZ z2b9je^=2V4J>#vvL$9W-MsCO9rFSVSB>m43Ryr-Hr7yKa=oirE)hMsv^7$Qky zeL~&ldHMB#WmiPk!l(OZ7Qc*Hxlh>8t%LzSdANhl z2utybSIxBH81?Aykh34JnwD=FKCUH|`Ksb-W*nAZA`;Kp@_|#%bJ5o_GKYNa% z18#kn690gwxa`sYlXrZI(fVcq{izpyFGjZ@z&h8pM;Lr!iqyFL-Vvdy0naS!CMhjv zO8d#RKOVn~NHFXU!)4#>M)+eyX?w6n*I)xKf>?uaqtDx7;_j6pfYEZ285{fuc%o2u&i$B_^g`KpKd|a7# zd$WI3VBVjYt?j0i+SP>V0AIMUsWP8xx<=D@xQVv5F|m}P(l-n0Q+`)rd9B(oCR{B_ zE?QpPH;Xl?OgC(w$Mu%1yH1yjD79&L;%n z8QzrnT$g~m!_O`(oaYz6E=W)jy+nL(xOt=ZCL9gh{=5_>nKzNw+r96~0`{KKhn)V4 zUw-@O%kgi%{o;?kCzxT1Wy7C^=|foW>R1E;^LH8BcAHbVjLF-_v^YEQmNKI^viEee zJM+V$A4AVu7R(Jro6>h7YYxGD*uboJH=1-6hG^*9tjczQP3XAgbzOrm{cBPPDf{Qm z%xj3R#w0}xQ2UXJxA{p2LQnscto+;1=sPw5H1+R1FAY5A6)OwXwR1N1kT`6o7uh~N zMU3 z`@8|a4!e;6!8`~ux#}P@dm)<>60L=Qaxk2CBHvcX4xgnWQ*4x2TPeaMMhkq661b}t zhgh(+M zcDPIA!n|@7ywdtxN$9cXG??Y!3;yEeKVJ@NqIeTSv*tP^=U@2v7$*B;dt72QwWNjC zF2EUrR(rZxx5iE;qPAw2I%xF4`R`18N5J0L50m4U{`~yr$A9qFHkEEL8xAB^eevSV z71qzISFAfF-`^ZhYUqy)`LQZ&TeCo}*!29uN6%^k%Sq<9%TKf#5VV*1E}orUxBi^` zEEy%AQLA;Ibw7E4!@2PKPIi1d@Wdf|&`q6qz|8JB+twp}IRpuMD0SCr1hxsFN36d= zLJpl{jB058O*UI>ugzAB^q+-hhZ4o4#_VnMU{U^jS)W1+>={C5QZ@}JfYz)UT%q*E z)PSxN%vD(_j%{`XfOY2ph@}1qcB(%}^@^C3FM+cjdqflkVVG+H_T+fukpi=_6^HOk zP1ejt`+vz_3KZF9O0GX+2&8+GmHDgELyV5LYG zj}&eE4qF1k^LXrI8sVz2bn(k0e&_}PdC$4+(2w4WKV1@Tt_U#;ImT%YO}M(;ULYQX zOoIrAeP(@M&y(FB6B`s8s;5)ha?jHnJu(OTn>%-R2}1)mZBhWl!T{TpoE8}Ij_tli zSU^hXcts>BJ#_3jPy!0LHXnd*4OX93H^PFam;1<{^ou2%B-2+m$_MGaFJy1&gG&RK zhdrK(Il)FI&G5s)n*d4#O*!)NS1aWfqI{nnAqpKCmmsGG9h1a-%LF=qVx-1ZeFNbQ z?v_BM>z)jnRga@SVvDwa&*JY-M7jCMJt#=*U!t%X{m-JTYZ|90{OxiMEikig{FG?> zTNLb7&_^nsVZ=gNEf9=w1=&3fFdZ2-4ZuqJVJ4W)Ma(s|sefqGbWyQ5;-M2Mt%*EC zB_vJyL@i0BhN?on>-fGdm(6e-guH|4|s8b3@PD70b`f5?Gf$)~*5GC|=+s3+EEt1-=AgCo^(n!{ks4f*`a$-VZ#)+V^0QKQPC3gKvifOzSi#H&( zBc~&;4gF!7R3IhriBgva@n@&a8|hvpp)Ox!=UPkEU+kAlT93cLNuu5kxR50~l7f^< z*>RuO*BwaTChR&OPSzGU?*WkrO>(5M=(gAO;D{=p5_tQn($EQTkdI;!{-He1In>?w z?GdTO&Kk?2-H%d6XnE;92vXC0JQ3*JYRLF?Bb1H(BzaK)SGCG28Rj-WO-+%!EOggR zOb;b}^5+v{UhbwpE)NghC+xB5I;`}xRrh|wR1cy_#c1%e0r3B^YTA9NBCIAkhMetuvPZJb?NyOg$3Fp3B?~#z0f9F8+vH8oJ6G`2c>x&u zTAlEG`*%wk=qD`GQ!Fa?ef5Q1YW}W@o|wzHrut^)7yHYfJlS5m}fuLoeOEN5cG{6d)XF|PTBaZ5PBI8~7yrRv05+rkcJ zwkbTw);=B4g{*(AJcsf!93glFle0X$!Gj$iw!X=!?4g$;wTleOOvs7v=wMBXfLy_qPzO54>m`ch> zcUn2CCYDQ!XG&=x3QIjX6Jt=qC6@Uo1G63zgLQ%yOHiz`9FI@MBXC;nsaG2Q^YJtQ1VN*^SuBnQ5Dd>YrXCiGw8@o|9j_dK zE0l|LG!uz}{z=aOJu;>T&>bGb=<#?LwuNYm*-s=HN`?7Bt*`d;DHaLH6K&t5v7I3j z2UK7F^xw=_`Jb|zpfci{3`8umgHVK@acA;Es2eZHPpf>4-bWtEHrS9{nF^t#BCSvWZap>@K{jy#2BS+J zV;93m33`~th?9J8E#5l|g>%*Ux)Ya85W!CI9(-t^yV7~3b9C5mXMF{2(j;DYOa0O8 z4e!y*3i(d6h3xmE&o$PzMGybsHgbE@q^jl){qUy?i{qKRUkvLDq|HBHyb&;+dNHao z=WQ!eX&btl=jDPzpF_S)4YC{oB&usSIK!+ zod$_Tr5JiA@-yy)8Rmz-Q?R>UbGk0VJA~(63K=WrHlNNdCO4R-t)XgdkD4_GUSGah zrjA|8+NV2rE6DPJW%1RmZdv6uFQ>K(K+rn0ez$4BVh013-QKnpH2~o9;?qs`p&{I zz~Qs$9|xV#Lx6!}Rg zVKy8tnT#y!LHl4(z@+kRJ(O?ZE|meRP(LIAarI<&#aN zh@jUbgF&$Y?*aPyqUl#OaK77q!$!!}6;<}rH~;6@*8lBjpnCSBtc-!NZd1Y>) z^Brz`uU`?1ib@UNZWrBID9TTWs|chc|~Ne1PQJ%l-Uz=N4B9+}q?sl#`$qK2P!YimP|B3|M=U$mPrTXEQx z{E&ePHop^~JWP$kI^CBG$i90@&el}KKW~($QIAYp(H>?$0`X^#bUh?k7j}Lm2}xiU z@cLURto6Q8Y_;*4+>=~|7r8LS6TTQ`_Ce8XLPc4540S)1cTc_BM_}`DtCQYUAvJ8)%B^LYY&kH#e zZXUN?5_{5jROg+I%6(l)N4bJfO#xTxXb{=vOC3FLN1z`*VrCbCm6u0y7yNQ@-Ajz` z*MV1>rP8Ol-yNy-qN7)?IR`LWe%!F;EEp{{)*98vf4Np0EhrhrBoB9F?-|&)_W6lS zt+RzfzufYdDD+f0UCu-My2kz`3emUz5`{{qMS|npD9(mWdf6u_q#($c|Lp!njF;pr4BLtsaJ+^SN#U-x@ ziEjxi9g&-yNe>4_+~X>^8Q?n#e|!6t?~U4ohkcYD%ebT9{4-C^wTQL{{P8=ZyJl6o zC#<9`GyGT?vF_c2w}>n*erq`k&KO>SptXq9ovfHW_LF^RSbxKQAgR^`@1VIc z2Qx>1OhtWdsM-M?_q{<6kYX7uxv`*BqmHF!I&+cQEZBZ|-gHocq zT>JM6PMmt<+w=L|!&aP1^r@~Vu&K!VKu_)RAKs=VwqCoxfA_IWn%Eyr0kwtlSKMHU zgcy&AZ^J^dsx`$A+j`gNtTX>oGLtyq2-xyOoL{oLHKQEpLQTaWbuJVoP-i0wvOrjiMWLv!+fSsf~~N5ihF z#Ozo?D>}6*Z0)(cXsFIst+Y?kBG^HJ3pcU)0(X(QP;y7d4zd~xYZOt&dwSCt?d1y` ze-K9uB9re`-F1la9)^d+s2j34J^)M?`C*7eY|1R6ndth zRbwpie&XvVntJ@RL3}s?4p+L8yW21FR2(e(Lg8UGB^8hJnC+@Le%b3w?~i`{`0fwv zCiaeBI(8{2$4--rS(ZbmKK}E=l9PpfuNpjx&jv|~?j?Pl`aUa3a5p_ysteK5Hl+Q? z1-F04&$Kh5F8`lo@%_CY~m~=OLXRTxoOlDiL>w>Jzv?Je9nWa4_|9sTuIgIMCw=K;C2XI^g85DLZJn0&Hf2vh z{l-8Hth_?#LEHxyHFY`FxOZ50Hx|?7^Qi&$!RT}s?ln!0Un@))5X}D z_HRx2FTU~r7k?%I07%liSMd*YyUZuHe`Rle){k0EPp+gp6bU(BACh=xo`-Ol(_b_K%WX z%QtbIm84N9Tm>k1c~g`Z5&qAfPu)0~Qy5CvYo0LDeE8tq2kf|@I6xc0{F_UqkV z`ez^(d0Xukv1e$Ow#;uvU?lq9igWXx@&6_3)TS%v$^IBLlky69M}A(6SCffMRS=@a z;qm*8UXj@E(aP5(_B@2bVaVK*P*VK%8rF@WeT262;!stONA`#3=(<~YF^_@aWNdl< z$PGs;tyk%VEO}bm#{colA1Sg}hIPZ{SHEt!k#}JVpSa|%mil<>HpI)z5r?CH!*%O< zmawv|Xmp;SZEW^86eu6_TkxU6j90ZdV9|_cA>BQOoiLoZA!XL7{*&)%W$U;vW_D(A3z>11>6 zpy?InOzAo-*hDZ_Cr+A^%LtEn z`g22mE@GrkPbba=MRhqdOk=&`_$R);p|X*t{lNVXfaIn= zS#Qf6f{5nJP8jTcT>DEKzL>y%{I*;`h$cHiGQ~|*f<9P{*aqoj_7izvV*M7@aRaIc zNcDqPsES-YM8$zHq=A9J5c||ec?lz}quH^<yf5w^k=g0MD8tt%Waqp)iB zj8RKZ1mO0=;lNL!%QtvuxRoyU3is~*rnbRv$MK`H557(rczAE|b+@RbFPO!CcRmyl zqNP_EUO`Gg2w)n_shME@N@jB{ zz06*c#-I6tbIz0RAM+722~q12LtPfcW~x#m9&BU|Vc9#wSfAcuzGa2&B1L_>g9F`S z2^O$HA**i{)Vh_O_hy;*Cf0a5&O<=~`eF4}F+vgIqhR}@)9VLZu>bl z)S1e(PE<3g75H>{kpR z9zOop=^<+5kpCAu%l{<`q1ic;_vuKu1CQE^jI9kJ2xJ;JT@Utz?vXZ9*UlgxtaJH_ z$|bwjkPNXj6H|Mpej>`$;N?CA_% z>6deN)@R0W<$50(RJb`;FFBK$15Z%Uy*hg-fHH~Mh=)WgAX`a<=^^xcB|8SjiA;so zhd}va==!`U9>5kkY4aGC?-tfnrg3m<`B2{gziA?daW}Lm=pg^`z|M<@&h6d;6(hI3Q3|VF0%U%>mC-uyfRP!fIc{=hH|(6UQWBV$%u<)h^5MD^cm%?pm69Kt;_r z&2$YkQ;EKP%?LNO2<;Vadbkp&lzUVnw7#Vv7g7w~KR@K|@aN>_#& zUYpdi>tz!zH!viG^WB+MXK6Q;%^lGmN0x6UDXr}{W6r)Vx;B zM@EM?98wzlfMg2M&@G)z=Xurfh#2L(ng43Lth4{c_rk%5dvWX)_Ic1SqIOZ>64p&# zPrzFwG$*2VzEZ>V#Iz94#6fWjYL#~b_ojL-ieQ0TsZE_dgpojo z>p9xW+7;L_^pJdc+_^2@Z)kcA8m6@9H;oWvcXMSf(VLHlWL@^zoG_eouQO-n!wJRW zIq`=`!fmr8fPRqLI_N1FE0kQT6<;0B=ed~u&mZ)T0<*E;o>=mt=tFBfio0QF;?V0B zfC7Rv)w4=`_)%l+)i9*8~f$?k{p8bA3!5s zO&zrJiTwwa4HH**mN&tvi^Yx(3H-qK3D*T20Sr|d3o#jZeRebvjxfHwDe_0Hs6{s< z5u6QFe~H2q!iNz>eC@wQVezX&zN>a_`>~G#0NEv3G|R! z{m@;m(_(zt-iOmopkgjgr_m~kJY$k)Ml;jCe@h(gXp8iN8Y}1<98oaQGB44qRD+6( zzrOLh429=n@Nw>r&&#V!4AJ4mF){XPH0ktZa>3$myPiq07(VhZ8K&mEviCpTn^L-#v)n24dJ+ z#9%p+Xf81#8Fm!UlF18H&f)h*f8Xv>Bw9c#`I?F?Ig@G9yV)fK>fSc*j8a#anwCUe zC24=X(`wFvX>QM&Upg1=ep(efen>C!g0GFeEVxeggw1WDyuPipcEeH$KDn8cZc2yN zBbo0;K}Bhr4W^R59MN5#U1w+&c&$mmQsUh)(Du=(Dtt^t#Q$z*9Ml$5yOom)-SbC~ zlFu;>3c0_>UdTGHh!VIF8X$Y(QWQ`MP>Uy;!f~!Wl-6)oAF&oae1U|SG^WoZfh93d z!CzpBrSDYc->4uo?#l^idO%{#acm>g=6Pa-bKR$dj|t~#(1gSD4$ndV1JEs8s=IvJ zDyy}MKc8OwrE?QEoj3;wU<{;{3?1+q4m|G|3GL_6Zb517Z`g06n6?^b*JdW>8JG76 zDp?I%G`;eGlNB)?4YQUVp?jky#gc*7$gB1?kLBP4kAp8anU;Ejl*J~?T$To_E%J#! z2k2T5>e?997#=l+8)`vnS}-mhv))m>3?U>#u!m>?+(5^Q(mfnuc;nqnEU99m>6z9W zdUBHEg<+=6{S*i(TN*8sv}*g8V`=`nfEH^=MP3jl!6ew|r0h4nHEmvPz*Y`0#qto~ zvK5wZDajy`v}mlY8+J#2bdm8K{a$W}904+oPuw%BqJAE|BP*EK1l|5d?G1x?yFPh2 zc53mgk9TzwQ(-_6&u&!^h9bJj9Q7W+=G#!Kt^N(Zqh*k7XXjPNHcD<1LiLE*n{B&iKP&XvO5zgG$(Uo6xr zHW*(N=dT<@*Swb{rFe09{!j+0a;_V%FE20&i}D@bv%w*cF%3}Wiaf9J zu6AVL)2|Y58n;xUSfX*i%5$J0;bVjTV?x;%1{&m69aQNnue`|}YZJB}ihXZhK_($5 znnH(@GlwMO{jqJg>kN+J;n7;WPn*w{P%^|f*H!tYRFF-hrhXzBx6*uQ=x{g^tZFe! zC?=3($Y41AnO$*GVk zbB135iuVRk7Y>?{SF(ORqnlKGx~Rrm)IsOKyn5#alIsmm7Ds+_{>HFzptF1-?I8&* z5-v)WN*FYeEYLOz;;4{4b1HyO^K&ep#bi(%5~=tVQ)_D)b1jXvHz{Mxr4w>{xz(jN z(3c$Q#%NfUX-SMJbqxS;sVBi_z9XoKe52iB=iRG<_er$oud*&RJU=wB4!(d@`U)0( zMTm zq4`ZA%w@T{hXixr2!3dHVB~HOuXI$4I_^BjQxcr8dZki5nuT!o8$!eVV8L>cKR2_= z!z;G*#DCZE;XhUj%r0^5<>36VolDOxZh6K0up%`eHH`Cps5~e+K5WIDsjz^XPLgxr z{6YtG#3gkBY8C5OSS^uv3Np+J^e1hEejvBNN4{Xz3)r(g3ZYSKAZ}tWvl_2~5tlNv z89lR%o1qZQgm}53^qz(SH_b;mkKU$7`k2zrdeaj39F?TsTn(#HO_YMi4KB6s4uD@P zhqPF4kcH)XLHPNJMw_E77V&#_fG7gt)kj;5_v*phX*fqoTIR31bF-?i*Jp%xI7ZYR zPs`OSgllJG1-i8d%BvlZW;03e-Z!2TQ$#O!VBAD{Ij7rKaNPf*#W?d9x6ciZ)#a{I3fAoVv`Ncef zk0|Y<)@=8#mz>d~^QjA{N0<2_@S|dpI3^^@@eyJZE4g(PS6PNIIixj!U@bh@Jejx` z@0Gwk5^x$(2FKcB;^~fSvCWqMxO})r`0!96)I4}(`CAks-5UJ=Z=G@HOQ4Rh)>$k< zkTXl68^I$BW&9@Jz(n10Vj5vXV#2IM7)I+-&G>jiCbcc-w|XiSueS*os2|Jg6xNSy zjS?OKt*3NJCxYk;dw-X$jML2u0=JHY6ohfJlkaX~reuHWwKcWLii1Cnkq3zG=*9qS|UIhZ~eB3xNSx|ZsRKrAq|xF?QzJpy3({AO+@<#nbk zb}J)Ke%vRD=Zzb4v%T@bu;+Ueh42x0C7Tl0vKH$Zz7jD!~ zt(vh!G`#c0Z zqmswCuPpKm@Om_V!`^L8i7bl|u1Bko@`T5d-#+^Kfvd|@F#e*Q zN>OqIAZ8)A)MPPBnYs3k}_!hFs7Dh4>_5q?+d zX7F_pr8*(r&JdOWplwDF_Y)JiUz93iRB1n@U+b_d5lD(*B8x!*iT-i`;38NufTivHr3UC0xu%y9L;@^#7D`Qfd*UiNcEszF*_4EeR2US*#)bcw24! zoI%Yr0s%t45=(FyfMzf7#RBqFshVfAZ=P_zVnIeXtcc*kS5Hv$&lKB~Z`fbO>j>~? zidEW=U!Ej#X-X`wMZDo%%6C-f~(^x@lUO->sM6spM0-ZZQ1bB zVB?IX+$o(YU$K^b#WtRU-FI2$nNtnVOYrf-hBR!sX#NHZN2VD$ULA@u27^oFF@m53 zrI9X~k@_^MYj!U$&lH7QK$K2$2=`TssXL`x4jt6+B9{+<+u z;1eEM%mel&jFE@NjGSDs<@2D2G1pB?!JAsr5ym5*sD=?eqkhhMd`)e~HB&DsrxY7Y zHZ;MG-<6nFSdW`#P+*&GL=9P8(YsX7a?NYYcO8(e1g{~J%O-NcIq>94$yfV6{D-}Mee zOnbLDP$Y`!9q6Rv7x0Ys5`+OzCE(nrJ(QQF?NqyTIqS~asU^zV9fDLh=Qh?~dbdQL z-K;40roe?YwJXx#0bboa!BETFBm9s66`wLRg13u1M|i!xFt5Rmu3l+25M`R#4GP?= zTAH8ajiGKgd7A{*+Tg2xZEF@N}wc)m$2a}F~VH)dV-|F zmopZxX&xF@w8m95pA0YtK6nBB%&m_<^d9!9#}7Z)AAS4D*2hs_-TXe0hzzryy(20V zjQ2eB@;H_9J#*t|dlNRHrZF*TW#?+ISXYw<5>TJeK5L-vzqR7A%|(atzsJBHUgx?} zBT*`!Yi2EpEg=_tlJUd8Md82a;t__I`|P=%6z!Ie#P^6yc)ob}+MfHOfV;fz_WiJ? zez|C6Kgm)o702`+Z|atvpJz>wNaS#oP&9Q{n(b>D*~nZ>W=<=Rr)%-bd z8A;ha*81Co$u}YDJn>9n5sl?bW>riZL<>(iu?7Gsu-4q3$q*Ckim0q05$E4&{T+VYe$BfVDbLmsk(tAyGI2 zA`0sC%a`G_j{BGJl==C*<42Zf&nPRDN(nw7D%u_L;CRoV5Ha0sHvmSVgQbnz$FseH za~b}JUCc?SlRkTduf88vxhDU5vHsWL3(xP|hm{@oCh%nfF6gl>+&g;oP%HbC9SuX2 zyB!Q!PHxY8LLCwbwk(DMXs7t9F+DOBD9KIPk*T{mUYF zIbN`cRnlfz!*jl#od`YVFwk$4NTd{pKQRsFEUXdOT3?Dj_I&a%KPF}! z_4)ipE=*8WPID7`iSX&GK3pyH60!o$DwDU1)vXo_JhA4c%c330Gs4G#fR;Wy-E`kKvt^tu~MmB zgRv&XxCV$9%&lV%n(kk0SU-{_KsV8xT}IDgD*}885ch$NG9DSaNUxNNO^oGjJ`<2v zU1ae6ZEDr>-a89p0+psTHp%o4S=5yc4ME-cYYygJK4^j{+;Yc=gCU?3?kDZK-vhvT z`xo@BAA?iwHW9_X?r5chflC>NR-e-YE^&)+N_#hN7DnwaHsdyDAfFI&YYT zUUPm~=r?-M83+85sd&tqPV$&ud-l5>efp51ZvyRQ=ZiSxsFuRC&U;Iy~ zN(@E>o8_WAEUuqo56#C>w77FEsy|- z>Izk_)EKE=fzi#^!T4UWO-|?OKawuIw=jIO+a^w!0UpvzTVh1T%$v1m*s*fZ;{hriRsL}%y90}xQUqMBtMCs{JCy<`m%?mh3Jc3rj&@!3LA6}t zWA$}hyFEa1vzA9>AxeTMl%nBR`yO)F2D^wH$Y8$o|cS-5rc4Z6Rz-yIgfBhK<-@h z!A~J;h?8kEi^P1_(HqZ3wTil`S(g~T!>bX&T0_(tNOX7j*f}?4_o8W6qEB(1j6_u> zTbUjjo*d@sS%E6eGBKMwp1|24SgNwX^%Bm2J##Ro2!Xb(NNyqNVtKn1!L8QQC`Trb-q)R( zW%d=xOCyc&{!ics2iJ=@$Z{TEJP}#ZXN_M1>T^GXNEPC4I5FlWa*OD89!`2rF?=E<-;KnGd>RmL6Kj8A{At_vV02+Ayg7F8SsE|5$X+P&M#Ls?u+F)I3p4bn zDVKu@06vQD#I{ak-ba4es)%3la7yy`r0|z0II*p!zeQnK@}R|~#6Xh(9az7FbfPJr zPD4WzIqfq@=mTo(5x{1hr6KY>lbJt|ruc;pc9&0T(VLCoZL_ABlhsV|A_T5*ExUCg z!n@`y=R;tiS4^?fdQuxG#xf1QErh1Etb^Wf@T4p#(X|$sq_JtpDU$66X5Z{{i7{+w z+KrFS$F81MHcnR`oL&hIZ1Yn{x!RGK{e@Dq+@w^nsN2FivYF?fV(#xI zD4loF(mhZ%9Y8agPRmru`)h^ED5fVXVP2p_pJjPpft>a}dg!T$)dFP?W~*0|stFEc z2#Z1P#FnC6a2gmI6=aII$XU&@v|feFJ#a`0Q4`h0wD3%j>@2Aiqws)(TyAz8#VbF- z4I0dHZCEocRZ`l02rJ)$5Zmk9_zB{H&riL56DOdwccNo^csnFFkrI@v_Vy=z>L0(k zx8ct6i;O=~_-~T$#J(M){NS1;q_2gyX6TG`D(u9w)Qh*}%&m_Q7=dabOa-U!4)~%6 z4Yy2C3cIL4M3gZ%%t64l9g2HF+_(`Kq+s#w>e&TtCp%tfSUu8)F;Y z=%P^xK8ff6iH2aV$nXXxd$Tj`dU^tz=Vh1h82CPF!NhYc-o_7P*4uy5FtydMC)tBt z#dr{Nz?Akj7ZqGHpo>78JB~<6Hlz0X)l|kew%eY50S>GWYdF)0lmIoQT7~xLn8U;YYM{$Ld zjE}BHxkA}QXzN>0KfIHAsT`Jf=G>{c&Ae}N=-vnteE+)NR7cC68!WZk=fvkJF$+Em z-eCCr*y-7|PvzLmbFOO+XH{8|`w|u*`WLQP^gNFQTaSDIB>>|=w*2C+ES7KPdw3$s zpLFYd0HjI4g%c{YFOGwrN!hKU}4r?h76%v{qRAfuvlFZfcKsN|wd2z=xhyhtz(c%|dH zfH?S>{ZH;a><+H;l(wju8hyc`+)EYC#6JqAqL17!PPQWo4&_iw1(S?MG@ch@H(k3_ z^%&c+h7)Wu_{~`gfg*Wh*LhIkXUau5aiSm=W;~@>eSk`EGJOklw8`37JrNCc&{(?; zacqZiK332Ty%25n#_^=ZUKmyf7Dz+%z>Q+u@&xc_4j3K`w!1f(o&oDA9q1@OkmBcx zMhh?sUwGeB2pb0-_F#%!eO+KNxFuoc`)zO#5D{UYAYw!*9ru;vq+!WXCAuJ<_-QE* zt2FnlE0lYhzZ6{3C;YHXCB^30PXZ6kTkjv+68udCAA_y;k*J-;hNQ}LaBoFT{gq4sMW4&I4n z{3dP_eosteg4x08;dZxfhV@iQSoMlgI7`i`K%$Y!9IE(o7tDYO$vMNN8zHKWgYkmh6HmX25u zzwfx77;LJ7-v$2=QQ~|D8xI=1{s(LC8P?Put^3aOLV!R5%!Fd70s_tuKv2+x8ZanL zMFmZ00xE_gVo#?91wjqiLJ`3VqHEbr2p~d0id}R?K*X|^D7x%&;=X&Ib8dO=bDneW z*O}zgoO$OM|M8CZCx~w!pRec9IJZmx(08JJnS9Ql;VR@Su{vF{j}fgvM2xedGgWAp zQcn1xi1(M{nFWn-hwFr)X)mazg@#ZlJaHmG7LZorNJRbe026edF$Ov-zA; zc)1&#<3S39cP*JZ9~$p~Jh4(Dd{6FAC+2aPR)uh`gGvs>8&(rU+@$xyAVCzh5{gp2 z!wxvp0?DSt+QDD_BGWxGbK)sIc$;gKNOh%)cPjeQ!CE;0Hjem2>UQCs+Nuh0W~38i6~k z+*syB#pSz1a}!Zs@ynFZ4jthI%j(+J(G$g!C&l{-VYvXQzd`Z3% z`8dL>kM2hB-IJ%y2qa|mdiAvL>2s3+n!{Yq$tASjxVwZbL{T@&fIt~}OFlATr-pOg ztQzOGhbASU(2>dyn;tJs^W}~M#?xpe8R8kYIq1@$j@h}v<49<$X*~|w4!w4p#%KRw zgBwPOl-}jAHo|jDXbz^{I2#2$A`PQk{-HY<3_EZk$eA#03*Q8thL2HUQfLX;K3KhN z!H+>Gp@+flghr4?G`R`FFcHoPzzG4Ikee;y`c-z)W$fzlHen^r4@=O^ zC^Z~gztLrnzSL)Zy}LT)V_$yU={LO#R?HE@oBzFHt8F=vvj+ExQOv+36tL!hDnSyq zCHM&RO`d4&0+)-{Rv06=R65QQ8xK6AMvFPm!mRhvDEn0C#Xg4# zgk&N-ll`=L!b_vw{&z&-|Djg+U%3PqlPtc&7_6??dD+kDU9-jWykGi6Tg5K? zG|zKYU@R%-22?!@VWC=1KSHsG4}SJ^_0?Dt$E}U+;rb1TTSn8qAHuzYo$QgZ`=E03 zDPab*8#6|torKH{+ECB;GL}b-832J$5DWp+1wbx%jXnP;lt8r)2@Hd701R6_!6Y3V zGu7>fa$p)5ykU+@Y8rGIqi+(|Lu=7G;(c(fAw@c%cY9T79I%4+J-lCdnVl-0_xK0~ zGY>7QPm6U&JJLe&xGoDsBh{`e0&_cy3%Kg{&v=)r)<52`Q&N|dt^<7(tBk=YcZJa! zaKKaX!yfb{DDq{LoJ5>WC{=ICJ&t})bMit+VHHwf!1+PY3KwW2vRfhKO6IWoY zSU>UaBZVIMuaeZR%BRm%|0xPSmk;W_OaGl2=dJo&V!!%De%|@w(vbq846F|JELn@e zo>pC|t*ccq7c4IXn;g8l5q)!!;Ng>5DZ2n6Q!?IV-(9{1SazXzRnU@`0UKUkI4iG0 zvj+r&9LH|uu+=@nKY;G8;!o`ogAHnB4kz)JqWyG~eA{BBwuP(*c`(~YD&+gnY@ zyKg1$uWjfoj2awhXwR9_1#!F21O0>X-}dh4vQ-k{pj9eWfUF4)m97;RbZQ7?^~QG) z=3#CAA{~v8d<{rm*~pD|ND(-ogS2lULOFud#t%A-01ymj4FV9fxk+;uNvD~q;`3#Q zV13Ay>OJnuI<70%H!uZymS&N{k~I3m6}bE~Q2}@1Qw&c*NPmbn@w@WBQ7Qbt zDF8H2GtcW_S*iD;up>~2iV9^H0rb1U@z4%U4%Dh1fW}}pbfV;%*D=FsqYw9e)*4pM z^*QdH!6X?xPk`nS?UAD?5M*7CA%!x4^$2p^GtVJBgF=s>BWxMyK{8~Is^3)EMBj)_ z26WL7%h=vII}w^jB3)8wSr}J*0x3j3J-J>bo{FHs1VsIFH|UY2s)qQ zSWbfDE3RK$wy_rv>%!XsS`(Vfgp^uzq^u@2f)S5CuZB_ETtza>L6~Wg&g7 zz*S77HA_;u$y}Nb3N0;E@^_^UqjTl9`kJUdobG(i0k+1+?el1<#jW8*?N}MyvUBAja%iQ2N+OJB>HcuN)_iE>B7%&_zTFoo zRr^0Zk>mCA_RmrAv8