From 61ab9c7c18481ed8e6583988b928f6ca1edb5f3d Mon Sep 17 00:00:00 2001 From: Daniel Odendahl Jr Date: Tue, 26 Sep 2017 02:16:41 +0000 Subject: [PATCH] Locally make Be Like Bill memes --- assets/images/be-like-bill.png | Bin 0 -> 13051 bytes assets/json/be-like-bill.json | 32 +++++++++++++++++++++++++ commands/image-edit/be-like-bill.js | 36 +++++++++++++++++++++------- commands/image-edit/color.js | 4 ++++ package.json | 2 +- 5 files changed, 64 insertions(+), 10 deletions(-) create mode 100644 assets/images/be-like-bill.png create mode 100644 assets/json/be-like-bill.json diff --git a/assets/images/be-like-bill.png b/assets/images/be-like-bill.png new file mode 100644 index 0000000000000000000000000000000000000000..51f88b9dd1c95177fc98e38ea1b9dc8adc55d685 GIT binary patch literal 13051 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 literal 0 HcmV?d00001 diff --git a/assets/json/be-like-bill.json b/assets/json/be-like-bill.json new file mode 100644 index 00000000..c525026c --- /dev/null +++ b/assets/json/be-like-bill.json @@ -0,0 +1,32 @@ +[ + "{{name}} has a girlfriend, but he\ndoesn't post 56 photos a day about it.\n{{name}} likes to keep these things private.", + "{{name}} is on the internet.\n{{name}} sees something that offends him.\n{{name}} moves on.", + "{{name}} doesn't spam his friends\nwith Be Like Bill memes.", + "{{name}} doesn't drive with his\nfog lights on when it isn't foggy.\n{{name}} knows this is annoying\nand dazzles other drivers.", + "{{name}} doesn't talk to a friend when\nthat friend just woke up.", + "{{name}} can afford a Mac but he\ngets a PC instead because\n{{name}} is not a dumbass.", + "{{name}} does not play Candy Crush.\n{{name}} has a life.", + "{{name}} is a jerk.", + "{{name}} wakes up and sees it snowing outside.\n{{name}} doesn't post about it because\nhe knows his friends also have windows.", + "{{name}} knows tomorrow is Monday.\n{{name}} doesn't post about it, becuase\nhe knows it happens every week.", + "{{name}} doesn't shout at the TV\nwhen football is on.\n{{name}} knows they can't hear him.", + "{{name}} pays attention in class instead of\nchatting with his friends on Discord.", + "{{name}} has a good camera.\n{{name}} doesn't take useless photos\nand call himself a photographer.", + "{{name}} doesn't beg for his PRs to get\nmerged when he had three merged today.", + "{{name}} is a bad meme.\n{{name}} has a good sense of humor about it.", + "{{name}} likes to play games with his nephew.\n{{name}} lets him win all the time.", + "{{name}} meets Della.\n{{name}} loves Della.\nDella loves {{name}}.\n{{name}} and Della dump social networks.", + "{{name}} sees your picture has only three likes.\n{{name}} presses like and comments\nwith a compliement.", + "{{name}} bought a new car.\n{{name}} doesn't post pictures\nand tag 49 others about it.", + "{{name}} is nice.", + "{{name}} has the heart to tell the truth\nwhen his friends don't look very good.", + "{{name}} likes dogs.\n{{name}} doesn't bring his dogs\nto your house uninvited.", + "{{name}} likes to go bowling.\n{{name}} doesn't put up bumpers.", + "{{name}} eats pant.", + "{{name}} likes to use XiaoBot.\n{{name}} doesn't complain when\nit goes closed source.", + "{{name}} loves to buy shoes.\n{{name}} doesn't buy 200 pairs for no reason.", + "{{name}} doesn't like dogs.\n{{name}} doesn't complain on the internet\nbecause he knows no one cares.", + "{{name}}.\nEnough said.", + "{{name}} is a butt.", + "{{name}} knows." +] diff --git a/commands/image-edit/be-like-bill.js b/commands/image-edit/be-like-bill.js index 012ad43f..d464bbb4 100644 --- a/commands/image-edit/be-like-bill.js +++ b/commands/image-edit/be-like-bill.js @@ -1,5 +1,11 @@ const Command = require('../../structures/Command'); -const snekfetch = require('snekfetch'); +const { createCanvas, loadImage, registerFont } = require('canvas'); +const { stripIndents } = require('common-tags'); +const path = require('path'); +const texts = require('../../assets/json/be-like-bill'); +registerFont(path.join(__dirname, '..', '..', 'assets', 'fonts', 'Noto.ttf'), { family: 'Noto' }); +registerFont(path.join(__dirname, '..', '..', 'assets', 'fonts', 'Noto-CJK.otf'), { family: 'Noto' }); +registerFont(path.join(__dirname, '..', '..', 'assets', 'fonts', 'Noto-Emoji.ttf'), { family: 'Noto' }); module.exports = class BeLikeBillCommand extends Command { constructor(client) { @@ -9,6 +15,10 @@ module.exports = class BeLikeBillCommand extends Command { group: 'image-edit', memberName: 'be-like-bill', description: 'Sends a "Be Like Bill" meme with the name of your choice.', + throttling: { + usages: 1, + duration: 15 + }, clientPermissions: ['ATTACH_FILES'], args: [ { @@ -21,15 +31,23 @@ module.exports = class BeLikeBillCommand extends Command { }); } - async run(msg, { name }) { + run(msg, { name }) { try { - const { body } = await snekfetch - .get('http://belikebill.azurewebsites.net/billgen-API.php') - .query({ - default: 1, - name - }); - return msg.say({ files: [{ attachment: body, name: 'be-like-bill.png' }] }); + const canvas = createCanvas(800, 420); + const ctx = canvas.getContext('2d'); + const base = loadImage(path.join(__dirname, '..', '..', 'assets', 'images', 'be-like-bill.png')); + ctx.drawImage(base, 0, 0); + ctx.font = '23px Noto'; + const text = stripIndents` + This is ${name}. + + ${texts[Math.floor(Math.random() * texts.length)].replace(/{{name}}/gi, name)} + + ${name} is smart. + Be like ${name}. + `; + ctx.fillText(text, 31, 80); + return msg.say({ files: [{ attachment: canvas.toBuffer(), name: 'be-like-bill.png' }] }); } catch (err) { return msg.say(`Oh no, an error occurred: \`${err.message}\`. Try again later!`); } diff --git a/commands/image-edit/color.js b/commands/image-edit/color.js index 41d3f92c..248c5e7a 100644 --- a/commands/image-edit/color.js +++ b/commands/image-edit/color.js @@ -9,6 +9,10 @@ module.exports = class ColorCommand extends Command { group: 'image-edit', memberName: 'color', description: 'Sends an image of the color you choose.', + throttling: { + usages: 1, + duration: 15 + }, clientPermissions: ['ATTACH_FILES'], args: [ { diff --git a/package.json b/package.json index 5f8013cd..ea46b16e 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "xiaobot", - "version": "42.12.2", + "version": "42.12.3", "description": "Your personal server companion.", "main": "Shard.js", "scripts": {