mirror of
https://github.com/arthur-pbty/xiao.git
synced 2026-06-16 15:57:54 +02:00
Begin migrating away from stupid "Oh no, an error occurred!"
This commit is contained in:
@@ -58,61 +58,57 @@ module.exports = class EjectCommand extends Command {
|
||||
|
||||
async run(msg, { user, imposter }) {
|
||||
const avatarURL = user.displayAvatarURL({ format: 'png', size: 512 });
|
||||
try {
|
||||
const { body } = await request.get(avatarURL);
|
||||
const avatar = await loadImage(body);
|
||||
if (imposter === '') {
|
||||
const random = MersenneTwister19937.seed(user.id);
|
||||
imposter = bool()(random);
|
||||
}
|
||||
const text = `${user.username} was${imposter ? ' ' : ' not '}An Imposter.`;
|
||||
const encoder = new GIFEncoder(320, 180);
|
||||
const canvas = createCanvas(320, 180);
|
||||
const ctx = canvas.getContext('2d');
|
||||
ctx.textAlign = 'center';
|
||||
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);
|
||||
encoder.setQuality(200);
|
||||
for (let i = 0; i < frameCount; i++) {
|
||||
const frameID = `frame_${i.toString().padStart(2, '0')}.gif`;
|
||||
const frame = await loadImage(path.join(__dirname, '..', '..', 'assets', 'images', 'eject', frameID));
|
||||
ctx.drawImage(frame, 0, 0);
|
||||
if (i <= 17) {
|
||||
const x = ((320 / 15) * i) - 50;
|
||||
const y = (frame.height / 2) - 25;
|
||||
const rotation = (360 / 15) * i;
|
||||
const angle = rotation * (Math.PI / 180);
|
||||
const originX = x + 25;
|
||||
const originY = y + 25;
|
||||
ctx.translate(originX, originY);
|
||||
ctx.rotate(-angle);
|
||||
ctx.translate(-originX, -originY);
|
||||
ctx.drawImage(avatar, x, y, 50, 50);
|
||||
ctx.translate(originX, originY);
|
||||
ctx.rotate(angle);
|
||||
ctx.translate(-originX, -originY);
|
||||
}
|
||||
if (i > 17) {
|
||||
if (i <= 27) {
|
||||
const letters = Math.ceil(((text.length / 10) * (i - 17)) + 1);
|
||||
const toDraw = text.slice(0, letters + 1);
|
||||
ctx.fillText(toDraw, frame.width / 2, frame.height / 2, 300);
|
||||
} else {
|
||||
ctx.fillText(text, frame.width / 2, frame.height / 2, 300);
|
||||
}
|
||||
}
|
||||
encoder.addFrame(ctx);
|
||||
}
|
||||
encoder.finish();
|
||||
const buffer = await streamToArray(stream);
|
||||
return msg.say({ files: [{ attachment: Buffer.concat(buffer), name: 'eject.gif' }] });
|
||||
} catch (err) {
|
||||
return msg.reply(`Oh no, an error occurred: \`${err.message}\`. Try again later!`);
|
||||
const { body } = await request.get(avatarURL);
|
||||
const avatar = await loadImage(body);
|
||||
if (imposter === '') {
|
||||
const random = MersenneTwister19937.seed(user.id);
|
||||
imposter = bool()(random);
|
||||
}
|
||||
const text = `${user.username} was${imposter ? ' ' : ' not '}An Imposter.`;
|
||||
const encoder = new GIFEncoder(320, 180);
|
||||
const canvas = createCanvas(320, 180);
|
||||
const ctx = canvas.getContext('2d');
|
||||
ctx.textAlign = 'center';
|
||||
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);
|
||||
encoder.setQuality(200);
|
||||
for (let i = 0; i < frameCount; i++) {
|
||||
const frameID = `frame_${i.toString().padStart(2, '0')}.gif`;
|
||||
const frame = await loadImage(path.join(__dirname, '..', '..', 'assets', 'images', 'eject', frameID));
|
||||
ctx.drawImage(frame, 0, 0);
|
||||
if (i <= 17) {
|
||||
const x = ((320 / 15) * i) - 50;
|
||||
const y = (frame.height / 2) - 25;
|
||||
const rotation = (360 / 15) * i;
|
||||
const angle = rotation * (Math.PI / 180);
|
||||
const originX = x + 25;
|
||||
const originY = y + 25;
|
||||
ctx.translate(originX, originY);
|
||||
ctx.rotate(-angle);
|
||||
ctx.translate(-originX, -originY);
|
||||
ctx.drawImage(avatar, x, y, 50, 50);
|
||||
ctx.translate(originX, originY);
|
||||
ctx.rotate(angle);
|
||||
ctx.translate(-originX, -originY);
|
||||
}
|
||||
if (i > 17) {
|
||||
if (i <= 27) {
|
||||
const letters = Math.ceil(((text.length / 10) * (i - 17)) + 1);
|
||||
const toDraw = text.slice(0, letters + 1);
|
||||
ctx.fillText(toDraw, frame.width / 2, frame.height / 2, 300);
|
||||
} else {
|
||||
ctx.fillText(text, frame.width / 2, frame.height / 2, 300);
|
||||
}
|
||||
}
|
||||
encoder.addFrame(ctx);
|
||||
}
|
||||
encoder.finish();
|
||||
const buffer = await streamToArray(stream);
|
||||
return msg.say({ files: [{ attachment: Buffer.concat(buffer), name: 'eject.gif' }] });
|
||||
}
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user