From 3eed5c373bdfd1b60569b560a3fb32e967f77dbc Mon Sep 17 00:00:00 2001 From: Dragon Fire Date: Thu, 25 Apr 2024 00:47:30 -0400 Subject: [PATCH] Use gif-encoder-2 --- commands/edit-avatar/eject.js | 8 +++----- commands/edit-avatar/fire.js | 9 ++++----- commands/edit-avatar/matrix.js | 9 ++++----- commands/edit-avatar/triggered.js | 8 +++----- commands/edit-image/pet.js | 8 +++----- commands/edit-image/shake.js | 8 +++----- package.json | 2 +- util/Util.js | 29 ----------------------------- 8 files changed, 21 insertions(+), 60 deletions(-) diff --git a/commands/edit-avatar/eject.js b/commands/edit-avatar/eject.js index 4c6ef2e2..ed8a131a 100644 --- a/commands/edit-avatar/eject.js +++ b/commands/edit-avatar/eject.js @@ -1,11 +1,10 @@ const Command = require('../../framework/Command'); const { PermissionFlagsBits } = require('discord.js'); const { createCanvas, loadImage } = require('canvas'); -const GIFEncoder = require('gifencoder'); +const GIFEncoder = require('gif-encoder-2'); const { MersenneTwister19937, bool } = require('random-js'); const request = require('node-superfetch'); const path = require('path'); -const { streamToArray } = require('../../util/Util'); const frameCount = 52; module.exports = class EjectCommand extends Command { @@ -71,7 +70,6 @@ module.exports = class EjectCommand extends Command { ctx.textBaseline = 'middle'; ctx.fillStyle = 'white'; ctx.font = this.client.fonts.get('Noto-Regular.ttf').toCanvasString(18); - const stream = encoder.createReadStream(); encoder.start(); encoder.setRepeat(0); encoder.setDelay(100); @@ -107,7 +105,7 @@ module.exports = class EjectCommand extends Command { encoder.addFrame(ctx); } encoder.finish(); - const buffer = await streamToArray(stream); - return msg.say({ files: [{ attachment: Buffer.concat(buffer), name: 'eject.gif' }] }); + const attachment = encoder.out.getData(); + return msg.say({ files: [{ attachment, name: 'eject.gif' }] }); } }; diff --git a/commands/edit-avatar/fire.js b/commands/edit-avatar/fire.js index 718d8c97..3daaae08 100644 --- a/commands/edit-avatar/fire.js +++ b/commands/edit-avatar/fire.js @@ -1,10 +1,10 @@ const Command = require('../../framework/Command'); const { PermissionFlagsBits } = require('discord.js'); const { createCanvas, loadImage } = require('canvas'); -const GIFEncoder = require('gifencoder'); +const GIFEncoder = require('gif-encoder-2'); const request = require('node-superfetch'); const path = require('path'); -const { streamToArray, reactIfAble } = require('../../util/Util'); +const { reactIfAble } = require('../../util/Util'); const { drawImageWithTint } = require('../../util/Canvas'); const frameCount = 46; const { LOADING_EMOJI_ID, SUCCESS_EMOJI_ID } = process.env; @@ -48,7 +48,6 @@ module.exports = class FireCommand extends Command { 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(0); @@ -62,8 +61,8 @@ module.exports = class FireCommand extends Command { encoder.addFrame(ctx); } encoder.finish(); - const buffer = await streamToArray(stream); + const attachment = encoder.out.getData(); reactIfAble(msg, msg.author, SUCCESS_EMOJI_ID, '✅'); - return msg.say({ files: [{ attachment: Buffer.concat(buffer), name: 'fire.gif' }] }); + return msg.say({ files: [{ attachment, name: 'fire.gif' }] }); } }; diff --git a/commands/edit-avatar/matrix.js b/commands/edit-avatar/matrix.js index 1f05c6ab..628961bf 100644 --- a/commands/edit-avatar/matrix.js +++ b/commands/edit-avatar/matrix.js @@ -1,10 +1,10 @@ const Command = require('../../framework/Command'); const { PermissionFlagsBits } = require('discord.js'); const { createCanvas, loadImage } = require('canvas'); -const GIFEncoder = require('gifencoder'); +const GIFEncoder = require('gif-encoder-2'); const request = require('node-superfetch'); const path = require('path'); -const { streamToArray, reactIfAble } = require('../../util/Util'); +const { reactIfAble } = require('../../util/Util'); const { distort } = require('../../util/Canvas'); const { LOADING_EMOJI_ID, SUCCESS_EMOJI_ID } = process.env; const frameCount = 249; @@ -54,7 +54,6 @@ module.exports = class MatrixCommand extends Command { 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(0); @@ -72,8 +71,8 @@ module.exports = class MatrixCommand extends Command { encoder.addFrame(ctx); } encoder.finish(); - const buffer = await streamToArray(stream); + const attachment = encoder.out.getData(); reactIfAble(msg, msg.author, SUCCESS_EMOJI_ID, '✅'); - return msg.say({ files: [{ attachment: Buffer.concat(buffer), name: 'matrix.gif' }] }); + return msg.say({ files: [{ attachment, name: 'matrix.gif' }] }); } }; diff --git a/commands/edit-avatar/triggered.js b/commands/edit-avatar/triggered.js index b98e27e8..fe74c4a0 100644 --- a/commands/edit-avatar/triggered.js +++ b/commands/edit-avatar/triggered.js @@ -1,10 +1,9 @@ const Command = require('../../framework/Command'); const { PermissionFlagsBits } = require('discord.js'); const { createCanvas, loadImage } = require('canvas'); -const GIFEncoder = require('gifencoder'); +const GIFEncoder = require('gif-encoder-2'); const request = require('node-superfetch'); const path = require('path'); -const { streamToArray } = require('../../util/Util'); const { drawImageWithTint } = require('../../util/Canvas'); const coord1 = [-25, -33, -42, -14]; const coord2 = [-25, -13, -34, -10]; @@ -51,7 +50,6 @@ module.exports = class TriggeredCommand extends Command { const ctx = canvas.getContext('2d'); ctx.fillStyle = 'white'; ctx.fillRect(0, 0, base.width, base.width); - const stream = encoder.createReadStream(); encoder.start(); encoder.setRepeat(0); encoder.setDelay(50); @@ -62,7 +60,7 @@ module.exports = class TriggeredCommand extends Command { encoder.addFrame(ctx); } encoder.finish(); - const buffer = await streamToArray(stream); - return msg.say({ files: [{ attachment: Buffer.concat(buffer), name: 'triggered.gif' }] }); + const attachment = encoder.out.getData(); + return msg.say({ files: [{ attachment, name: 'triggered.gif' }] }); } }; diff --git a/commands/edit-image/pet.js b/commands/edit-image/pet.js index 1ec756a8..97fcd966 100644 --- a/commands/edit-image/pet.js +++ b/commands/edit-image/pet.js @@ -1,10 +1,9 @@ const Command = require('../../framework/Command'); const { PermissionFlagsBits } = require('discord.js'); const { createCanvas, loadImage } = require('canvas'); -const GIFEncoder = require('gifencoder'); +const GIFEncoder = require('gif-encoder-2'); const request = require('node-superfetch'); const path = require('path'); -const { streamToArray } = require('../../util/Util'); const { centerImagePart } = require('../../util/Canvas'); const frameCount = 10; @@ -36,7 +35,6 @@ module.exports = class PetCommand extends Command { const encoder = new GIFEncoder(112, 112); const canvas = createCanvas(112, 112); const ctx = canvas.getContext('2d'); - const stream = encoder.createReadStream(); encoder.start(); encoder.setRepeat(0); encoder.setDelay(20); @@ -55,7 +53,7 @@ module.exports = class PetCommand extends Command { else squish += 4; } encoder.finish(); - const buffer = await streamToArray(stream); - return msg.say({ files: [{ attachment: Buffer.concat(buffer), name: 'pet.gif' }] }); + const attachment = encoder.out.getData(); + return msg.say({ files: [{ attachment, name: 'pet.gif' }] }); } }; diff --git a/commands/edit-image/shake.js b/commands/edit-image/shake.js index 8d636af5..5c41eb9e 100644 --- a/commands/edit-image/shake.js +++ b/commands/edit-image/shake.js @@ -1,9 +1,8 @@ const Command = require('../../framework/Command'); const { PermissionFlagsBits } = require('discord.js'); const { createCanvas, loadImage } = require('canvas'); -const GIFEncoder = require('gifencoder'); +const GIFEncoder = require('gif-encoder-2'); const request = require('node-superfetch'); -const { streamToArray } = require('../../util/Util'); module.exports = class ShakeCommand extends Command { constructor(client) { @@ -42,7 +41,6 @@ module.exports = class ShakeCommand extends Command { const encoder = new GIFEncoder(512, height); const canvas = createCanvas(512, height); const ctx = canvas.getContext('2d'); - const stream = encoder.createReadStream(); encoder.start(); encoder.setRepeat(0); encoder.setDelay(20); @@ -54,8 +52,8 @@ module.exports = class ShakeCommand extends Command { encoder.addFrame(ctx); } encoder.finish(); - const buffer = await streamToArray(stream); - return msg.say({ files: [{ attachment: Buffer.concat(buffer), name: 'shake.gif' }] }); + const attachment = encoder.out.getData(); + return msg.say({ files: [{ attachment, name: 'shake.gif' }] }); } generateFrames(amount) { diff --git a/package.json b/package.json index dac9715a..4079053d 100644 --- a/package.json +++ b/package.json @@ -50,7 +50,7 @@ "emoji-regex": "^10.3.0", "fen-validator": "^2.0.1", "font-finder": "^1.1.0", - "gifencoder": "^2.0.1", + "gif-encoder-2": "^1.0.5", "gm": "^1.25.0", "html-entities": "^2.5.2", "image-to-ascii": "^3.2.0", diff --git a/util/Util.js b/util/Util.js index 01a92983..747b825c 100644 --- a/util/Util.js +++ b/util/Util.js @@ -137,35 +137,6 @@ module.exports = class Util { return a; } - static streamToArray(stream) { - if (!stream.readable) return Promise.resolve([]); - return new Promise((resolve, reject) => { - const array = []; - function onData(data) { - array.push(data); - } - function onEnd(error) { - if (error) reject(error); - else resolve(array); - cleanup(); - } - function onClose() { - resolve(array); - cleanup(); - } - function cleanup() { - stream.removeListener('data', onData); - stream.removeListener('end', onEnd); - stream.removeListener('error', onEnd); - stream.removeListener('close', onClose); - } - stream.on('data', onData); - stream.on('end', onEnd); - stream.on('error', onEnd); - stream.on('close', onClose); - }); - } - static percentColor(pct, percentColors) { let i = 1; for (i; i < percentColors.length - 1; i++) {