diff --git a/assets/images/christmas-hat.png b/assets/images/christmas-hat.png index 07351e27..75e786c7 100644 Binary files a/assets/images/christmas-hat.png and b/assets/images/christmas-hat.png differ diff --git a/assets/images/thug-life.png b/assets/images/thug-life.png index a99bd5d8..3cc53901 100644 Binary files a/assets/images/thug-life.png and b/assets/images/thug-life.png differ diff --git a/commands/avatar-edit/3000-years.js b/commands/avatar-edit/3000-years.js index 6dc11ff7..8d26f133 100644 --- a/commands/avatar-edit/3000-years.js +++ b/commands/avatar-edit/3000-years.js @@ -34,14 +34,17 @@ module.exports = class YearsCommand extends Command { size: 256 }); try { - const canvas = createCanvas(856, 569); - const ctx = canvas.getContext('2d'); const base = await loadImage(path.join(__dirname, '..', '..', 'assets', 'images', '3000-years.png')); const { body } = await snekfetch.get(avatarURL); const avatar = await loadImage(body); + const canvas = createCanvas(base.width, base.height); + const ctx = canvas.getContext('2d'); ctx.drawImage(base, 0, 0); ctx.drawImage(avatar, 461, 127, 200, 200); - return msg.say({ files: [{ attachment: canvas.toBuffer(), name: '3000-years.png' }] }); + return msg.say({ files: [{ + attachment: canvas.toBuffer(), + name: '3000-years.png' + }] }); } catch (err) { return msg.say(`Oh no, an error occurred: \`${err.message}\`. Try again later!`); } diff --git a/commands/avatar-edit/approved.js b/commands/avatar-edit/approved.js index b372527a..929e4186 100644 --- a/commands/avatar-edit/approved.js +++ b/commands/avatar-edit/approved.js @@ -34,14 +34,17 @@ module.exports = class ApprovedCommand extends Command { size: 512 }); try { - const canvas = createCanvas(512, 512); - const ctx = canvas.getContext('2d'); const base = await loadImage(path.join(__dirname, '..', '..', 'assets', 'images', 'approved.png')); const { body } = await snekfetch.get(avatarURL); const avatar = await loadImage(body); - ctx.drawImage(avatar, 0, 0, 512, 512); - ctx.drawImage(base, 0, 0, 512, 512); - return msg.say({ files: [{ attachment: canvas.toBuffer(), name: 'approved.png' }] }); + const canvas = createCanvas(avatar.width, avatar.height); + const ctx = canvas.getContext('2d'); + ctx.drawImage(avatar, 0, 0); + ctx.drawImage(base, 0, 0, avatar.width, avatar.height); + return msg.say({ files: [{ + attachment: canvas.toBuffer(), + name: 'approved.png' + }] }); } catch (err) { return msg.say(`Oh no, an error occurred: \`${err.message}\`. Try again later!`); } diff --git a/commands/avatar-edit/avatar-fusion.js b/commands/avatar-edit/avatar-fusion.js index 171f3984..8d880a17 100644 --- a/commands/avatar-edit/avatar-fusion.js +++ b/commands/avatar-edit/avatar-fusion.js @@ -42,16 +42,19 @@ module.exports = class AvatarFusionCommand extends Command { size: 512 }); try { - const canvas = createCanvas(512, 512); - const ctx = canvas.getContext('2d'); const baseAvatarData = await snekfetch.get(baseAvatarURL); const baseAvatar = await loadImage(baseAvatarData.body); const overlayAvatarData = await snekfetch.get(overlayAvatarURL); const overlayAvatar = await loadImage(overlayAvatarData.body); + const canvas = createCanvas(baseAvatar.width, baseAvatar.height); + const ctx = canvas.getContext('2d'); ctx.globalAlpha = 0.5; - ctx.drawImage(baseAvatar, 0, 0, 512, 512); - ctx.drawImage(overlayAvatar, 0, 0, 512, 512); - return msg.say({ files: [{ attachment: canvas.toBuffer(), name: 'avatar-fusion.png' }] }); + ctx.drawImage(baseAvatar, 0, 0); + ctx.drawImage(overlayAvatar, 0, 0, baseAvatar.width, baseAvatar.height); + return msg.say({ files: [{ + attachment: canvas.toBuffer(), + name: 'avatar-fusion.png' + }] }); } catch (err) { return msg.say(`Oh no, an error occurred: \`${err.message}\`. Try again later!`); } diff --git a/commands/avatar-edit/beautiful.js b/commands/avatar-edit/beautiful.js index 2a6361b2..3821ab5f 100644 --- a/commands/avatar-edit/beautiful.js +++ b/commands/avatar-edit/beautiful.js @@ -34,15 +34,18 @@ module.exports = class BeautifulCommand extends Command { size: 256 }); try { - const canvas = createCanvas(500, 532); - const ctx = canvas.getContext('2d'); const base = await loadImage(path.join(__dirname, '..', '..', 'assets', 'images', 'beautiful.png')); const { body } = await snekfetch.get(avatarURL); const avatar = await loadImage(body); + const canvas = createCanvas(base.width, base.height); + const ctx = canvas.getContext('2d'); ctx.drawImage(base, 0, 0); ctx.drawImage(avatar, 341, 35, 117, 135); ctx.drawImage(avatar, 343, 301, 117, 135); - return msg.say({ files: [{ attachment: canvas.toBuffer(), name: 'beautiful.png' }] }); + return msg.say({ files: [{ + attachment: canvas.toBuffer(), + name: 'beautiful.png' + }] }); } catch (err) { return msg.say(`Oh no, an error occurred: \`${err.message}\`. Try again later!`); } diff --git a/commands/avatar-edit/bob-ross.js b/commands/avatar-edit/bob-ross.js index 9c402371..4a198be4 100644 --- a/commands/avatar-edit/bob-ross.js +++ b/commands/avatar-edit/bob-ross.js @@ -34,18 +34,21 @@ module.exports = class BobRossCommand extends Command { size: 256 }); try { - const canvas = createCanvas(600, 775); - const ctx = canvas.getContext('2d'); const base = await loadImage(path.join(__dirname, '..', '..', 'assets', 'images', 'bob-ross.png')); const { body } = await snekfetch.get(avatarURL); const avatar = await loadImage(body); + const canvas = createCanvas(base.width, base.height); + const ctx = canvas.getContext('2d'); ctx.fillStyle = 'white'; - ctx.fillRect(0, 0, 600, 775); + ctx.fillRect(0, 0, base.width, base.height); ctx.rotate(3 * (Math.PI / 180)); ctx.drawImage(avatar, 69, 102, 256, 256); ctx.rotate(-3 * (Math.PI / 180)); ctx.drawImage(base, 0, 0); - return msg.say({ files: [{ attachment: canvas.toBuffer(), name: 'bob-ross.png' }] }); + return msg.say({ files: [{ + attachment: canvas.toBuffer(), + name: 'bob-ross.png' + }] }); } catch (err) { return msg.say(`Oh no, an error occurred: \`${err.message}\`. Try again later!`); } diff --git a/commands/avatar-edit/card.js b/commands/avatar-edit/card.js index 6b64d269..e2030418 100644 --- a/commands/avatar-edit/card.js +++ b/commands/avatar-edit/card.js @@ -35,7 +35,7 @@ module.exports = class CardCommand extends Command { if (!user) user = msg.author; const avatarURL = user.displayAvatarURL({ format: 'png', - size: 256 + size: 512 }); try { const cardID = Math.floor(Math.random() * (9999 - 1000 + 1)) + 1000; @@ -43,11 +43,11 @@ module.exports = class CardCommand extends Command { if (cardID < 5000) rarity = 'C'; else if (cardID < 9000) rarity = 'U'; else rarity = 'R'; - const canvas = createCanvas(390, 544); - const ctx = canvas.getContext('2d'); const base = await loadImage(path.join(__dirname, '..', '..', 'assets', 'images', 'card.png')); const { body } = await snekfetch.get(avatarURL); const avatar = await loadImage(body); + const canvas = createCanvas(base.width, base.height); + const ctx = canvas.getContext('2d'); ctx.fillStyle = 'white'; ctx.fillRect(0, 0, 390, 544); ctx.drawImage(avatar, 11, 11, 370, 370); @@ -63,7 +63,10 @@ module.exports = class CardCommand extends Command { ctx.font = '14px Noto'; ctx.fillText(user.id, 30, 355); ctx.fillText(`#${user.discriminator}`, 313, 355); - return msg.say({ files: [{ attachment: canvas.toBuffer(), name: 'card.png' }] }); + return msg.say({ files: [{ + attachment: canvas.toBuffer(), + name: 'card.png' + }] }); } catch (err) { return msg.say(`Oh no, an error occurred: \`${err.message}\`. Try again later!`); } diff --git a/commands/avatar-edit/challenger.js b/commands/avatar-edit/challenger.js index 37d097fc..860c962c 100644 --- a/commands/avatar-edit/challenger.js +++ b/commands/avatar-edit/challenger.js @@ -34,14 +34,17 @@ module.exports = class ChallengerCommand extends Command { size: 256 }); try { - const canvas = createCanvas(800, 450); - const ctx = canvas.getContext('2d'); const base = await loadImage(path.join(__dirname, '..', '..', 'assets', 'images', 'challenger.png')); const { body } = await snekfetch.get(avatarURL); const avatar = await loadImage(body); + const canvas = createCanvas(base.width, base.height); + const ctx = canvas.getContext('2d'); ctx.drawImage(base, 0, 0); ctx.drawImage(avatar, 484, 98, 256, 256); - return msg.say({ files: [{ attachment: canvas.toBuffer(), name: 'challenger.png' }] }); + return msg.say({ files: [{ + attachment: canvas.toBuffer(), + name: 'challenger.png' + }] }); } catch (err) { return msg.say(`Oh no, an error occurred: \`${err.message}\`. Try again later!`); } diff --git a/commands/avatar-edit/christmas-hat.js b/commands/avatar-edit/christmas-hat.js index 4a8c516e..ffdf3231 100644 --- a/commands/avatar-edit/christmas-hat.js +++ b/commands/avatar-edit/christmas-hat.js @@ -33,14 +33,17 @@ module.exports = class ChristmasHatCommand extends Command { size: 512 }); try { - const canvas = createCanvas(512, 512); - const ctx = canvas.getContext('2d'); const base = await loadImage(path.join(__dirname, '..', '..', 'assets', 'images', 'christmas-hat.png')); const { body } = await snekfetch.get(avatarURL); const avatar = await loadImage(body); - ctx.drawImage(avatar, 0, 0, 512, 512); - ctx.drawImage(base, 122, -34, 375, 441); - return msg.say({ files: [{ attachment: canvas.toBuffer(), name: 'christmas-hat.png' }] }); + const canvas = createCanvas(avatar.width, avatar.height); + const ctx = canvas.getContext('2d'); + ctx.drawImage(avatar, 0, 0); + ctx.drawImage(base, 0, 0, avatar.width, avatar.height); + return msg.say({ files: [{ + attachment: canvas.toBuffer(), + name: 'christmas-hat.png' + }] }); } catch (err) { return msg.say(`Oh no, an error occurred: \`${err.message}\`. Try again later!`); } diff --git a/commands/avatar-edit/dexter.js b/commands/avatar-edit/dexter.js index a104fb50..b153f7b4 100644 --- a/commands/avatar-edit/dexter.js +++ b/commands/avatar-edit/dexter.js @@ -33,16 +33,19 @@ module.exports = class DexterCommand extends Command { size: 256 }); try { - const canvas = createCanvas(744, 554); - const ctx = canvas.getContext('2d'); const base = await loadImage(path.join(__dirname, '..', '..', 'assets', 'images', 'dexter.png')); const { body } = await snekfetch.get(avatarURL); const avatar = await loadImage(body); + const canvas = createCanvas(base.width, base.height); + const ctx = canvas.getContext('2d'); ctx.drawImage(base, 0, 0); ctx.rotate(-11 * (Math.PI / 180)); ctx.drawImage(avatar, 234, 274, 225, 225); ctx.rotate(11 * (Math.PI / 180)); - return msg.say({ files: [{ attachment: canvas.toBuffer(), name: 'dexter.png' }] }); + return msg.say({ files: [{ + attachment: canvas.toBuffer(), + name: 'dexter.png' + }] }); } catch (err) { return msg.say(`Oh no, an error occurred: \`${err.message}\`. Try again later!`); } diff --git a/commands/avatar-edit/food-broke.js b/commands/avatar-edit/food-broke.js index fe8b2135..fc7bf9ea 100644 --- a/commands/avatar-edit/food-broke.js +++ b/commands/avatar-edit/food-broke.js @@ -34,15 +34,18 @@ module.exports = class FoodBrokeCommand extends Command { size: 128 }); try { - const canvas = createCanvas(680, 680); - const ctx = canvas.getContext('2d'); const base = await loadImage(path.join(__dirname, '..', '..', 'assets', 'images', 'food-broke.png')); const { body } = await snekfetch.get(avatarURL); const avatar = await loadImage(body); + const canvas = createCanvas(base.width, base.height); + const ctx = canvas.getContext('2d'); ctx.drawImage(base, 0, 0); ctx.drawImage(avatar, 23, 9, 125, 125); ctx.drawImage(avatar, 117, 382, 75, 75); - return msg.say({ files: [{ attachment: canvas.toBuffer(), name: 'food-broke.png' }] }); + return msg.say({ files: [{ + attachment: canvas.toBuffer(), + name: 'food-broke.png' + }] }); } catch (err) { return msg.say(`Oh no, an error occurred: \`${err.message}\`. Try again later!`); } diff --git a/commands/avatar-edit/greyscale.js b/commands/avatar-edit/greyscale.js index af651573..93a74000 100644 --- a/commands/avatar-edit/greyscale.js +++ b/commands/avatar-edit/greyscale.js @@ -33,12 +33,12 @@ module.exports = class GreyscaleCommand extends Command { size: 512 }); try { - const canvas = createCanvas(512, 512); - const ctx = canvas.getContext('2d'); const { body } = await snekfetch.get(avatarURL); const avatar = await loadImage(body); - ctx.drawImage(avatar, 0, 0, 512, 512); - const imgData = ctx.getImageData(0, 0, 512, 512); + const canvas = createCanvas(avatar.width, avatar.height); + const ctx = canvas.getContext('2d'); + ctx.drawImage(avatar, 0, 0); + const imgData = ctx.getImageData(0, 0, avatar.width, avatar.height); 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]); @@ -47,7 +47,10 @@ module.exports = class GreyscaleCommand extends Command { data[i + 2] = brightness; } ctx.putImageData(imgData, 0, 0); - return msg.say({ files: [{ attachment: canvas.toBuffer(), name: 'greyscale.png' }] }); + return msg.say({ files: [{ + attachment: canvas.toBuffer(), + name: 'greyscale.png' + }] }); } catch (err) { return msg.say(`Oh no, an error occurred: \`${err.message}\`. Try again later!`); } diff --git a/commands/avatar-edit/he-lives-in-you.js b/commands/avatar-edit/he-lives-in-you.js index 75eb7ac3..c48d88bd 100644 --- a/commands/avatar-edit/he-lives-in-you.js +++ b/commands/avatar-edit/he-lives-in-you.js @@ -34,16 +34,19 @@ module.exports = class HeLivesInYouCommand extends Command { size: 256 }); try { - const canvas = createCanvas(500, 281); - const ctx = canvas.getContext('2d'); const base = await loadImage(path.join(__dirname, '..', '..', 'assets', 'images', 'he-lives-in-you.png')); const { body } = await snekfetch.get(avatarURL); const avatar = await loadImage(body); + const canvas = createCanvas(base.width, base.height); + const ctx = canvas.getContext('2d'); ctx.drawImage(base, 0, 0); ctx.rotate(-24 * (Math.PI / 180)); ctx.drawImage(avatar, 75, 160, 130, 150); ctx.rotate(24 * (Math.PI / 180)); - return msg.say({ files: [{ attachment: canvas.toBuffer(), name: 'he-lives-in-you.png' }] }); + return msg.say({ files: [{ + attachment: canvas.toBuffer(), + name: 'he-lives-in-you.png' + }] }); } catch (err) { return msg.say(`Oh no, an error occurred: \`${err.message}\`. Try again later!`); } diff --git a/commands/avatar-edit/i-have-the-power.js b/commands/avatar-edit/i-have-the-power.js index 12b676a1..995d9d7b 100644 --- a/commands/avatar-edit/i-have-the-power.js +++ b/commands/avatar-edit/i-have-the-power.js @@ -31,19 +31,22 @@ module.exports = class IHaveThePowerCommand extends Command { if (!user) user = msg.author; const avatarURL = user.displayAvatarURL({ format: 'png', - size: 512 + size: 256 }); try { - const canvas = createCanvas(720, 536); - const ctx = canvas.getContext('2d'); const base = await loadImage(path.join(__dirname, '..', '..', 'assets', 'images', 'i-have-the-power.png')); const { body } = await snekfetch.get(avatarURL); const avatar = await loadImage(body); + const canvas = createCanvas(base.width, base.height); + const ctx = canvas.getContext('2d'); ctx.drawImage(base, 0, 0); ctx.rotate(18.3 * (Math.PI / 180)); ctx.drawImage(avatar, 332, -125, 175, 175); ctx.rotate(-18.3 * (Math.PI / 180)); - return msg.say({ files: [{ attachment: canvas.toBuffer(), name: 'i-have-the-power.png' }] }); + return msg.say({ files: [{ + attachment: canvas.toBuffer(), + name: 'i-have-the-power.png' + }] }); } catch (err) { return msg.say(`Oh no, an error occurred: \`${err.message}\`. Try again later!`); } diff --git a/commands/avatar-edit/invert.js b/commands/avatar-edit/invert.js index 21090b55..4722d7af 100644 --- a/commands/avatar-edit/invert.js +++ b/commands/avatar-edit/invert.js @@ -32,12 +32,12 @@ module.exports = class InvertCommand extends Command { size: 512 }); try { - const canvas = createCanvas(512, 512); - const ctx = canvas.getContext('2d'); const { body } = await snekfetch.get(avatarURL); const avatar = await loadImage(body); - ctx.drawImage(avatar, 0, 0, 512, 512); - const imgData = ctx.getImageData(0, 0, 512, 512); + const canvas = createCanvas(avatar.width, avatar.height); + const ctx = canvas.getContext('2d'); + ctx.drawImage(avatar, 0, 0); + const imgData = ctx.getImageData(0, 0, avatar.width, avatar.height); const { data } = imgData; for (let i = 0; i < data.length; i += 4) { data[i] = 255 - data[i]; @@ -45,7 +45,10 @@ module.exports = class InvertCommand extends Command { data[i + 2] = 255 - data[i + 2]; } ctx.putImageData(imgData, 0, 0); - return msg.say({ files: [{ attachment: canvas.toBuffer(), name: 'invert.png' }] }); + return msg.say({ files: [{ + attachment: canvas.toBuffer(), + name: 'invert.png' + }] }); } catch (err) { return msg.say(`Oh no, an error occurred: \`${err.message}\`. Try again later!`); } diff --git a/commands/avatar-edit/look-at-this-photograph.js b/commands/avatar-edit/look-at-this-photograph.js index d4a4307c..a220f559 100644 --- a/commands/avatar-edit/look-at-this-photograph.js +++ b/commands/avatar-edit/look-at-this-photograph.js @@ -34,16 +34,19 @@ module.exports = class LookAtThisPhotographCommand extends Command { size: 256 }); try { - const canvas = createCanvas(620, 349); - const ctx = canvas.getContext('2d'); const base = await loadImage(path.join(__dirname, '..', '..', 'assets', 'images', 'look-at-this-photograph.png')); const { body } = await snekfetch.get(avatarURL); const avatar = await loadImage(body); + const canvas = createCanvas(base.width, base.height); + const ctx = canvas.getContext('2d'); ctx.drawImage(base, 0, 0); ctx.rotate(-13.5 * (Math.PI / 180)); ctx.drawImage(avatar, 280, 218, 175, 125); ctx.rotate(13.5 * (Math.PI / 180)); - return msg.say({ files: [{ attachment: canvas.toBuffer(), name: 'look-at-this-photograph.png' }] }); + return msg.say({ files: [{ + attachment: canvas.toBuffer(), + name: 'look-at-this-photograph.png' + }] }); } catch (err) { return msg.say(`Oh no, an error occurred: \`${err.message}\`. Try again later!`); } diff --git a/commands/avatar-edit/photograph.js b/commands/avatar-edit/photograph.js index 66cba59e..9ff97b8a 100644 --- a/commands/avatar-edit/photograph.js +++ b/commands/avatar-edit/photograph.js @@ -33,16 +33,19 @@ module.exports = class PhotographCommand extends Command { size: 256 }); try { - const canvas = createCanvas(625, 417); - const ctx = canvas.getContext('2d'); const base = await loadImage(path.join(__dirname, '..', '..', 'assets', 'images', 'photograph.png')); const { body } = await snekfetch.get(avatarURL); const avatar = await loadImage(body); + const canvas = createCanvas(base.width, base.height); + const ctx = canvas.getContext('2d'); ctx.drawImage(base, 0, 0); ctx.rotate(-8.21 * (Math.PI / 180)); ctx.drawImage(avatar, 85, 116, 150, 150); ctx.rotate(8.21 * (Math.PI / 180)); - return msg.say({ files: [{ attachment: canvas.toBuffer(), name: 'photograph.png' }] }); + return msg.say({ files: [{ + attachment: canvas.toBuffer(), + name: 'photograph.png' + }] }); } catch (err) { return msg.say(`Oh no, an error occurred: \`${err.message}\`. Try again later!`); } diff --git a/commands/avatar-edit/pixelize.js b/commands/avatar-edit/pixelize.js index 8149a96c..0b932ff1 100644 --- a/commands/avatar-edit/pixelize.js +++ b/commands/avatar-edit/pixelize.js @@ -32,13 +32,16 @@ module.exports = class PixelizeCommand extends Command { size: 64 }); try { - const canvas = createCanvas(512, 512); - const ctx = canvas.getContext('2d'); const { body } = await snekfetch.get(avatarURL); const avatar = await loadImage(body); + const canvas = createCanvas(512, 512); + const ctx = canvas.getContext('2d'); ctx.imageSmoothingEnabled = false; ctx.drawImage(avatar, 0, 0, 512, 512); - return msg.say({ files: [{ attachment: canvas.toBuffer(), name: 'pixelize.png' }] }); + return msg.say({ files: [{ + attachment: canvas.toBuffer(), + name: 'pixelize.png' + }] }); } catch (err) { return msg.say(`Oh no, an error occurred: \`${err.message}\`. Try again later!`); } diff --git a/commands/avatar-edit/rainbow.js b/commands/avatar-edit/rainbow.js index bad9d041..6ab02a25 100644 --- a/commands/avatar-edit/rainbow.js +++ b/commands/avatar-edit/rainbow.js @@ -34,14 +34,17 @@ module.exports = class RainbowCommand extends Command { size: 512 }); try { - const canvas = createCanvas(512, 512); - const ctx = canvas.getContext('2d'); const base = await loadImage(path.join(__dirname, '..', '..', 'assets', 'images', 'rainbow.png')); const { body } = await snekfetch.get(avatarURL); const avatar = await loadImage(body); - ctx.drawImage(avatar, 0, 0, 512, 512); - ctx.drawImage(base, 0, 0, 512, 512); - return msg.say({ files: [{ attachment: canvas.toBuffer(), name: 'rainbow.png' }] }); + const canvas = createCanvas(avatar.width, avatar.height); + const ctx = canvas.getContext('2d'); + ctx.drawImage(avatar, 0, 0); + ctx.drawImage(base, 0, 0, avatar.width, avatar.height); + return msg.say({ files: [{ + attachment: canvas.toBuffer(), + name: 'rainbow.png' + }] }); } catch (err) { return msg.say(`Oh no, an error occurred: \`${err.message}\`. Try again later!`); } diff --git a/commands/avatar-edit/rejected.js b/commands/avatar-edit/rejected.js index 82744f84..d7c83670 100644 --- a/commands/avatar-edit/rejected.js +++ b/commands/avatar-edit/rejected.js @@ -34,14 +34,17 @@ module.exports = class RejctedCommand extends Command { size: 512 }); try { - const canvas = createCanvas(512, 512); - const ctx = canvas.getContext('2d'); const base = await loadImage(path.join(__dirname, '..', '..', 'assets', 'images', 'rejected.png')); const { body } = await snekfetch.get(avatarURL); const avatar = await loadImage(body); - ctx.drawImage(avatar, 0, 0, 512, 512); - ctx.drawImage(base, 0, 0, 512, 512); - return msg.say({ files: [{ attachment: canvas.toBuffer(), name: 'rejected.png' }] }); + const canvas = createCanvas(avatar.width, avatar.height); + const ctx = canvas.getContext('2d'); + ctx.drawImage(avatar, 0, 0); + ctx.drawImage(base, 0, 0, avatar.width, avatar.height); + return msg.say({ files: [{ + attachment: canvas.toBuffer(), + name: 'rejected.png' + }] }); } catch (err) { return msg.say(`Oh no, an error occurred: \`${err.message}\`. Try again later!`); } diff --git a/commands/avatar-edit/rip.js b/commands/avatar-edit/rip.js index a1617e83..a17aa9da 100644 --- a/commands/avatar-edit/rip.js +++ b/commands/avatar-edit/rip.js @@ -34,11 +34,11 @@ module.exports = class RIPCommand extends Command { size: 256 }); try { - const canvas = createCanvas(507, 338); - const ctx = canvas.getContext('2d'); const base = await loadImage(path.join(__dirname, '..', '..', 'assets', 'images', 'rip.png')); const { body } = await snekfetch.get(avatarURL); const avatar = await loadImage(body); + const canvas = createCanvas(base.width, base.height); + const ctx = canvas.getContext('2d'); ctx.drawImage(base, 0, 0); ctx.drawImage(avatar, 158, 51, 200, 200); const imgData = ctx.getImageData(158, 51, 200, 200); @@ -50,7 +50,10 @@ module.exports = class RIPCommand extends Command { data[i + 2] = brightness; } ctx.putImageData(imgData, 158, 51); - return msg.say({ files: [{ attachment: canvas.toBuffer(), name: 'rip.png' }] }); + return msg.say({ files: [{ + attachment: canvas.toBuffer(), + name: 'rip.png' + }] }); } catch (err) { return msg.say(`Oh no, an error occurred: \`${err.message}\`. Try again later!`); } diff --git a/commands/avatar-edit/steam-card.js b/commands/avatar-edit/steam-card.js index e1fc0791..640bbd3b 100644 --- a/commands/avatar-edit/steam-card.js +++ b/commands/avatar-edit/steam-card.js @@ -38,18 +38,21 @@ module.exports = class SteamCardCommand extends Command { size: 512 }); try { - const canvas = createCanvas(494, 568); - const ctx = canvas.getContext('2d'); const base = await loadImage(path.join(__dirname, '..', '..', 'assets', 'images', 'steam-card.png')); const { body } = await snekfetch.get(avatarURL); const avatar = await loadImage(body); + const canvas = createCanvas(base.width, base.height); + const ctx = canvas.getContext('2d'); ctx.fillStyle = 'white'; - ctx.fillRect(0, 0, 494, 568); + ctx.fillRect(0, 0, base.width, base.height); ctx.drawImage(avatar, 25, 25, 450, 450); ctx.drawImage(base, 0, 0); ctx.font = '30px Noto'; ctx.fillText(member.displayName, 35, 48); - return msg.say({ files: [{ attachment: canvas.toBuffer(), name: 'steam-card.png' }] }); + return msg.say({ files: [{ + attachment: canvas.toBuffer(), + name: 'steam-card.png' + }] }); } catch (err) { return msg.say(`Oh no, an error occurred: \`${err.message}\`. Try again later!`); } diff --git a/commands/avatar-edit/steam-now-playing.js b/commands/avatar-edit/steam-now-playing.js index 29f81f16..1d0de3d6 100644 --- a/commands/avatar-edit/steam-now-playing.js +++ b/commands/avatar-edit/steam-now-playing.js @@ -40,14 +40,14 @@ module.exports = class SteamNowPlayingCommand extends Command { if (!member) member = msg.member; const avatarURL = member.user.displayAvatarURL({ format: 'png', - size: 128 + size: 64 }); try { - const canvas = createCanvas(239, 73); - const ctx = canvas.getContext('2d'); const base = await loadImage(path.join(__dirname, '..', '..', 'assets', 'images', 'steam-now-playing.png')); const { body } = await snekfetch.get(avatarURL); const avatar = await loadImage(body); + const canvas = createCanvas(base.width, base.height); + const ctx = canvas.getContext('2d'); ctx.drawImage(base, 0, 0); ctx.drawImage(avatar, 21, 21, 32, 32); ctx.fillStyle = '#90ba3c'; @@ -57,7 +57,10 @@ module.exports = class SteamNowPlayingCommand extends Command { if (ctx.measureText(game).width > 160) shorten = true; while (ctx.measureText(game).width > 160) game = game.substr(0, game.length - 1); ctx.fillText(shorten ? `${game}...` : game, 63, 54); - return msg.say({ files: [{ attachment: canvas.toBuffer(), name: 'steam-now-playing.png' }] }); + return msg.say({ files: [{ + attachment: canvas.toBuffer(), + name: 'steam-now-playing.png' + }] }); } catch (err) { return msg.say(`Oh no, an error occurred: \`${err.message}\`. Try again later!`); } diff --git a/commands/avatar-edit/thug-life.js b/commands/avatar-edit/thug-life.js index 64fa2e68..0e07399f 100644 --- a/commands/avatar-edit/thug-life.js +++ b/commands/avatar-edit/thug-life.js @@ -33,14 +33,14 @@ module.exports = class ThugLifeCommand extends Command { size: 512 }); try { - const canvas = createCanvas(512, 512); - const ctx = canvas.getContext('2d'); const base = await loadImage(path.join(__dirname, '..', '..', 'assets', 'images', 'thug-life.png')); const { body } = await snekfetch.get(avatarURL); const avatar = await loadImage(body); - ctx.drawImage(avatar, 0, 0, 512, 512); - ctx.drawImage(base, 90, 379, 332, 111); - const imgData = ctx.getImageData(0, 0, 512, 512); + const canvas = createCanvas(avatar.width, avatar.height); + const ctx = canvas.getContext('2d'); + ctx.drawImage(avatar, 0, 0); + ctx.drawImage(base, 0, 0, avatar.width, avatar.height); + const imgData = ctx.getImageData(0, 0, avatar.width, avatar.height); 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]); @@ -49,7 +49,10 @@ module.exports = class ThugLifeCommand extends Command { data[i + 2] = brightness; } ctx.putImageData(imgData, 0, 0); - return msg.say({ files: [{ attachment: canvas.toBuffer(), name: 'thug-life.png' }] }); + return msg.say({ files: [{ + attachment: canvas.toBuffer(), + name: 'thug-life.png' + }] }); } catch (err) { return msg.say(`Oh no, an error occurred: \`${err.message}\`. Try again later!`); } diff --git a/commands/avatar-edit/triggered.js b/commands/avatar-edit/triggered.js index c7c324c6..6aedc92a 100644 --- a/commands/avatar-edit/triggered.js +++ b/commands/avatar-edit/triggered.js @@ -33,20 +33,23 @@ module.exports = class TriggeredCommand extends Command { size: 512 }); try { - const canvas = createCanvas(320, 371); - const ctx = canvas.getContext('2d'); const base = await loadImage(path.join(__dirname, '..', '..', 'assets', 'images', 'triggered.png')); const { body } = await snekfetch.get(avatarURL); const avatar = await loadImage(body); + const canvas = createCanvas(base.width, base.height); + const ctx = canvas.getContext('2d'); ctx.fillStyle = 'white'; - ctx.fillRect(0, 0, 320, 371); + ctx.fillRect(0, 0, base.width, base.height); 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); - return msg.say({ files: [{ attachment: canvas.toBuffer(), name: 'triggered.png' }] }); + return msg.say({ files: [{ + attachment: canvas.toBuffer(), + name: 'triggered.png' + }] }); } catch (err) { return msg.say(`Oh no, an error occurred: \`${err.message}\`. Try again later!`); } diff --git a/commands/avatar-edit/wanted.js b/commands/avatar-edit/wanted.js index 8914a209..385c641c 100644 --- a/commands/avatar-edit/wanted.js +++ b/commands/avatar-edit/wanted.js @@ -34,14 +34,17 @@ module.exports = class WantedCommand extends Command { size: 512 }); try { - const canvas = createCanvas(741, 1000); - const ctx = canvas.getContext('2d'); const base = await loadImage(path.join(__dirname, '..', '..', 'assets', 'images', 'wanted.png')); const { body } = await snekfetch.get(avatarURL); const avatar = await loadImage(body); + const canvas = createCanvas(base.width, base.height); + const ctx = canvas.getContext('2d'); ctx.drawImage(base, 0, 0); ctx.drawImage(avatar, 150, 360, 430, 430); - return msg.say({ files: [{ attachment: canvas.toBuffer(), name: 'wanted.png' }] }); + return msg.say({ files: [{ + attachment: canvas.toBuffer(), + name: 'wanted.png' + }] }); } catch (err) { return msg.say(`Oh no, an error occurred: \`${err.message}\`. Try again later!`); } diff --git a/commands/avatar-edit/yu-gi-oh-token.js b/commands/avatar-edit/yu-gi-oh-token.js index 39bdf8fe..ea3ecbb7 100644 --- a/commands/avatar-edit/yu-gi-oh-token.js +++ b/commands/avatar-edit/yu-gi-oh-token.js @@ -34,14 +34,17 @@ module.exports = class YuGiOhTokenCommand extends Command { size: 512 }); try { - const canvas = createCanvas(384, 564); - const ctx = canvas.getContext('2d'); const base = await loadImage(path.join(__dirname, '..', '..', 'assets', 'images', 'yu-gi-oh-token.png')); const { body } = await snekfetch.get(avatarURL); const avatar = await loadImage(body); + const canvas = createCanvas(base.width, base.height); + const ctx = canvas.getContext('2d'); ctx.drawImage(base, 0, 0); ctx.drawImage(avatar, 45, 102, 293, 294); - return msg.say({ files: [{ attachment: canvas.toBuffer(), name: 'yu-gi-oh-token.png' }] }); + return msg.say({ files: [{ + attachment: canvas.toBuffer(), + name: 'yu-gi-oh-token.png' + }] }); } catch (err) { return msg.say(`Oh no, an error occurred: \`${err.message}\`. Try again later!`); } diff --git a/commands/games/quiz.js b/commands/games/quiz.js index f0ee9945..52da7554 100644 --- a/commands/games/quiz.js +++ b/commands/games/quiz.js @@ -55,7 +55,8 @@ module.exports = class QuizCommand extends Command { answers.push(correct); await msg.say(stripIndents` **You have 15 seconds to answer this question.** - _${decodeURIComponent(body.results[0].category)}:_ ${decodeURIComponent(body.results[0].question)} + _${decodeURIComponent(body.results[0].category)}_ + ${decodeURIComponent(body.results[0].question)} ${type === 'boolean' ? 'True or False?' : ''}${type === 'multiple' ? `${list(shuffle(answers), 'or')}?` : ''} `); const msgs = await msg.channel.awaitMessages(res => res.author.id === msg.author.id, { diff --git a/commands/games/whos-that-pokemon.js b/commands/games/whos-that-pokemon.js index 2d9b78c5..25c11c36 100644 --- a/commands/games/whos-that-pokemon.js +++ b/commands/games/whos-that-pokemon.js @@ -1,4 +1,5 @@ const { Command } = require('discord.js-commando'); +const { MessageEmbed } = require('discord.js') const snekfetch = require('snekfetch'); const { filterPkmn } = require('../../structures/Util'); @@ -10,7 +11,7 @@ module.exports = class WhosThatPokemonCommand extends Command { group: 'games', memberName: 'whos-that-pokemon', description: 'Guess who that Pokémon is.', - clientPermissions: ['ATTACH_FILES'] + clientPermissions: ['EMBED_LINKS'] }); } @@ -20,8 +21,12 @@ module.exports = class WhosThatPokemonCommand extends Command { const { body } = await snekfetch.get(`https://pokeapi.co/api/v2/pokemon-species/${pokemon}/`); const names = body.names.map(name => name.name.toLowerCase()); const displayName = filterPkmn(body.names).name; - const image = `https://www.serebii.net/sunmoon/pokemon/${'000'.slice(body.id.toString().length)}${body.id}.png`; - await msg.say('**You have 15 seconds, who\'s that Pokémon?**', { files: [image] }); + const id = `${'000'.slice(body.id.toString().length)}${body.id}`; + const embed = new MessageEmbed() + .setColor(0xED1C24) + .setTitle('You have 15 seconds, who\'s that Pokémon?') + .setImage(`https://www.serebii.net/sunmoon/pokemon/${id}.png`); + await msg.embed(embed); const msgs = await msg.channel.awaitMessages(res => res.author.id === msg.author.id, { max: 1, time: 15000 diff --git a/commands/image-edit/achievement.js b/commands/image-edit/achievement.js index a73ead1d..28f03a75 100644 --- a/commands/image-edit/achievement.js +++ b/commands/image-edit/achievement.js @@ -33,7 +33,10 @@ module.exports = class AchievementCommand extends Command { h: 'Achievement Get!', t: text }); - return msg.say({ files: [{ attachment: body, name: 'achievement.png' }] }); + return msg.say({ files: [{ + attachment: body, + name: 'achievement.png' + }] }); } catch (err) { return msg.say(`Oh no, an error occurred: \`${err.message}\`. Try again later!`); } diff --git a/commands/image-edit/be-like-bill.js b/commands/image-edit/be-like-bill.js index 99d82aa4..efcf8047 100644 --- a/commands/image-edit/be-like-bill.js +++ b/commands/image-edit/be-like-bill.js @@ -32,9 +32,9 @@ module.exports = class BeLikeBillCommand extends Command { } async run(msg, { name }) { - const canvas = createCanvas(800, 420); - const ctx = canvas.getContext('2d'); const base = await loadImage(path.join(__dirname, '..', '..', 'assets', 'images', 'be-like-bill.png')); + const canvas = createCanvas(base.width, base.height); + const ctx = canvas.getContext('2d'); ctx.drawImage(base, 0, 0); ctx.font = '23px Noto'; const text = stripIndents` @@ -46,7 +46,10 @@ module.exports = class BeLikeBillCommand extends Command { Be like ${name}. `; ctx.fillText(text, 31, 80); - return msg.say({ files: [{ attachment: canvas.toBuffer(), name: 'be-like-bill.png' }] }); + return msg.say({ files: [{ + attachment: canvas.toBuffer(), + name: 'be-like-bill.png' + }] }); } }; diff --git a/commands/image-edit/color.js b/commands/image-edit/color.js index 2707e199..95839467 100644 --- a/commands/image-edit/color.js +++ b/commands/image-edit/color.js @@ -30,6 +30,9 @@ module.exports = class ColorCommand extends Command { const ctx = canvas.getContext('2d'); ctx.fillStyle = color; ctx.fillRect(0, 0, 250, 250); - return msg.say({ files: [{ attachment: canvas.toBuffer(), name: 'color.png' }] }); + return msg.say({ files: [{ + attachment: canvas.toBuffer(), + name: 'color.png' + }] }); } }; diff --git a/commands/image-edit/meme.js b/commands/image-edit/meme.js index dbc8248c..3cb7c55a 100644 --- a/commands/image-edit/meme.js +++ b/commands/image-edit/meme.js @@ -45,7 +45,10 @@ module.exports = class MemeCommand extends Command { const search = await snekfetch.get(`https://memegen.link/api/search/${type}`); if (!search.body.length) return msg.say('Could not find any results.'); const { body } = await snekfetch.get(search.body[0].template.blank.replace(/\/_/, `/${top}/${bottom}`)); - return msg.say({ files: [{ attachment: body, name: 'meme.jpg' }] }); + return msg.say({ files: [{ + attachment: body, + name: 'meme.jpg' + }] }); } catch (err) { return msg.say(`Oh no, an error occurred: \`${err.message}\`. Try again later!`); } diff --git a/commands/image-edit/pokemon-fusion.js b/commands/image-edit/pokemon-fusion.js index 7de9807f..e6691be3 100644 --- a/commands/image-edit/pokemon-fusion.js +++ b/commands/image-edit/pokemon-fusion.js @@ -1,5 +1,4 @@ const { Command } = require('discord.js-commando'); -const snekfetch = require('snekfetch'); const pokemon = require('../../assets/json/pokemon-fusion'); module.exports = class PokemonFusionCommand extends Command { @@ -36,12 +35,7 @@ module.exports = class PokemonFusionCommand extends Command { }); } - async run(msg, { body, palette }) { - try { - const image = await snekfetch.get(`http://images.alexonsager.net/pokemon/fused/${body}/${body}.${palette}.png`); - return msg.say({ files: [{ attachment: image.body, name: 'pokemon-fusion.png' }] }); - } catch (err) { - return msg.say(`Oh no, an error occurred: \`${err.message}\`. Try again later!`); - } + run(msg, { body, palette }) { + return msg.say(`http://images.alexonsager.net/pokemon/fused/${body}/${body}.${palette}.png`); } }; diff --git a/commands/image-edit/robohash.js b/commands/image-edit/robohash.js index 48e11ce6..7c8977d1 100644 --- a/commands/image-edit/robohash.js +++ b/commands/image-edit/robohash.js @@ -23,7 +23,10 @@ module.exports = class RobohashCommand extends Command { async run(msg, { text }) { try { const { body } = await snekfetch.get(`https://robohash.org/${text}`); - return msg.say({ files: [{ attachment: body, name: 'robohash.png' }] }); + return msg.say({ files: [{ + attachment: body, + name: 'robohash.png' + }] }); } catch (err) { return msg.say(`Oh no, an error occurred: \`${err.message}\`. Try again later!`); } diff --git a/commands/other/avatar.js b/commands/other/avatar.js index 9529f1b8..bce54017 100644 --- a/commands/other/avatar.js +++ b/commands/other/avatar.js @@ -27,9 +27,16 @@ module.exports = class AvatarCommand extends Command { const format = user.avatar.startsWith('a_') ? 'gif' : 'png'; const avatarURL = user.avatarURL({ format, - size: 2048 + size: 512 }); - const { body } = await snekfetch.get(avatarURL); - return msg.say({ files: [{ attachment: body, name: `avatar.${format}` }] }); + try { + const { body } = await snekfetch.get(avatarURL); + return msg.say({ files: [{ + attachment: body, + name: `avatar.${format}` + }] }); + } catch (err) { + return msg.say(`Oh no, an error occurred: \`${err.message}\`. Try again later!`); + } } }; diff --git a/commands/search/map.js b/commands/search/map.js index d460926f..d63f1a47 100644 --- a/commands/search/map.js +++ b/commands/search/map.js @@ -41,7 +41,10 @@ module.exports = class MapCommand extends Command { size: '500x500', key: GOOGLE_KEY }); - return msg.say({ files: [{ attachment: body, name: 'map.png' }] }); + return msg.say(``, { files: [{ + attachment: body, + name: 'map.png' + }] }); } catch (err) { return msg.say(`Oh no, an error occurred: \`${err.message}\`. Try again later!`); } diff --git a/package.json b/package.json index bbe78ae7..f87b9779 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "xiaobot", - "version": "47.2.0", + "version": "47.2.1", "description": "Your personal server companion.", "main": "Shard.js", "scripts": { diff --git a/structures/Util.js b/util/Util.js similarity index 100% rename from structures/Util.js rename to util/Util.js