diff --git a/assets/fonts/NotoEmoji-Regular.ttf b/assets/fonts/NotoEmoji-Regular.ttf deleted file mode 100644 index 19b7badf..00000000 Binary files a/assets/fonts/NotoEmoji-Regular.ttf and /dev/null differ diff --git a/commands/avatar-edit/3000-years.js b/commands/avatar-edit/3000-years.js index b3bfc5ff..ea8e5377 100644 --- a/commands/avatar-edit/3000-years.js +++ b/commands/avatar-edit/3000-years.js @@ -1,8 +1,6 @@ const Command = require('../../structures/Command'); -const Canvas = require('canvas'); +const { createCanvas, loadImage } = require('canvas'); const snekfetch = require('snekfetch'); -const { promisifyAll } = require('tsubaki'); -const fs = promisifyAll(require('fs')); const path = require('path'); module.exports = class YearsCommand extends Command { @@ -36,19 +34,13 @@ module.exports = class YearsCommand extends Command { size: 256 }); try { - const Image = Canvas.Image; - const canvas = new Canvas(856, 569); + const canvas = createCanvas(856, 569); const ctx = canvas.getContext('2d'); - const base = new Image(); - const avatar = new Image(); - const generate = () => { - ctx.drawImage(base, 0, 0); - ctx.drawImage(avatar, 461, 127, 200, 200); - }; - base.src = await fs.readFileAsync(path.join(__dirname, '..', '..', 'assets', 'images', '3000-years.png')); + const base = await loadImage(path.join(__dirname, '..', '..', 'assets', 'images', '3000-years.png')); const { body } = await snekfetch.get(avatarURL); - avatar.src = body; - generate(); + const avatar = await loadImage(body); + ctx.drawImage(base, 0, 0); + ctx.drawImage(avatar, 461, 127, 200, 200); return msg.say({ files: [{ attachment: canvas.toBuffer(), name: '3000-years.png' }] }); } catch (err) { return msg.say(`Oh no, the image generation failed: \`${err.message}\`. Try again later!`); diff --git a/commands/avatar-edit/beautiful.js b/commands/avatar-edit/beautiful.js index ed9cab08..92c43054 100644 --- a/commands/avatar-edit/beautiful.js +++ b/commands/avatar-edit/beautiful.js @@ -1,8 +1,6 @@ const Command = require('../../structures/Command'); -const Canvas = require('canvas'); +const { createCanvas, loadImage } = require('canvas'); const snekfetch = require('snekfetch'); -const { promisifyAll } = require('tsubaki'); -const fs = promisifyAll(require('fs')); const path = require('path'); module.exports = class BeautifulCommand extends Command { @@ -36,20 +34,14 @@ module.exports = class BeautifulCommand extends Command { size: 256 }); try { - const Image = Canvas.Image; - const canvas = new Canvas(500, 532); + const canvas = createCanvas(500, 532); const ctx = canvas.getContext('2d'); - const base = new Image(); - const avatar = new Image(); - const generate = () => { - ctx.drawImage(base, 0, 0); - ctx.drawImage(avatar, 341, 35, 117, 135); - ctx.drawImage(avatar, 343, 301, 117, 135); - }; - base.src = await fs.readFileAsync(path.join(__dirname, '..', '..', 'assets', 'images', 'beautiful.png')); + const base = await loadImage(path.join(__dirname, '..', '..', 'assets', 'images', 'beautiful.png')); const { body } = await snekfetch.get(avatarURL); - avatar.src = body; - generate(); + const avatar = await loadImage(body); + 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' }] }); } catch (err) { return msg.say(`Oh no, the image generation failed: \`${err.message}\`. Try again later!`); diff --git a/commands/avatar-edit/bob-ross.js b/commands/avatar-edit/bob-ross.js index 292738b9..daa57d65 100644 --- a/commands/avatar-edit/bob-ross.js +++ b/commands/avatar-edit/bob-ross.js @@ -1,8 +1,6 @@ const Command = require('../../structures/Command'); -const Canvas = require('canvas'); +const { createCanvas, loadImage } = require('canvas'); const snekfetch = require('snekfetch'); -const { promisifyAll } = require('tsubaki'); -const fs = promisifyAll(require('fs')); const path = require('path'); module.exports = class BobRossCommand extends Command { @@ -36,23 +34,17 @@ module.exports = class BobRossCommand extends Command { size: 256 }); try { - const Image = Canvas.Image; - const canvas = new Canvas(600, 775); + const canvas = createCanvas(600, 775); const ctx = canvas.getContext('2d'); - const base = new Image(); - const avatar = new Image(); - const generate = () => { - ctx.fillStyle = 'white'; - ctx.fillRect(0, 0, 600, 775); - ctx.rotate(3 * Math.PI / 180); - ctx.drawImage(avatar, 69, 102, 256, 256); - ctx.rotate(-3 * Math.PI / 180); - ctx.drawImage(base, 0, 0); - }; - base.src = await fs.readFileAsync(path.join(__dirname, '..', '..', 'assets', 'images', 'bob-ross.png')); + const base = await loadImage(path.join(__dirname, '..', '..', 'assets', 'images', 'bob-ross.png')); const { body } = await snekfetch.get(avatarURL); - avatar.src = body; - generate(); + const avatar = await loadImage(body); + ctx.fillStyle = 'white'; + ctx.fillRect(0, 0, 600, 775); + 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' }] }); } catch (err) { return msg.say(`Oh no, the image generation failed: \`${err.message}\`. Try again later!`); diff --git a/commands/avatar-edit/card.js b/commands/avatar-edit/card.js index b2408af8..f7697bc9 100644 --- a/commands/avatar-edit/card.js +++ b/commands/avatar-edit/card.js @@ -1,9 +1,7 @@ const Command = require('../../structures/Command'); -const Canvas = require('canvas'); +const { createCanvas, loadImage, parseFont } = require('canvas'); const snekfetch = require('snekfetch'); const moment = require('moment'); -const { promisifyAll } = require('tsubaki'); -const fs = promisifyAll(require('fs')); const path = require('path'); const { version } = require('../../package'); @@ -44,36 +42,29 @@ module.exports = class CardCommand extends Command { if (cardID < 5000) rarity = 'C'; else if (cardID < 8000) rarity = 'U'; else rarity = 'R'; - const Image = Canvas.Image; - Canvas.registerFont(path.join(__dirname, '..', '..', 'assets', 'fonts', 'Roboto.ttf'), { family: 'Roboto' }); // eslint-disable-line max-len - Canvas.registerFont(path.join(__dirname, '..', '..', 'assets', 'fonts', 'NotoEmoji-Regular.ttf'), { family: 'Roboto' }); // eslint-disable-line max-len - const canvas = new Canvas(390, 544); + parseFont(path.join(__dirname, '..', '..', 'assets', 'fonts', 'Roboto.ttf'), { family: 'Roboto' }); + const canvas = createCanvas(390, 544); const ctx = canvas.getContext('2d'); - const base = new Image(); - const avatar = new Image(); - const generate = () => { - ctx.fillStyle = 'white'; - ctx.fillRect(0, 0, 390, 544); - ctx.drawImage(avatar, 11, 11, 370, 370); - ctx.drawImage(base, 0, 0); - ctx.font = '18px Roboto'; - ctx.fillStyle = 'black'; - ctx.fillText(member.displayName, 30, 62); - ctx.fillText('Discord Join Date:', 148, 400); - ctx.fillText(moment(member.user.createdTimestamp).format('MMMM Do YYYY'), 148, 420); - ctx.fillText('Role:', 148, 457); - ctx.fillText(member.highestRole.name, 148, 477); - ctx.fillText(rarity, 73, 411); - ctx.fillText(cardID, 60, 457); - ctx.fillText(version.split('.')[0], 68, 502); - ctx.font = '14px Roboto'; - ctx.fillText(member.id, 30, 355); - ctx.fillText(`#${member.user.discriminator}`, 313, 355); - }; - base.src = await fs.readFileAsync(path.join(__dirname, '..', '..', 'assets', 'images', 'card.png')); + const base = await loadImage(path.join(__dirname, '..', '..', 'assets', 'images', 'card.png')); const { body } = await snekfetch.get(avatarURL); - avatar.src = body; - generate(); + const avatar = await loadImage(body); + ctx.fillStyle = 'white'; + ctx.fillRect(0, 0, 390, 544); + ctx.drawImage(avatar, 11, 11, 370, 370); + ctx.drawImage(base, 0, 0); + ctx.font = '18px Roboto'; + ctx.fillStyle = 'black'; + ctx.fillText(member.displayName, 30, 62); + ctx.fillText('Discord Join Date:', 148, 400); + ctx.fillText(moment(member.user.createdTimestamp).format('MMMM Do YYYY'), 148, 420); + ctx.fillText('Role:', 148, 457); + ctx.fillText(member.highestRole.name, 148, 477); + ctx.fillText(rarity, 73, 411); + ctx.fillText(cardID, 60, 457); + ctx.fillText(version.split('.')[0], 68, 502); + ctx.font = '14px Roboto'; + ctx.fillText(member.id, 30, 355); + ctx.fillText(`#${member.user.discriminator}`, 313, 355); return msg.say({ files: [{ attachment: canvas.toBuffer(), name: 'card.png' }] }); } catch (err) { return msg.say(`Oh no, the image generation failed: \`${err.message}\`. Try again later!`); diff --git a/commands/avatar-edit/challenger.js b/commands/avatar-edit/challenger.js index 0f12ab8e..2d09f874 100644 --- a/commands/avatar-edit/challenger.js +++ b/commands/avatar-edit/challenger.js @@ -1,8 +1,6 @@ const Command = require('../../structures/Command'); -const Canvas = require('canvas'); +const { createCanvas, loadImage } = require('canvas'); const snekfetch = require('snekfetch'); -const { promisifyAll } = require('tsubaki'); -const fs = promisifyAll(require('fs')); const path = require('path'); module.exports = class ChallengerCommand extends Command { @@ -35,21 +33,15 @@ module.exports = class ChallengerCommand extends Command { size: 256 }); try { - const Image = Canvas.Image; - const canvas = new Canvas(500, 500); + const canvas = createCanvas(500, 500); const ctx = canvas.getContext('2d'); - const base = new Image(); - const avatar = new Image(); - const generate = () => { - ctx.fillStyle = '#ff0028'; - ctx.fillRect(0, 0, 500, 500); - ctx.drawImage(avatar, 226, 155, 200, 200); - ctx.drawImage(base, 0, 0); - }; - base.src = await fs.readFileAsync(path.join(__dirname, '..', '..', 'assets', 'images', 'challenger.png')); + const base = await loadImage(path.join(__dirname, '..', '..', 'assets', 'images', 'challenger.png')); const { body } = await snekfetch.get(avatarURL); - avatar.src = body; - generate(); + const avatar = await loadImage(body); + ctx.fillStyle = '#ff0028'; + ctx.fillRect(0, 0, 500, 500); + ctx.drawImage(avatar, 226, 155, 200, 200); + ctx.drawImage(base, 0, 0); return msg.say({ files: [{ attachment: canvas.toBuffer(), name: 'challenger.png' }] }); } catch (err) { return msg.say(`Oh no, the image generation failed: \`${err.message}\`. Try again later!`); diff --git a/commands/avatar-edit/dexter.js b/commands/avatar-edit/dexter.js index e9e1ff1d..6b6554dc 100644 --- a/commands/avatar-edit/dexter.js +++ b/commands/avatar-edit/dexter.js @@ -1,8 +1,6 @@ const Command = require('../../structures/Command'); -const Canvas = require('canvas'); +const { createCanvas, loadImage } = require('canvas'); const snekfetch = require('snekfetch'); -const { promisifyAll } = require('tsubaki'); -const fs = promisifyAll(require('fs')); const path = require('path'); module.exports = class DexterCommand extends Command { @@ -35,21 +33,15 @@ module.exports = class DexterCommand extends Command { size: 256 }); try { - const Image = Canvas.Image; - const canvas = new Canvas(744, 554); + const canvas = createCanvas(744, 554); const ctx = canvas.getContext('2d'); - const base = new Image(); - const avatar = new Image(); - const generate = () => { - ctx.drawImage(base, 0, 0); - ctx.rotate(-11 * Math.PI / 180); - ctx.drawImage(avatar, 234, 274, 225, 225); - ctx.rotate(11 * Math.PI / 180); - }; - base.src = await fs.readFileAsync(path.join(__dirname, '..', '..', 'assets', 'images', 'dexter.png')); + const base = await loadImage(path.join(__dirname, '..', '..', 'assets', 'images', 'dexter.png')); const { body } = await snekfetch.get(avatarURL); - avatar.src = body; - generate(); + const avatar = await loadImage(body); + 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' }] }); } catch (err) { return msg.say(`Oh no, the image generation failed: \`${err.message}\`. Try again later!`); diff --git a/commands/avatar-edit/greyscale.js b/commands/avatar-edit/greyscale.js index c3ecc78b..9ea5c570 100644 --- a/commands/avatar-edit/greyscale.js +++ b/commands/avatar-edit/greyscale.js @@ -1,5 +1,5 @@ const Command = require('../../structures/Command'); -const Canvas = require('canvas'); +const { createCanvas, loadImage } = require('canvas'); const snekfetch = require('snekfetch'); module.exports = class GreyscaleCommand extends Command { @@ -33,25 +33,20 @@ module.exports = class GreyscaleCommand extends Command { size: 256 }); try { - const Image = Canvas.Image; - const canvas = new Canvas(256, 256); + const canvas = createCanvas(256, 256); const ctx = canvas.getContext('2d'); - const avatar = new Image(); - const generate = () => { - ctx.drawImage(avatar, 0, 0, 256, 256); - const imgData = ctx.getImageData(0, 0, 256, 256); - 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]; - data[i] = brightness; - data[i + 1] = brightness; - data[i + 2] = brightness; - } - ctx.putImageData(imgData, 0, 0); - }; const { body } = await snekfetch.get(avatarURL); - avatar.src = body; - generate(); + const avatar = await loadImage(body); + ctx.drawImage(avatar, 0, 0, 256, 256); + const imgData = ctx.getImageData(0, 0, 256, 256); + 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]); + data[i] = brightness; + data[i + 1] = brightness; + data[i + 2] = brightness; + } + ctx.putImageData(imgData, 0, 0); return msg.say({ files: [{ attachment: canvas.toBuffer(), name: 'greyscale.png' }] }); } catch (err) { return msg.say(`Oh no, the image generation failed: \`${err.message}\`. Try again later!`); diff --git a/commands/avatar-edit/invert.js b/commands/avatar-edit/invert.js index 539e37b6..ca736925 100644 --- a/commands/avatar-edit/invert.js +++ b/commands/avatar-edit/invert.js @@ -1,5 +1,5 @@ const Command = require('../../structures/Command'); -const Canvas = require('canvas'); +const { createCanvas, loadImage } = require('canvas'); const snekfetch = require('snekfetch'); module.exports = class InvertCommand extends Command { @@ -32,24 +32,19 @@ module.exports = class InvertCommand extends Command { size: 256 }); try { - const Image = Canvas.Image; - const canvas = new Canvas(256, 256); + const canvas = createCanvas(256, 256); const ctx = canvas.getContext('2d'); - const avatar = new Image(); - const generate = () => { - ctx.drawImage(avatar, 0, 0, 256, 256); - const imgData = ctx.getImageData(0, 0, 256, 256); - const { data } = imgData; - for (let i = 0; i < data.length; i += 4) { - data[i] = 255 - data[i]; - data[i + 1] = 255 - data[i + 1]; - data[i + 2] = 255 - data[i + 2]; - } - ctx.putImageData(imgData, 0, 0); - }; const { body } = await snekfetch.get(avatarURL); - avatar.src = body; - generate(); + const avatar = await loadImage(body); + ctx.drawImage(avatar, 0, 0, 256, 256); + const imgData = ctx.getImageData(0, 0, 256, 256); + const { data } = imgData; + for (let i = 0; i < data.length; i += 4) { + data[i] = 255 - data[i]; + data[i + 1] = 255 - data[i + 1]; + data[i + 2] = 255 - data[i + 2]; + } + ctx.putImageData(imgData, 0, 0); return msg.say({ files: [{ attachment: canvas.toBuffer(), name: 'invert.png' }] }); } catch (err) { return msg.say(`Oh no, the image generation failed: \`${err.message}\`. Try again later!`); diff --git a/commands/avatar-edit/rip.js b/commands/avatar-edit/rip.js index cc29f5d0..ce653c66 100644 --- a/commands/avatar-edit/rip.js +++ b/commands/avatar-edit/rip.js @@ -1,8 +1,6 @@ const Command = require('../../structures/Command'); -const Canvas = require('canvas'); +const { createCanvas, loadImage } = require('canvas'); const snekfetch = require('snekfetch'); -const { promisifyAll } = require('tsubaki'); -const fs = promisifyAll(require('fs')); const path = require('path'); module.exports = class RIPCommand extends Command { @@ -36,28 +34,22 @@ module.exports = class RIPCommand extends Command { size: 256 }); try { - const Image = Canvas.Image; - const canvas = new Canvas(507, 338); + const canvas = createCanvas(507, 338); const ctx = canvas.getContext('2d'); - const base = new Image(); - const avatar = new Image(); - const generate = () => { - ctx.drawImage(base, 0, 0); - ctx.drawImage(avatar, 158, 51, 200, 200); - const imgData = ctx.getImageData(158, 51, 200, 200); - 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]; - data[i] = brightness; - data[i + 1] = brightness; - data[i + 2] = brightness; - } - ctx.putImageData(imgData, 158, 51); - }; - base.src = await fs.readFileAsync(path.join(__dirname, '..', '..', 'assets', 'images', 'rip.png')); + const base = await loadImage(path.join(__dirname, '..', '..', 'assets', 'images', 'rip.png')); const { body } = await snekfetch.get(avatarURL); - avatar.src = body; - generate(); + const avatar = await loadImage(body); + ctx.drawImage(base, 0, 0); + ctx.drawImage(avatar, 158, 51, 200, 200); + const imgData = ctx.getImageData(158, 51, 200, 200); + 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]); + data[i] = brightness; + data[i + 1] = brightness; + data[i + 2] = brightness; + } + ctx.putImageData(imgData, 158, 51); return msg.say({ files: [{ attachment: canvas.toBuffer(), name: 'rip.png' }] }); } catch (err) { return msg.say(`Oh no, the image generation failed: \`${err.message}\`. Try again later!`); diff --git a/commands/avatar-edit/simba.js b/commands/avatar-edit/simba.js index ebfc8dfa..2947f258 100644 --- a/commands/avatar-edit/simba.js +++ b/commands/avatar-edit/simba.js @@ -1,8 +1,6 @@ const Command = require('../../structures/Command'); -const Canvas = require('canvas'); +const { createCanvas, loadImage } = require('canvas'); const snekfetch = require('snekfetch'); -const { promisifyAll } = require('tsubaki'); -const fs = promisifyAll(require('fs')); const path = require('path'); module.exports = class SimbaCommand extends Command { @@ -35,21 +33,15 @@ module.exports = class SimbaCommand extends Command { size: 256 }); try { - const Image = Canvas.Image; - const canvas = new Canvas(500, 281); + const canvas = createCanvas(500, 281); const ctx = canvas.getContext('2d'); - const base = new Image(); - const avatar = new Image(); - const generate = () => { - ctx.drawImage(base, 0, 0); - ctx.rotate(-24 * Math.PI / 180); - ctx.drawImage(avatar, 75, 160, 130, 150); - ctx.rotate(24 * Math.PI / 180); - }; - base.src = await fs.readFileAsync(path.join(__dirname, '..', '..', 'assets', 'images', 'simba.png')); + const base = await loadImage(path.join(__dirname, '..', '..', 'assets', 'images', 'simba.png')); const { body } = await snekfetch.get(avatarURL); - avatar.src = body; - generate(); + const avatar = await loadImage(body); + 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: 'simba.png' }] }); } catch (err) { return msg.say(`Oh no, the image generation failed: \`${err.message}\`. Try again later!`); diff --git a/commands/avatar-edit/steam-card.js b/commands/avatar-edit/steam-card.js index d9e03f48..ad73a243 100644 --- a/commands/avatar-edit/steam-card.js +++ b/commands/avatar-edit/steam-card.js @@ -1,8 +1,6 @@ const Command = require('../../structures/Command'); -const Canvas = require('canvas'); +const { createCanvas, loadImage, parseFont } = require('canvas'); const snekfetch = require('snekfetch'); -const { promisifyAll } = require('tsubaki'); -const fs = promisifyAll(require('fs')); const path = require('path'); module.exports = class SteamCardCommand extends Command { @@ -35,25 +33,18 @@ module.exports = class SteamCardCommand extends Command { size: 512 }); try { - const Image = Canvas.Image; - Canvas.registerFont(path.join(__dirname, '..', '..', 'assets', 'fonts', 'Roboto.ttf'), { family: 'Roboto' }); // eslint-disable-line max-len - Canvas.registerFont(path.join(__dirname, '..', '..', 'assets', 'fonts', 'NotoEmoji-Regular.ttf'), { family: 'Roboto' }); // eslint-disable-line max-len - const canvas = new Canvas(494, 568); + parseFont(path.join(__dirname, '..', '..', 'assets', 'fonts', 'Roboto.ttf'), { family: 'Roboto' }); + const canvas = createCanvas(494, 568); const ctx = canvas.getContext('2d'); - const base = new Image(); - const avatar = new Image(); - const generate = () => { - ctx.fillStyle = 'white'; - ctx.fillRect(0, 0, 494, 568); - ctx.drawImage(avatar, 25, 25, 450, 450); - ctx.drawImage(base, 0, 0); - ctx.font = '30px Roboto'; - ctx.fillText(user.username, 35, 48); - }; - base.src = await fs.readFileAsync(path.join(__dirname, '..', '..', 'assets', 'images', 'steam-card.png')); + const base = await loadImage(path.join(__dirname, '..', '..', 'assets', 'images', 'steam-card.png')); const { body } = await snekfetch.get(avatarURL); - avatar.src = body; - generate(); + const avatar = await loadImage(body); + ctx.fillStyle = 'white'; + ctx.fillRect(0, 0, 494, 568); + ctx.drawImage(avatar, 25, 25, 450, 450); + ctx.drawImage(base, 0, 0); + ctx.font = '30px Roboto'; + ctx.fillText(user.username, 35, 48); return msg.say({ files: [{ attachment: canvas.toBuffer(), name: 'steam-card.png' }] }); } catch (err) { return msg.say(`Oh no, the image generation failed: \`${err.message}\`. Try again later!`); diff --git a/commands/avatar-edit/triggered.js b/commands/avatar-edit/triggered.js index cd9b264b..060f6bf9 100644 --- a/commands/avatar-edit/triggered.js +++ b/commands/avatar-edit/triggered.js @@ -1,8 +1,6 @@ const Command = require('../../structures/Command'); -const Canvas = require('canvas'); +const { createCanvas, loadImage } = require('canvas'); const snekfetch = require('snekfetch'); -const { promisifyAll } = require('tsubaki'); -const fs = promisifyAll(require('fs')); const path = require('path'); module.exports = class TriggeredCommand extends Command { @@ -35,25 +33,19 @@ module.exports = class TriggeredCommand extends Command { size: 512 }); try { - const Image = Canvas.Image; - const canvas = new Canvas(320, 371); + const canvas = createCanvas(320, 371); const ctx = canvas.getContext('2d'); - const base = new Image(); - const avatar = new Image(); - const generate = () => { - ctx.fillStyle = 'white'; - ctx.fillRect(0, 0, 320, 371); - 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); - }; - base.src = await fs.readFileAsync(path.join(__dirname, '..', '..', 'assets', 'images', 'triggered.png')); + const base = await loadImage(path.join(__dirname, '..', '..', 'assets', 'images', 'triggered.png')); const { body } = await snekfetch.get(avatarURL); - avatar.src = body; - generate(); + const avatar = await loadImage(body); + ctx.fillStyle = 'white'; + ctx.fillRect(0, 0, 320, 371); + 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' }] }); } catch (err) { return msg.say(`Oh no, the image generation failed: \`${err.message}\`. Try again later!`); diff --git a/commands/avatar-edit/wanted.js b/commands/avatar-edit/wanted.js index 9554cae9..b438c3fc 100644 --- a/commands/avatar-edit/wanted.js +++ b/commands/avatar-edit/wanted.js @@ -1,8 +1,6 @@ const Command = require('../../structures/Command'); -const Canvas = require('canvas'); +const { createCanvas, loadImage } = require('canvas'); const snekfetch = require('snekfetch'); -const { promisifyAll } = require('tsubaki'); -const fs = promisifyAll(require('fs')); const path = require('path'); module.exports = class WantedCommand extends Command { @@ -35,19 +33,13 @@ module.exports = class WantedCommand extends Command { size: 512 }); try { - const Image = Canvas.Image; - const canvas = new Canvas(741, 1000); + const canvas = createCanvas(741, 1000); const ctx = canvas.getContext('2d'); - const base = new Image(); - const avatar = new Image(); - const generate = () => { - ctx.drawImage(base, 0, 0); - ctx.drawImage(avatar, 150, 360, 430, 430); - }; - base.src = await fs.readFileAsync(path.join(__dirname, '..', '..', 'assets', 'images', 'wanted.png')); + const base = await loadImage(path.join(__dirname, '..', '..', 'assets', 'images', 'wanted.png')); const { body } = await snekfetch.get(avatarURL); - avatar.src = body; - generate(); + const avatar = await loadImage(body); + ctx.drawImage(base, 0, 0); + ctx.drawImage(avatar, 150, 360, 430, 430); return msg.say({ files: [{ attachment: canvas.toBuffer(), name: 'wanted.png' }] }); } catch (err) { return msg.say(`Oh no, the image generation failed: \`${err.message}\`. Try again later!`); diff --git a/package.json b/package.json index 94472b03..ce91490e 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "xiaobot", - "version": "27.1.5", + "version": "27.1.6", "description": "Your personal server companion.", "main": "Shard.js", "scripts": {