Begin migrating away from stupid "Oh no, an error occurred!"

This commit is contained in:
Dragon Fire
2024-03-29 23:57:49 -04:00
parent 067545b818
commit 0b807767d1
130 changed files with 1692 additions and 2190 deletions
+10 -14
View File
@@ -34,19 +34,15 @@ module.exports = class AvatarFusionCommand extends Command {
async run(msg, { overlay, base }) {
const baseAvatarURL = base.displayAvatarURL({ format: 'png', size: 512 });
const overlayAvatarURL = overlay.displayAvatarURL({ format: 'png', size: 512 });
try {
const baseAvatarData = await request.get(baseAvatarURL);
const baseAvatar = await loadImage(baseAvatarData.body);
const overlayAvatarData = await request.get(overlayAvatarURL);
const overlayAvatar = await loadImage(overlayAvatarData.body);
const canvas = createCanvas(baseAvatar.width, baseAvatar.height);
const ctx = canvas.getContext('2d');
ctx.globalAlpha = 0.5;
ctx.drawImage(baseAvatar, 0, 0);
ctx.drawImage(overlayAvatar, 0, 0, baseAvatar.width, baseAvatar.height);
return msg.say({ files: [{ attachment: canvas.toBuffer(), name: 'avatar-fusion.png' }] });
} catch (err) {
return msg.reply(`Oh no, an error occurred: \`${err.message}\`. Try again later!`);
}
const baseAvatarData = await request.get(baseAvatarURL);
const baseAvatar = await loadImage(baseAvatarData.body);
const overlayAvatarData = await request.get(overlayAvatarURL);
const overlayAvatar = await loadImage(overlayAvatarData.body);
const canvas = createCanvas(baseAvatar.width, baseAvatar.height);
const ctx = canvas.getContext('2d');
ctx.globalAlpha = 0.5;
ctx.drawImage(baseAvatar, 0, 0);
ctx.drawImage(overlayAvatar, 0, 0, baseAvatar.width, baseAvatar.height);
return msg.say({ files: [{ attachment: canvas.toBuffer(), name: 'avatar-fusion.png' }] });
}
};
+51 -55
View File
@@ -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' }] });
}
};
+20 -24
View File
@@ -41,30 +41,26 @@ module.exports = class FireCommand extends Command {
async run(msg, { user }) {
const avatarURL = user.displayAvatarURL({ format: 'png', size: 512 });
try {
const { body } = await request.get(avatarURL);
const avatar = await loadImage(body);
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);
encoder.setQuality(200);
for (let i = 0; i < frameCount; i++) {
const frame = await loadImage(path.join(__dirname, '..', '..', 'assets', 'images', 'fire', `frame-${i}.gif`));
const ratio = frame.width / frame.height;
const height = Math.round(avatar.width / ratio);
drawImageWithTint(ctx, avatar, '#fc671e', 0, 0, avatar.width, avatar.height);
ctx.drawImage(frame, 0, avatar.height - height, avatar.width, height);
encoder.addFrame(ctx);
}
encoder.finish();
const buffer = await streamToArray(stream);
return msg.say({ files: [{ attachment: Buffer.concat(buffer), name: 'fire.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);
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);
encoder.setQuality(200);
for (let i = 0; i < frameCount; i++) {
const frame = await loadImage(path.join(__dirname, '..', '..', 'assets', 'images', 'fire', `frame-${i}.gif`));
const ratio = frame.width / frame.height;
const height = Math.round(avatar.width / ratio);
drawImageWithTint(ctx, avatar, '#fc671e', 0, 0, avatar.width, avatar.height);
ctx.drawImage(frame, 0, avatar.height - height, avatar.width, height);
encoder.addFrame(ctx);
}
encoder.finish();
const buffer = await streamToArray(stream);
return msg.say({ files: [{ attachment: Buffer.concat(buffer), name: 'fire.gif' }] });
}
};
+8 -12
View File
@@ -142,17 +142,13 @@ module.exports = class HatCommand extends Command {
async run(msg, { type, user }) {
const avatarURL = user.displayAvatarURL({ format: 'png', size: 512 });
try {
const base = await loadImage(path.join(__dirname, '..', '..', 'assets', 'images', 'hat', `${type}.png`));
const { body } = await request.get(avatarURL);
const avatar = await loadImage(body);
const canvas = createCanvas(avatar.width, avatar.height);
const ctx = canvas.getContext('2d');
ctx.drawImage(avatar, 0, 0);
ctx.drawImage(base, 0, 0, avatar.width, avatar.height);
return msg.say({ files: [{ attachment: canvas.toBuffer(), name: `${type}-hat.png` }] });
} catch (err) {
return msg.reply(`Oh no, an error occurred: \`${err.message}\`. Try again later!`);
}
const base = await loadImage(path.join(__dirname, '..', '..', 'assets', 'images', 'hat', `${type}.png`));
const { body } = await request.get(avatarURL);
const avatar = await loadImage(body);
const canvas = createCanvas(avatar.width, avatar.height);
const ctx = canvas.getContext('2d');
ctx.drawImage(avatar, 0, 0);
ctx.drawImage(base, 0, 0, avatar.width, avatar.height);
return msg.say({ files: [{ attachment: canvas.toBuffer(), name: `${type}-hat.png` }] });
}
};
+10 -14
View File
@@ -38,19 +38,15 @@ module.exports = class HeLivesInYouCommand extends Command {
async run(msg, { user }) {
const avatarURL = user.displayAvatarURL({ format: 'png', size: 256 });
try {
const base = await loadImage(path.join(__dirname, '..', '..', 'assets', 'images', 'he-lives-in-you.png'));
const { body } = await request.get(avatarURL);
const avatar = await loadImage(body);
const canvas = createCanvas(base.width, base.height);
const ctx = canvas.getContext('2d');
ctx.drawImage(base, 0, 0);
ctx.rotate(-24 * (Math.PI / 180));
drawImageWithTint(ctx, avatar, '#00115d', 75, 160, 130, 150);
ctx.rotate(24 * (Math.PI / 180));
return msg.say({ files: [{ attachment: canvas.toBuffer(), name: 'he-lives-in-you.png' }] });
} catch (err) {
return msg.reply(`Oh no, an error occurred: \`${err.message}\`. Try again later!`);
}
const base = await loadImage(path.join(__dirname, '..', '..', 'assets', 'images', 'he-lives-in-you.png'));
const { body } = await request.get(avatarURL);
const avatar = await loadImage(body);
const canvas = createCanvas(base.width, base.height);
const ctx = canvas.getContext('2d');
ctx.drawImage(base, 0, 0);
ctx.rotate(-24 * (Math.PI / 180));
drawImageWithTint(ctx, avatar, '#00115d', 75, 160, 130, 150);
ctx.rotate(24 * (Math.PI / 180));
return msg.say({ files: [{ attachment: canvas.toBuffer(), name: 'he-lives-in-you.png' }] });
}
};
+8 -12
View File
@@ -38,17 +38,13 @@ module.exports = class HeartsCommand extends Command {
async run(msg, { user }) {
const avatarURL = user.displayAvatarURL({ format: 'png', size: 512 });
try {
const base = await loadImage(path.join(__dirname, '..', '..', 'assets', 'images', 'hearts.png'));
const { body } = await request.get(avatarURL);
const avatar = await loadImage(body);
const canvas = createCanvas(avatar.width, avatar.height);
const ctx = canvas.getContext('2d');
drawImageWithTint(ctx, avatar, 'deeppink', 0, 0, avatar.width, avatar.height);
ctx.drawImage(base, 0, 0, avatar.width, avatar.height);
return msg.say({ files: [{ attachment: canvas.toBuffer(), name: 'hearts.png' }] });
} catch (err) {
return msg.reply(`Oh no, an error occurred: \`${err.message}\`. Try again later!`);
}
const base = await loadImage(path.join(__dirname, '..', '..', 'assets', 'images', 'hearts.png'));
const { body } = await request.get(avatarURL);
const avatar = await loadImage(body);
const canvas = createCanvas(avatar.width, avatar.height);
const ctx = canvas.getContext('2d');
drawImageWithTint(ctx, avatar, 'deeppink', 0, 0, avatar.width, avatar.height);
ctx.drawImage(base, 0, 0, avatar.width, avatar.height);
return msg.say({ files: [{ attachment: canvas.toBuffer(), name: 'hearts.png' }] });
}
};
+10 -14
View File
@@ -36,19 +36,15 @@ module.exports = class IHaveThePowerCommand extends Command {
async run(msg, { user }) {
const avatarURL = user.displayAvatarURL({ format: 'png', size: 256 });
try {
const base = await loadImage(path.join(__dirname, '..', '..', 'assets', 'images', 'i-have-the-power.png'));
const { body } = await request.get(avatarURL);
const avatar = await loadImage(body);
const canvas = createCanvas(base.width, base.height);
const ctx = canvas.getContext('2d');
ctx.drawImage(base, 0, 0);
ctx.rotate(18.3 * (Math.PI / 180));
ctx.drawImage(avatar, 332, -125, 175, 175);
ctx.rotate(-18.3 * (Math.PI / 180));
return msg.say({ files: [{ attachment: canvas.toBuffer(), name: 'i-have-the-power.png' }] });
} catch (err) {
return msg.reply(`Oh no, an error occurred: \`${err.message}\`. Try again later!`);
}
const base = await loadImage(path.join(__dirname, '..', '..', 'assets', 'images', 'i-have-the-power.png'));
const { body } = await request.get(avatarURL);
const avatar = await loadImage(body);
const canvas = createCanvas(base.width, base.height);
const ctx = canvas.getContext('2d');
ctx.drawImage(base, 0, 0);
ctx.rotate(18.3 * (Math.PI / 180));
ctx.drawImage(avatar, 332, -125, 175, 175);
ctx.rotate(-18.3 * (Math.PI / 180));
return msg.say({ files: [{ attachment: canvas.toBuffer(), name: 'i-have-the-power.png' }] });
}
};
+18 -22
View File
@@ -51,27 +51,23 @@ module.exports = class RipCommand extends Command {
async run(msg, { user, cause }) {
const avatarURL = user.displayAvatarURL({ format: 'png', size: 512 });
try {
const base = await loadImage(path.join(__dirname, '..', '..', 'assets', 'images', 'rip.png'));
const { body } = await request.get(avatarURL);
const avatar = await loadImage(body);
const canvas = createCanvas(base.width, base.height);
const ctx = canvas.getContext('2d');
ctx.drawImage(base, 0, 0);
ctx.drawImage(avatar, 194, 399, 500, 500);
greyscale(ctx, 194, 399, 500, 500);
ctx.textBaseline = 'top';
ctx.textAlign = 'center';
ctx.font = this.client.fonts.get('CoffinStone.otf').toCanvasString(62);
ctx.fillStyle = 'black';
ctx.fillText(user.username, 438, 330, 500);
ctx.fillStyle = 'white';
if (cause) ctx.fillText(cause, 438, 910, 500);
ctx.font = this.client.fonts.get('CoffinStone.otf').toCanvasString(37);
ctx.fillText('In Loving Memory of', 438, 292);
return msg.say({ files: [{ attachment: canvas.toBuffer(), name: 'rip.png' }] });
} catch (err) {
return msg.reply(`Oh no, an error occurred: \`${err.message}\`. Try again later!`);
}
const base = await loadImage(path.join(__dirname, '..', '..', 'assets', 'images', 'rip.png'));
const { body } = await request.get(avatarURL);
const avatar = await loadImage(body);
const canvas = createCanvas(base.width, base.height);
const ctx = canvas.getContext('2d');
ctx.drawImage(base, 0, 0);
ctx.drawImage(avatar, 194, 399, 500, 500);
greyscale(ctx, 194, 399, 500, 500);
ctx.textBaseline = 'top';
ctx.textAlign = 'center';
ctx.font = this.client.fonts.get('CoffinStone.otf').toCanvasString(62);
ctx.fillStyle = 'black';
ctx.fillText(user.username, 438, 330, 500);
ctx.fillStyle = 'white';
if (cause) ctx.fillText(cause, 438, 910, 500);
ctx.font = this.client.fonts.get('CoffinStone.otf').toCanvasString(37);
ctx.fillText('In Loving Memory of', 438, 292);
return msg.say({ files: [{ attachment: canvas.toBuffer(), name: 'rip.png' }] });
}
};
+12 -16
View File
@@ -48,21 +48,17 @@ module.exports = class SteamNowPlayingCommand extends Command {
async run(msg, { game, user }) {
const avatarURL = user.displayAvatarURL({ format: 'png', size: 64 });
try {
const base = await loadImage(path.join(__dirname, '..', '..', 'assets', 'images', 'steam-now-playing.png'));
const { body } = await request.get(avatarURL);
const avatar = await loadImage(body);
const canvas = createCanvas(base.width, base.height);
const ctx = canvas.getContext('2d');
ctx.drawImage(base, 0, 0);
ctx.drawImage(avatar, 26, 26, 41, 42);
ctx.fillStyle = '#90b93c';
ctx.font = this.client.fonts.get('Noto-Regular.ttf').toCanvasString(14);
ctx.fillText(user.username, 80, 34);
ctx.fillText(shortenText(ctx, game, 200), 80, 70);
return msg.say({ files: [{ attachment: canvas.toBuffer(), name: 'steam-now-playing.png' }] });
} catch (err) {
return msg.reply(`Oh no, an error occurred: \`${err.message}\`. Try again later!`);
}
const base = await loadImage(path.join(__dirname, '..', '..', 'assets', 'images', 'steam-now-playing.png'));
const { body } = await request.get(avatarURL);
const avatar = await loadImage(body);
const canvas = createCanvas(base.width, base.height);
const ctx = canvas.getContext('2d');
ctx.drawImage(base, 0, 0);
ctx.drawImage(avatar, 26, 26, 41, 42);
ctx.fillStyle = '#90b93c';
ctx.font = this.client.fonts.get('Noto-Regular.ttf').toCanvasString(14);
ctx.fillText(user.username, 80, 34);
ctx.fillText(shortenText(ctx, game, 200), 80, 70);
return msg.say({ files: [{ attachment: canvas.toBuffer(), name: 'steam-now-playing.png' }] });
}
};
+20 -24
View File
@@ -43,30 +43,26 @@ module.exports = class TriggeredCommand extends Command {
async run(msg, { user }) {
const avatarURL = user.displayAvatarURL({ format: 'png', size: 512 });
try {
const base = await loadImage(path.join(__dirname, '..', '..', 'assets', 'images', 'triggered.png'));
const { body } = await request.get(avatarURL);
const avatar = await loadImage(body);
const encoder = new GIFEncoder(base.width, base.width);
const canvas = createCanvas(base.width, base.width);
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);
encoder.setQuality(200);
for (let i = 0; i < 4; i++) {
drawImageWithTint(ctx, avatar, 'red', coord1[i], coord2[i], 300, 300);
ctx.drawImage(base, 0, 218, 256, 38);
encoder.addFrame(ctx);
}
encoder.finish();
const buffer = await streamToArray(stream);
return msg.say({ files: [{ attachment: Buffer.concat(buffer), name: 'triggered.gif' }] });
} catch (err) {
return msg.reply(`Oh no, an error occurred: \`${err.message}\`. Try again later!`);
const base = await loadImage(path.join(__dirname, '..', '..', 'assets', 'images', 'triggered.png'));
const { body } = await request.get(avatarURL);
const avatar = await loadImage(body);
const encoder = new GIFEncoder(base.width, base.width);
const canvas = createCanvas(base.width, base.width);
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);
encoder.setQuality(200);
for (let i = 0; i < 4; i++) {
drawImageWithTint(ctx, avatar, 'red', coord1[i], coord2[i], 300, 300);
ctx.drawImage(base, 0, 218, 256, 38);
encoder.addFrame(ctx);
}
encoder.finish();
const buffer = await streamToArray(stream);
return msg.say({ files: [{ attachment: Buffer.concat(buffer), name: 'triggered.gif' }] });
}
};