225 lines
5.5 KiB
JavaScript
225 lines
5.5 KiB
JavaScript
const Command = require("../lib/command.js");
|
|
const CATEGORY = "image";
|
|
|
|
const {getImage} = require("../lib/utils.js");
|
|
|
|
const dumpyConvert = require("dumpy").convert;
|
|
const Jimp = require("jimp");
|
|
|
|
async function createImageCallback(msg, url, callback, filename) {
|
|
msg.channel.sendTyping();
|
|
|
|
let img;
|
|
try {
|
|
img = await getImage(msg, url);
|
|
} catch (e) {
|
|
if (e == "Image not found in last 20 messages.") {
|
|
return "Image not found. Please give URL, attachment, user mention or custom emoji.";
|
|
} else {
|
|
return ":warning: An internal error occurred.";
|
|
}
|
|
}
|
|
|
|
const out = await callback(img);
|
|
|
|
if (out) {
|
|
return {file: {file: out, name: filename}};
|
|
} else {
|
|
return ":warning: Nothing was returned.";
|
|
}
|
|
}
|
|
|
|
const dumpy = new Command("dumpy");
|
|
dumpy.category = CATEGORY;
|
|
dumpy.helpText = "Among Us Dumpy GIF Creator";
|
|
dumpy.usage = "<width> [url]";
|
|
dumpy.callback = async function (msg, line, [width, url]) {
|
|
if (isNaN(parseInt(width))) url = width;
|
|
width = Math.min(Math.max(isNaN(parseInt(width)) ? 10 : width, 2), 48);
|
|
|
|
return await createImageCallback(
|
|
msg,
|
|
url,
|
|
async (img) => await dumpyConvert(img, width),
|
|
"dumpy.gif"
|
|
);
|
|
};
|
|
hf.registerCommand(dumpy);
|
|
|
|
const hooh = new Command("hooh");
|
|
hooh.category = CATEGORY;
|
|
hooh.helpText = "Mirror bottom to top";
|
|
hooh.usage = "[url]";
|
|
hooh.callback = async function (msg, line) {
|
|
return await createImageCallback(
|
|
msg,
|
|
line,
|
|
async (url) => {
|
|
const img = await Jimp.read(url);
|
|
const half1 = img
|
|
.clone()
|
|
.crop(
|
|
0,
|
|
img.bitmap.height / 2,
|
|
img.bitmap.width,
|
|
img.bitmap.height / 2
|
|
);
|
|
const half2 = half1.clone().mirror(false, true);
|
|
|
|
return await img
|
|
.composite(half1, 0, img.bitmap.height / 2)
|
|
.composite(half2, 0, 0)
|
|
.getBufferAsync(Jimp.MIME_PNG);
|
|
},
|
|
"hooh.png"
|
|
);
|
|
};
|
|
hf.registerCommand(hooh);
|
|
|
|
const woow = new Command("woow");
|
|
woow.category = CATEGORY;
|
|
woow.helpText = "Mirror top to bottom";
|
|
woow.usage = "[url]";
|
|
woow.callback = async function (msg, line) {
|
|
return await createImageCallback(
|
|
msg,
|
|
line,
|
|
async (url) => {
|
|
const img = await Jimp.read(url);
|
|
const half1 = img
|
|
.clone()
|
|
.crop(0, 0, img.bitmap.width, img.bitmap.height / 2);
|
|
const half2 = half1.clone().mirror(false, true);
|
|
|
|
return await img
|
|
.composite(half1, 0, 0)
|
|
.composite(half2, 0, img.bitmap.height / 2)
|
|
.getBufferAsync(Jimp.MIME_PNG);
|
|
},
|
|
"woow.png"
|
|
);
|
|
};
|
|
hf.registerCommand(woow);
|
|
|
|
const haah = new Command("haah");
|
|
haah.category = CATEGORY;
|
|
haah.helpText = "Mirror left to right";
|
|
haah.usage = "[url]";
|
|
haah.callback = async function (msg, line) {
|
|
return await createImageCallback(
|
|
msg,
|
|
line,
|
|
async (url) => {
|
|
const img = await Jimp.read(url);
|
|
const half1 = img
|
|
.clone()
|
|
.crop(0, 0, img.bitmap.width / 2, img.bitmap.height);
|
|
const half2 = half1.clone().mirror(true, false);
|
|
|
|
return await img
|
|
.composite(half1, 0, 0)
|
|
.composite(half2, img.bitmap.width / 2, 0)
|
|
.getBufferAsync(Jimp.MIME_PNG);
|
|
},
|
|
"haah.png"
|
|
);
|
|
};
|
|
hf.registerCommand(haah);
|
|
|
|
const waaw = new Command("waaw");
|
|
waaw.category = CATEGORY;
|
|
waaw.helpText = "Mirror right to left";
|
|
waaw.usage = "[url]";
|
|
waaw.callback = async function (msg, line) {
|
|
return await createImageCallback(
|
|
msg,
|
|
line,
|
|
async (url) => {
|
|
const img = await Jimp.read(url);
|
|
const half1 = img
|
|
.clone()
|
|
.crop(img.bitmap.width / 2, 0, img.bitmap.width / 2, img.bitmap.height);
|
|
const half2 = half1.clone().mirror(true, false);
|
|
|
|
return await img
|
|
.composite(half1, img.bitmap.width / 2, 0)
|
|
.composite(half2, 0, 0)
|
|
.getBufferAsync(Jimp.MIME_PNG);
|
|
},
|
|
"waaw.png"
|
|
);
|
|
};
|
|
hf.registerCommand(waaw);
|
|
|
|
const invert = new Command("invert");
|
|
invert.category = CATEGORY;
|
|
invert.helpText = "Invert an image";
|
|
invert.usage = "[url]";
|
|
invert.callback = async function (msg, line) {
|
|
return await createImageCallback(
|
|
msg,
|
|
line,
|
|
async (img) => {
|
|
return await Jimp.read(img).then((x) =>
|
|
x.invert().getBufferAsync(Jimp.MIME_PNG)
|
|
);
|
|
},
|
|
"invert.png"
|
|
);
|
|
};
|
|
hf.registerCommand(invert);
|
|
|
|
const flip = new Command("flip");
|
|
flip.category = CATEGORY;
|
|
flip.helpText = "Flip an image horizontally";
|
|
flip.usage = "[url]";
|
|
flip.callback = async function (msg, line) {
|
|
return await createImageCallback(
|
|
msg,
|
|
line,
|
|
async (img) => {
|
|
return await Jimp.read(img).then((x) =>
|
|
x.mirror(true, false).getBufferAsync(Jimp.MIME_PNG)
|
|
);
|
|
},
|
|
"flip.png"
|
|
);
|
|
};
|
|
hf.registerCommand(flip);
|
|
|
|
const flop = new Command("flop");
|
|
flop.category = CATEGORY;
|
|
flop.helpText = "Flip an image vertically";
|
|
flop.usage = "[url]";
|
|
flop.callback = async function (msg, line) {
|
|
return await createImageCallback(
|
|
msg,
|
|
line,
|
|
async (img) => {
|
|
return await Jimp.read(img).then((x) =>
|
|
x.mirror(false, true).getBufferAsync(Jimp.MIME_PNG)
|
|
);
|
|
},
|
|
"flop.png"
|
|
);
|
|
};
|
|
hf.registerCommand(flop);
|
|
|
|
const jpeg = new Command("jpeg");
|
|
jpeg.category = CATEGORY;
|
|
jpeg.helpText = "Turn an image into a compressed mess";
|
|
jpeg.usage = "[url]";
|
|
jpeg.addAlias("needsmorejpeg");
|
|
jpeg.callback = async function (msg, line) {
|
|
return await createImageCallback(
|
|
msg,
|
|
line,
|
|
async (img) => {
|
|
return await Jimp.read(img).then((x) =>
|
|
x.quality(1).getBufferAsync(Jimp.MIME_JPEG)
|
|
);
|
|
},
|
|
"jpeg.jpg"
|
|
);
|
|
};
|
|
hf.registerCommand(jpeg);
|