From 7dd7ef5a29d5e63e87f559dbaa97dab455d62cac Mon Sep 17 00:00:00 2001 From: Dragon Fire Date: Sun, 28 Mar 2021 16:16:30 -0400 Subject: [PATCH] Sip and Choccy support users --- .../chocolate-milk.js | 35 ++++++++++--------- commands/{edit-avatar => edit-image}/sip.js | 29 ++++++++------- package.json | 2 +- 3 files changed, 36 insertions(+), 30 deletions(-) rename commands/{edit-avatar => edit-image}/chocolate-milk.js (53%) rename commands/{edit-avatar => edit-image}/sip.js (62%) diff --git a/commands/edit-avatar/chocolate-milk.js b/commands/edit-image/chocolate-milk.js similarity index 53% rename from commands/edit-avatar/chocolate-milk.js rename to commands/edit-image/chocolate-milk.js index d3062510..c8f88c67 100644 --- a/commands/edit-avatar/chocolate-milk.js +++ b/commands/edit-image/chocolate-milk.js @@ -8,9 +8,9 @@ module.exports = class ChocolateMilkCommand extends Command { super(client, { name: 'chocolate-milk', aliases: ['milk', 'sip-milk', 'sip-chocolate-milk', 'choccy', 'sip-choccy'], - group: 'edit-avatar', + group: 'edit-image', memberName: 'chocolate-milk', - description: 'Draws a user\'s avatar holding chocolate milk.', + description: 'Draws an image or user\'s avatar holding chocolate milk.', throttling: { usages: 2, duration: 10 @@ -18,10 +18,10 @@ module.exports = class ChocolateMilkCommand extends Command { clientPermissions: ['ATTACH_FILES'], args: [ { - key: 'user', - prompt: 'Which user would you like to edit the avatar of?', - type: 'user', - default: msg => msg.author + key: 'image', + prompt: 'What image would you like to edit?', + type: 'image-or-avatar', + default: msg => msg.author.displayAvatarURL({ format: 'png', size: 1024 }) }, { key: 'direction', @@ -35,23 +35,26 @@ module.exports = class ChocolateMilkCommand extends Command { }); } - async run(msg, { user, direction }) { - const avatarURL = user.displayAvatarURL({ format: 'png', size: 512 }); + async run(msg, { image, direction }) { try { - const base = await loadImage(path.join(__dirname, '..', '..', 'assets', 'images', 'chocolate-milk.png')); - const { body } = await request.get(avatarURL); - const avatar = await loadImage(body); + const overlay = await loadImage(path.join(__dirname, '..', '..', 'assets', 'images', 'chocolate-milk.png')); + const { body } = await request.get(image); + const base = await loadImage(body); const canvas = createCanvas(base.width, base.height); + const scaleH = overlay.width / base.width; + const height = Math.round(base.height * scaleH); const ctx = canvas.getContext('2d'); - ctx.fillRect(0, 0, base.width, base.height); + ctx.fillRect(0, 0, overlay.width, overlay.height); if (direction === 'right') { - ctx.translate(base.width, 0); + ctx.translate(overlay.width, 0); ctx.scale(-1, 1); } - ctx.drawImage(avatar, 0, 0, 512, 512); + ctx.drawImage(base, 0, 0, overlay.width, height); if (direction === 'right') ctx.setTransform(1, 0, 0, 1, 0, 0); - ctx.drawImage(base, 0, 0); - return msg.say({ files: [{ attachment: canvas.toBuffer(), name: 'chocolate-milk.png' }] }); + ctx.drawImage(overlay, 0, 0); + 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: 'chocolate-milk.png' }] }); } catch (err) { return msg.reply(`Oh no, an error occurred: \`${err.message}\`. Try again later!`); } diff --git a/commands/edit-avatar/sip.js b/commands/edit-image/sip.js similarity index 62% rename from commands/edit-avatar/sip.js rename to commands/edit-image/sip.js index aea4143d..1938c086 100644 --- a/commands/edit-avatar/sip.js +++ b/commands/edit-image/sip.js @@ -26,10 +26,10 @@ module.exports = class SipCommand extends Command { ], args: [ { - key: 'user', - prompt: 'Which user would you like to edit the avatar of?', - type: 'user', - default: msg => msg.author + key: 'image', + prompt: 'What image would you like to edit?', + type: 'image-or-avatar', + default: msg => msg.author.displayAvatarURL({ format: 'png', size: 1024 }) }, { key: 'direction', @@ -43,23 +43,26 @@ module.exports = class SipCommand extends Command { }); } - async run(msg, { user, direction }) { - const avatarURL = user.displayAvatarURL({ format: 'png', size: 512 }); + async run(msg, { image, direction }) { try { - const base = await loadImage(path.join(__dirname, '..', '..', 'assets', 'images', 'sip.png')); + const overlay = await loadImage(path.join(__dirname, '..', '..', 'assets', 'images', 'sip.png')); const { body } = await request.get(avatarURL); - const avatar = await loadImage(body); + const base = await loadImage(body); const canvas = createCanvas(base.width, base.height); + const scaleH = overlay.width / base.width; + const height = Math.round(base.height * scaleH); const ctx = canvas.getContext('2d'); - ctx.fillRect(0, 0, base.width, base.height); + ctx.fillRect(0, 0, overlay.width, overlay.height); if (direction === 'right') { - ctx.translate(base.width, 0); + ctx.translate(overlay.width, 0); ctx.scale(-1, 1); } - ctx.drawImage(avatar, 0, 0, 512, 512); + ctx.drawImage(base, 0, 0, overlay.width, height); if (direction === 'right') ctx.setTransform(1, 0, 0, 1, 0, 0); - ctx.drawImage(base, 0, 0); - return msg.say({ files: [{ attachment: canvas.toBuffer(), name: 'sip.png' }] }); + ctx.drawImage(overlay, 0, 0); + 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: 'sip.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 b41032aa..e5a82c3a 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "xiao", - "version": "134.4.0", + "version": "134.4.1", "description": "Your personal server companion.", "main": "Xiao.js", "scripts": {