mirror of
https://github.com/arthur-pbty/xiao.git
synced 2026-06-17 21:40:51 +02:00
Use gif-encoder-2
This commit is contained in:
@@ -1,11 +1,10 @@
|
|||||||
const Command = require('../../framework/Command');
|
const Command = require('../../framework/Command');
|
||||||
const { PermissionFlagsBits } = require('discord.js');
|
const { PermissionFlagsBits } = require('discord.js');
|
||||||
const { createCanvas, loadImage } = require('canvas');
|
const { createCanvas, loadImage } = require('canvas');
|
||||||
const GIFEncoder = require('gifencoder');
|
const GIFEncoder = require('gif-encoder-2');
|
||||||
const { MersenneTwister19937, bool } = require('random-js');
|
const { MersenneTwister19937, bool } = require('random-js');
|
||||||
const request = require('node-superfetch');
|
const request = require('node-superfetch');
|
||||||
const path = require('path');
|
const path = require('path');
|
||||||
const { streamToArray } = require('../../util/Util');
|
|
||||||
const frameCount = 52;
|
const frameCount = 52;
|
||||||
|
|
||||||
module.exports = class EjectCommand extends Command {
|
module.exports = class EjectCommand extends Command {
|
||||||
@@ -71,7 +70,6 @@ module.exports = class EjectCommand extends Command {
|
|||||||
ctx.textBaseline = 'middle';
|
ctx.textBaseline = 'middle';
|
||||||
ctx.fillStyle = 'white';
|
ctx.fillStyle = 'white';
|
||||||
ctx.font = this.client.fonts.get('Noto-Regular.ttf').toCanvasString(18);
|
ctx.font = this.client.fonts.get('Noto-Regular.ttf').toCanvasString(18);
|
||||||
const stream = encoder.createReadStream();
|
|
||||||
encoder.start();
|
encoder.start();
|
||||||
encoder.setRepeat(0);
|
encoder.setRepeat(0);
|
||||||
encoder.setDelay(100);
|
encoder.setDelay(100);
|
||||||
@@ -107,7 +105,7 @@ module.exports = class EjectCommand extends Command {
|
|||||||
encoder.addFrame(ctx);
|
encoder.addFrame(ctx);
|
||||||
}
|
}
|
||||||
encoder.finish();
|
encoder.finish();
|
||||||
const buffer = await streamToArray(stream);
|
const attachment = encoder.out.getData();
|
||||||
return msg.say({ files: [{ attachment: Buffer.concat(buffer), name: 'eject.gif' }] });
|
return msg.say({ files: [{ attachment, name: 'eject.gif' }] });
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -1,10 +1,10 @@
|
|||||||
const Command = require('../../framework/Command');
|
const Command = require('../../framework/Command');
|
||||||
const { PermissionFlagsBits } = require('discord.js');
|
const { PermissionFlagsBits } = require('discord.js');
|
||||||
const { createCanvas, loadImage } = require('canvas');
|
const { createCanvas, loadImage } = require('canvas');
|
||||||
const GIFEncoder = require('gifencoder');
|
const GIFEncoder = require('gif-encoder-2');
|
||||||
const request = require('node-superfetch');
|
const request = require('node-superfetch');
|
||||||
const path = require('path');
|
const path = require('path');
|
||||||
const { streamToArray, reactIfAble } = require('../../util/Util');
|
const { reactIfAble } = require('../../util/Util');
|
||||||
const { drawImageWithTint } = require('../../util/Canvas');
|
const { drawImageWithTint } = require('../../util/Canvas');
|
||||||
const frameCount = 46;
|
const frameCount = 46;
|
||||||
const { LOADING_EMOJI_ID, SUCCESS_EMOJI_ID } = process.env;
|
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 encoder = new GIFEncoder(avatar.width, avatar.height);
|
||||||
const canvas = createCanvas(avatar.width, avatar.height);
|
const canvas = createCanvas(avatar.width, avatar.height);
|
||||||
const ctx = canvas.getContext('2d');
|
const ctx = canvas.getContext('2d');
|
||||||
const stream = encoder.createReadStream();
|
|
||||||
encoder.start();
|
encoder.start();
|
||||||
encoder.setRepeat(0);
|
encoder.setRepeat(0);
|
||||||
encoder.setDelay(0);
|
encoder.setDelay(0);
|
||||||
@@ -62,8 +61,8 @@ module.exports = class FireCommand extends Command {
|
|||||||
encoder.addFrame(ctx);
|
encoder.addFrame(ctx);
|
||||||
}
|
}
|
||||||
encoder.finish();
|
encoder.finish();
|
||||||
const buffer = await streamToArray(stream);
|
const attachment = encoder.out.getData();
|
||||||
reactIfAble(msg, msg.author, SUCCESS_EMOJI_ID, '✅');
|
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' }] });
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -1,10 +1,10 @@
|
|||||||
const Command = require('../../framework/Command');
|
const Command = require('../../framework/Command');
|
||||||
const { PermissionFlagsBits } = require('discord.js');
|
const { PermissionFlagsBits } = require('discord.js');
|
||||||
const { createCanvas, loadImage } = require('canvas');
|
const { createCanvas, loadImage } = require('canvas');
|
||||||
const GIFEncoder = require('gifencoder');
|
const GIFEncoder = require('gif-encoder-2');
|
||||||
const request = require('node-superfetch');
|
const request = require('node-superfetch');
|
||||||
const path = require('path');
|
const path = require('path');
|
||||||
const { streamToArray, reactIfAble } = require('../../util/Util');
|
const { reactIfAble } = require('../../util/Util');
|
||||||
const { distort } = require('../../util/Canvas');
|
const { distort } = require('../../util/Canvas');
|
||||||
const { LOADING_EMOJI_ID, SUCCESS_EMOJI_ID } = process.env;
|
const { LOADING_EMOJI_ID, SUCCESS_EMOJI_ID } = process.env;
|
||||||
const frameCount = 249;
|
const frameCount = 249;
|
||||||
@@ -54,7 +54,6 @@ module.exports = class MatrixCommand extends Command {
|
|||||||
const encoder = new GIFEncoder(avatar.width, avatar.height);
|
const encoder = new GIFEncoder(avatar.width, avatar.height);
|
||||||
const canvas = createCanvas(avatar.width, avatar.height);
|
const canvas = createCanvas(avatar.width, avatar.height);
|
||||||
const ctx = canvas.getContext('2d');
|
const ctx = canvas.getContext('2d');
|
||||||
const stream = encoder.createReadStream();
|
|
||||||
encoder.start();
|
encoder.start();
|
||||||
encoder.setRepeat(0);
|
encoder.setRepeat(0);
|
||||||
encoder.setDelay(0);
|
encoder.setDelay(0);
|
||||||
@@ -72,8 +71,8 @@ module.exports = class MatrixCommand extends Command {
|
|||||||
encoder.addFrame(ctx);
|
encoder.addFrame(ctx);
|
||||||
}
|
}
|
||||||
encoder.finish();
|
encoder.finish();
|
||||||
const buffer = await streamToArray(stream);
|
const attachment = encoder.out.getData();
|
||||||
reactIfAble(msg, msg.author, SUCCESS_EMOJI_ID, '✅');
|
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' }] });
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -1,10 +1,9 @@
|
|||||||
const Command = require('../../framework/Command');
|
const Command = require('../../framework/Command');
|
||||||
const { PermissionFlagsBits } = require('discord.js');
|
const { PermissionFlagsBits } = require('discord.js');
|
||||||
const { createCanvas, loadImage } = require('canvas');
|
const { createCanvas, loadImage } = require('canvas');
|
||||||
const GIFEncoder = require('gifencoder');
|
const GIFEncoder = require('gif-encoder-2');
|
||||||
const request = require('node-superfetch');
|
const request = require('node-superfetch');
|
||||||
const path = require('path');
|
const path = require('path');
|
||||||
const { streamToArray } = require('../../util/Util');
|
|
||||||
const { drawImageWithTint } = require('../../util/Canvas');
|
const { drawImageWithTint } = require('../../util/Canvas');
|
||||||
const coord1 = [-25, -33, -42, -14];
|
const coord1 = [-25, -33, -42, -14];
|
||||||
const coord2 = [-25, -13, -34, -10];
|
const coord2 = [-25, -13, -34, -10];
|
||||||
@@ -51,7 +50,6 @@ module.exports = class TriggeredCommand extends Command {
|
|||||||
const ctx = canvas.getContext('2d');
|
const ctx = canvas.getContext('2d');
|
||||||
ctx.fillStyle = 'white';
|
ctx.fillStyle = 'white';
|
||||||
ctx.fillRect(0, 0, base.width, base.width);
|
ctx.fillRect(0, 0, base.width, base.width);
|
||||||
const stream = encoder.createReadStream();
|
|
||||||
encoder.start();
|
encoder.start();
|
||||||
encoder.setRepeat(0);
|
encoder.setRepeat(0);
|
||||||
encoder.setDelay(50);
|
encoder.setDelay(50);
|
||||||
@@ -62,7 +60,7 @@ module.exports = class TriggeredCommand extends Command {
|
|||||||
encoder.addFrame(ctx);
|
encoder.addFrame(ctx);
|
||||||
}
|
}
|
||||||
encoder.finish();
|
encoder.finish();
|
||||||
const buffer = await streamToArray(stream);
|
const attachment = encoder.out.getData();
|
||||||
return msg.say({ files: [{ attachment: Buffer.concat(buffer), name: 'triggered.gif' }] });
|
return msg.say({ files: [{ attachment, name: 'triggered.gif' }] });
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -1,10 +1,9 @@
|
|||||||
const Command = require('../../framework/Command');
|
const Command = require('../../framework/Command');
|
||||||
const { PermissionFlagsBits } = require('discord.js');
|
const { PermissionFlagsBits } = require('discord.js');
|
||||||
const { createCanvas, loadImage } = require('canvas');
|
const { createCanvas, loadImage } = require('canvas');
|
||||||
const GIFEncoder = require('gifencoder');
|
const GIFEncoder = require('gif-encoder-2');
|
||||||
const request = require('node-superfetch');
|
const request = require('node-superfetch');
|
||||||
const path = require('path');
|
const path = require('path');
|
||||||
const { streamToArray } = require('../../util/Util');
|
|
||||||
const { centerImagePart } = require('../../util/Canvas');
|
const { centerImagePart } = require('../../util/Canvas');
|
||||||
const frameCount = 10;
|
const frameCount = 10;
|
||||||
|
|
||||||
@@ -36,7 +35,6 @@ module.exports = class PetCommand extends Command {
|
|||||||
const encoder = new GIFEncoder(112, 112);
|
const encoder = new GIFEncoder(112, 112);
|
||||||
const canvas = createCanvas(112, 112);
|
const canvas = createCanvas(112, 112);
|
||||||
const ctx = canvas.getContext('2d');
|
const ctx = canvas.getContext('2d');
|
||||||
const stream = encoder.createReadStream();
|
|
||||||
encoder.start();
|
encoder.start();
|
||||||
encoder.setRepeat(0);
|
encoder.setRepeat(0);
|
||||||
encoder.setDelay(20);
|
encoder.setDelay(20);
|
||||||
@@ -55,7 +53,7 @@ module.exports = class PetCommand extends Command {
|
|||||||
else squish += 4;
|
else squish += 4;
|
||||||
}
|
}
|
||||||
encoder.finish();
|
encoder.finish();
|
||||||
const buffer = await streamToArray(stream);
|
const attachment = encoder.out.getData();
|
||||||
return msg.say({ files: [{ attachment: Buffer.concat(buffer), name: 'pet.gif' }] });
|
return msg.say({ files: [{ attachment, name: 'pet.gif' }] });
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -1,9 +1,8 @@
|
|||||||
const Command = require('../../framework/Command');
|
const Command = require('../../framework/Command');
|
||||||
const { PermissionFlagsBits } = require('discord.js');
|
const { PermissionFlagsBits } = require('discord.js');
|
||||||
const { createCanvas, loadImage } = require('canvas');
|
const { createCanvas, loadImage } = require('canvas');
|
||||||
const GIFEncoder = require('gifencoder');
|
const GIFEncoder = require('gif-encoder-2');
|
||||||
const request = require('node-superfetch');
|
const request = require('node-superfetch');
|
||||||
const { streamToArray } = require('../../util/Util');
|
|
||||||
|
|
||||||
module.exports = class ShakeCommand extends Command {
|
module.exports = class ShakeCommand extends Command {
|
||||||
constructor(client) {
|
constructor(client) {
|
||||||
@@ -42,7 +41,6 @@ module.exports = class ShakeCommand extends Command {
|
|||||||
const encoder = new GIFEncoder(512, height);
|
const encoder = new GIFEncoder(512, height);
|
||||||
const canvas = createCanvas(512, height);
|
const canvas = createCanvas(512, height);
|
||||||
const ctx = canvas.getContext('2d');
|
const ctx = canvas.getContext('2d');
|
||||||
const stream = encoder.createReadStream();
|
|
||||||
encoder.start();
|
encoder.start();
|
||||||
encoder.setRepeat(0);
|
encoder.setRepeat(0);
|
||||||
encoder.setDelay(20);
|
encoder.setDelay(20);
|
||||||
@@ -54,8 +52,8 @@ module.exports = class ShakeCommand extends Command {
|
|||||||
encoder.addFrame(ctx);
|
encoder.addFrame(ctx);
|
||||||
}
|
}
|
||||||
encoder.finish();
|
encoder.finish();
|
||||||
const buffer = await streamToArray(stream);
|
const attachment = encoder.out.getData();
|
||||||
return msg.say({ files: [{ attachment: Buffer.concat(buffer), name: 'shake.gif' }] });
|
return msg.say({ files: [{ attachment, name: 'shake.gif' }] });
|
||||||
}
|
}
|
||||||
|
|
||||||
generateFrames(amount) {
|
generateFrames(amount) {
|
||||||
|
|||||||
+1
-1
@@ -50,7 +50,7 @@
|
|||||||
"emoji-regex": "^10.3.0",
|
"emoji-regex": "^10.3.0",
|
||||||
"fen-validator": "^2.0.1",
|
"fen-validator": "^2.0.1",
|
||||||
"font-finder": "^1.1.0",
|
"font-finder": "^1.1.0",
|
||||||
"gifencoder": "^2.0.1",
|
"gif-encoder-2": "^1.0.5",
|
||||||
"gm": "^1.25.0",
|
"gm": "^1.25.0",
|
||||||
"html-entities": "^2.5.2",
|
"html-entities": "^2.5.2",
|
||||||
"image-to-ascii": "^3.2.0",
|
"image-to-ascii": "^3.2.0",
|
||||||
|
|||||||
@@ -137,35 +137,6 @@ module.exports = class Util {
|
|||||||
return a;
|
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) {
|
static percentColor(pct, percentColors) {
|
||||||
let i = 1;
|
let i = 1;
|
||||||
for (i; i < percentColors.length - 1; i++) {
|
for (i; i < percentColors.length - 1; i++) {
|
||||||
|
|||||||
Reference in New Issue
Block a user