port basic image commands over and dumpy command
This commit is contained in:
parent
6882af6510
commit
acd0e6e7ae
1 changed files with 218 additions and 0 deletions
218
src/modules/image.js
Normal file
218
src/modules/image.js
Normal file
|
@ -0,0 +1,218 @@
|
|||
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();
|
||||
|
||||
const img = await getImage(msg, url);
|
||||
if (!img)
|
||||
return "Image not found. Please give URL, attachment, user mention or custom emoji.";
|
||||
|
||||
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);
|
Loading…
Reference in a new issue