Use gif-encoder-2

This commit is contained in:
Dragon Fire
2024-04-25 00:47:30 -04:00
parent b7eacc98d4
commit 3eed5c373b
8 changed files with 21 additions and 60 deletions
+3 -5
View File
@@ -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' }] });
}
};
+4 -5
View File
@@ -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' }] });
}
};
+4 -5
View File
@@ -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' }] });
}
};
+3 -5
View File
@@ -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' }] });
}
};
+3 -5
View File
@@ -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' }] });
}
};
+3 -5
View File
@@ -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) {
+1 -1
View File
@@ -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",
-29
View File
@@ -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++) {