diff --git a/README.md b/README.md index ac4bbf00..c7eb206a 100644 --- a/README.md +++ b/README.md @@ -224,7 +224,7 @@ in the appropriate channel's topic to use it. ## Commands -Total: 454 +Total: 455 ### Utility: @@ -535,7 +535,7 @@ Total: 454 * **create-qr-code:** Converts text to a QR Code. * **dexter:** Draws an image or a user's avatar over the screen of Dexter from Pokémon. * **distort:** Draws an image or a user's avatar but distorted. -* **fire:** Draws a fiery border over an image or a user's avatar. +* **fire-frame:** Draws a fiery border over an image or a user's avatar. * **fish-eye:** Draws an image or a user's avatar but with a fish-eye lens. * **frame:** Draws a frame around an image or a user's avatar. * **ghost:** Draws an image or a user's avatar but with a ghost-like transparency. @@ -574,6 +574,7 @@ Total: 454 * **avatar-fusion:** Draws a a user's avatar over a user's avatar. * **bob-ross:** Draws a user's avatar over Bob Ross' canvas. * **chocolate-milk:** Draws a user's avatar holding chocolate milk. +* **fire:** Burns a user's avatar. * **hat:** Draws a hat over a user's avatar. * **he-lives-in-you:** Draws a user's avatar over Simba from The Lion King's reflection. * **hearts:** Draws hearts around a user's avatar. @@ -1115,6 +1116,8 @@ here. * lorem-picsum (API) - [LoveToKnow](https://www.lovetoknow.com/) * horse-race ([Horse Name Data](https://horses.lovetoknow.com/horse-names/funny-horse-names)) +- [LowGif](http://www.lowgif.com/) + * fire ([Images](http://www.lowgif.com/43360ebce9150f23.html)) - [Mad Libs](http://www.madlibs.com/) * mad-libs (Original Game) - [Mad:)Takes](https://www.madtakes.com/index.php) @@ -1347,7 +1350,7 @@ here. - [Superpower Wiki](https://powerlisting.fandom.com/wiki/Superpower_Wiki) * superpower (Superpower Data) - [susi1959](https://en.picmix.com/profile/susi1959) - * fire ([Image](https://en.picmix.com/stamp/FIRE-FRAME-ORANGE-cadre-feu-orange-360274)) + * fire-frame ([Image](https://en.picmix.com/stamp/FIRE-FRAME-ORANGE-cadre-feu-orange-360274)) - [Tatsumaki](https://tatsumaki.xyz/) * beautiful (Image, Concept) * fishy (Concept) diff --git a/assets/images/fire.png b/assets/images/fire-frame.png similarity index 100% rename from assets/images/fire.png rename to assets/images/fire-frame.png diff --git a/assets/images/fire/frame-00.gif b/assets/images/fire/frame-00.gif new file mode 100644 index 00000000..778c4268 Binary files /dev/null and b/assets/images/fire/frame-00.gif differ diff --git a/assets/images/fire/frame-02.gif b/assets/images/fire/frame-02.gif new file mode 100644 index 00000000..05d36477 Binary files /dev/null and b/assets/images/fire/frame-02.gif differ diff --git a/assets/images/fire/frame-04.gif b/assets/images/fire/frame-04.gif new file mode 100644 index 00000000..cd71e06b Binary files /dev/null and b/assets/images/fire/frame-04.gif differ diff --git a/assets/images/fire/frame-06.gif b/assets/images/fire/frame-06.gif new file mode 100644 index 00000000..4726ed26 Binary files /dev/null and b/assets/images/fire/frame-06.gif differ diff --git a/assets/images/fire/frame-08.gif b/assets/images/fire/frame-08.gif new file mode 100644 index 00000000..47f617ab Binary files /dev/null and b/assets/images/fire/frame-08.gif differ diff --git a/assets/images/fire/frame-10.gif b/assets/images/fire/frame-10.gif new file mode 100644 index 00000000..43b0370a Binary files /dev/null and b/assets/images/fire/frame-10.gif differ diff --git a/assets/images/fire/frame-12.gif b/assets/images/fire/frame-12.gif new file mode 100644 index 00000000..c0d1619f Binary files /dev/null and b/assets/images/fire/frame-12.gif differ diff --git a/assets/images/fire/frame-14.gif b/assets/images/fire/frame-14.gif new file mode 100644 index 00000000..cb38383d Binary files /dev/null and b/assets/images/fire/frame-14.gif differ diff --git a/assets/images/fire/frame-16.gif b/assets/images/fire/frame-16.gif new file mode 100644 index 00000000..dff37363 Binary files /dev/null and b/assets/images/fire/frame-16.gif differ diff --git a/assets/images/fire/frame-18.gif b/assets/images/fire/frame-18.gif new file mode 100644 index 00000000..292510bd Binary files /dev/null and b/assets/images/fire/frame-18.gif differ diff --git a/assets/images/fire/frame-20.gif b/assets/images/fire/frame-20.gif new file mode 100644 index 00000000..a40dbc55 Binary files /dev/null and b/assets/images/fire/frame-20.gif differ diff --git a/assets/images/fire/frame-22.gif b/assets/images/fire/frame-22.gif new file mode 100644 index 00000000..4730dda7 Binary files /dev/null and b/assets/images/fire/frame-22.gif differ diff --git a/assets/images/fire/frame-24.gif b/assets/images/fire/frame-24.gif new file mode 100644 index 00000000..2fecf200 Binary files /dev/null and b/assets/images/fire/frame-24.gif differ diff --git a/assets/images/fire/frame-26.gif b/assets/images/fire/frame-26.gif new file mode 100644 index 00000000..9c5b83bc Binary files /dev/null and b/assets/images/fire/frame-26.gif differ diff --git a/assets/images/fire/frame-28.gif b/assets/images/fire/frame-28.gif new file mode 100644 index 00000000..60c3b2ef Binary files /dev/null and b/assets/images/fire/frame-28.gif differ diff --git a/assets/images/fire/frame-30.gif b/assets/images/fire/frame-30.gif new file mode 100644 index 00000000..39189f34 Binary files /dev/null and b/assets/images/fire/frame-30.gif differ diff --git a/commands/edit-avatar/fire.js b/commands/edit-avatar/fire.js new file mode 100644 index 00000000..3cfb7434 --- /dev/null +++ b/commands/edit-avatar/fire.js @@ -0,0 +1,72 @@ +const Command = require('../../structures/Command'); +const { createCanvas, loadImage } = require('canvas'); +const GIFEncoder = require('gifencoder'); +const request = require('node-superfetch'); +const path = require('path'); +const { streamToArray } = require('../../util/Util'); +const { drawImageWithTint } = require('../../util/Canvas'); +const frameCount = 31; + +module.exports = class FireCommand extends Command { + constructor(client) { + super(client, { + name: 'fire', + aliases: ['hell', 'burn'], + group: 'edit-avatar', + memberName: 'fire', + description: 'Burns a user\'s avatar.', + throttling: { + usages: 1, + duration: 10 + }, + clientPermissions: ['ATTACH_FILES'], + credit: [ + { + name: 'LowGif', + url: 'http://www.lowgif.com/', + reason: 'Images', + reasonURL: 'http://www.lowgif.com/43360ebce9150f23.html' + } + ], + args: [ + { + key: 'user', + prompt: 'Which user would you like to edit the avatar of?', + type: 'user', + default: msg => msg.author + }, + ] + }); + } + + async run(msg, { user }) { + const avatarURL = user.displayAvatarURL({ format: 'png', size: 512 }); + try { + const { body } = await request.get(avatarURL); + const avatar = await loadImage(body); + const encoder = new GIFEncoder(avatar.width, avatar.height); + const canvas = createCanvas(avatar.width, avatar.height); + const ctx = canvas.getContext('2d'); + const stream = encoder.createReadStream(); + encoder.start(); + encoder.setRepeat(0); + encoder.setDelay(4); + encoder.setQuality(200); + const ratio = avatar.width / avatar.height; + const height = Math.round(avatar.width / ratio); + for (let i = 0; i < frameCount; i += 2) { + const frameID = `frame-${i.toString.padStart(2, '0')}.gif`; + const frame = await loadImage(path.join(__dirname, '..', '..', 'assets', 'images', 'fire', frameID)); + drawImageWithTint(ctx, avatar, '#fc671e', 0, 0); + ctx.drawImage(frame, 0, avatar.height - height, avatar.width, height); + encoder.addFrame(ctx); + encoder.addFrame(ctx); + } + encoder.finish(); + const buffer = await streamToArray(stream); + return msg.say({ files: [{ attachment: Buffer.concat(buffer), name: 'fire.gif' }] }); + } catch (err) { + return msg.reply(`Oh no, an error occurred: \`${err.message}\`. Try again later!`); + } + } +}; diff --git a/commands/edit-image/fire.js b/commands/edit-image/fire-frame.js similarity index 85% rename from commands/edit-image/fire.js rename to commands/edit-image/fire-frame.js index c1c13434..0cb1741a 100644 --- a/commands/edit-image/fire.js +++ b/commands/edit-image/fire-frame.js @@ -4,13 +4,13 @@ const request = require('node-superfetch'); const path = require('path'); const { drawImageWithTint } = require('../../util/Canvas'); -module.exports = class FireCommand extends Command { +module.exports = class FireFrameCommand extends Command { constructor(client) { super(client, { - name: 'fire', - aliases: ['hell'], + name: 'fire-frame', + aliases: ['hell-frame', 'burn-frame'], group: 'edit-image', - memberName: 'fire', + memberName: 'fire-frame', description: 'Draws a fiery border over an image or a user\'s avatar.', throttling: { usages: 1, @@ -38,7 +38,7 @@ module.exports = class FireCommand extends Command { async run(msg, { image }) { try { - const base = await loadImage(path.join(__dirname, '..', '..', 'assets', 'images', 'fire.png')); + const base = await loadImage(path.join(__dirname, '..', '..', 'assets', 'images', 'fire-frame.png')); const { body } = await request.get(image); const data = await loadImage(body); const canvas = createCanvas(data.width, data.height); @@ -47,7 +47,7 @@ module.exports = class FireCommand extends Command { ctx.drawImage(base, 0, 0, data.width, data.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: 'fire.png' }] }); + return msg.say({ files: [{ attachment, name: 'fire-frame.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 dc1efaac..4dd1b76c 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "xiao", - "version": "115.4.0", + "version": "116.0.0", "description": "Your personal server companion.", "main": "Xiao.js", "scripts": {