From c251d750e057871023c91058cf20ec1855b293e8 Mon Sep 17 00:00:00 2001 From: Daniel Odendahl Jr Date: Fri, 15 Feb 2019 21:33:11 +0000 Subject: [PATCH] Brazzers logo command --- README.md | 3 +- assets/images/brazzers.png | Bin 0 -> 8699 bytes commands/image-edit/brazzers.js | 48 ++++++++++++++++++++++++++++++++ package.json | 2 +- 4 files changed, 51 insertions(+), 2 deletions(-) create mode 100644 assets/images/brazzers.png create mode 100644 commands/image-edit/brazzers.js diff --git a/README.md b/README.md index 142e8569..867c15f2 100644 --- a/README.md +++ b/README.md @@ -47,7 +47,7 @@ Xiao is a Discord bot coded in JavaScript with 7. Run `npm i -g pm2` to install PM2. 8. Run `pm2 start Xiao.js --name xiao` to run the bot. -## Commands (332) +## Commands (333) ### Utility: * **eval:** Executes JavaScript code. @@ -280,6 +280,7 @@ Xiao is a Discord bot coded in JavaScript with * **achievement:** Sends a Minecraft achievement with the text of your choice. * **approved:** Draws an "approved" stamp over an image or a user's avatar. * **be-like-bill:** Sends a "Be Like Bill" meme with the name of your choice. +* **brazzers:** Draws an image with the Brazzers logo in the corner. * **circle:** Draws an image or a user's avatar as a circle. * **color:** Sends an image of the color you choose. * **contrast:** Draws an image or a user's avatar but with contrast. diff --git a/assets/images/brazzers.png b/assets/images/brazzers.png new file mode 100644 index 0000000000000000000000000000000000000000..9ef37ee79dafdae2edf5da477e10db281930a9ab GIT binary patch literal 8699 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 literal 0 HcmV?d00001 diff --git a/commands/image-edit/brazzers.js b/commands/image-edit/brazzers.js new file mode 100644 index 00000000..faf49e16 --- /dev/null +++ b/commands/image-edit/brazzers.js @@ -0,0 +1,48 @@ +const Command = require('../../structures/Command'); +const { createCanvas, loadImage } = require('canvas'); +const request = require('node-superfetch'); +const path = require('path'); + +module.exports = class BrazzersCommand extends Command { + constructor(client) { + super(client, { + name: 'brazzers', + group: 'image-edit', + memberName: 'brazzers', + description: 'Draws an image with the Brazzers logo in the corner.', + throttling: { + usages: 1, + duration: 10 + }, + clientPermissions: ['ATTACH_FILES'], + args: [ + { + key: 'image', + prompt: 'What image would you like to edit?', + type: 'image', + default: msg => msg.author.displayAvatarURL({ format: 'png', size: 512 }) + } + ] + }); + } + + async run(msg, { image }) { + try { + const base = await loadImage(path.join(__dirname, '..', '..', 'assets', 'images', 'brazzers.png')); + const { body } = await request.get(image); + const data = await loadImage(body); + const canvas = createCanvas(data.width, data.height); + const ctx = canvas.getContext('2d'); + ctx.drawImage(data, 0, 0); + const ratio = base.width / base.height; + const width = data.width / 4; + const height = Math.round(width / ratio); + ctx.drawImage(base, data.width - width, data.height - height, width, height); + const attachment = canvas.toBuffer(); + if (Buffer.byteLength(attachment) > 8e+6) return msg.reply('Resulting image was above 8 MB.'); + return msg.say({ files: [{ attachment, name: 'brazzers.png' }] }); + } catch (err) { + return msg.reply(`Oh no, an error occurred: \`${err.message}\`. Try again later!`); + } + } +}; diff --git a/package.json b/package.json index 97ecb7ac..eef0d9da 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "xiao", - "version": "101.1.2", + "version": "101.2.0", "description": "Your personal server companion.", "main": "Xiao.js", "scripts": {