|
@@ -20,11 +20,12 @@ function intersects(r1, r2) {
|
|
|
}
|
|
|
|
|
|
async function morphFaces(faces, data) {
|
|
|
+ let padoru = Math.random() <= getPadoruChance();
|
|
|
let jimpImage = await Jimp.read(data);
|
|
|
let emojiKeys = [
|
|
|
...client.guilds
|
|
|
.get(EMOTE_GUILD)
|
|
|
- .emojis.filter(e => !e.animated)
|
|
|
+ .emojis.filter(e => !e.animated && e.name.startsWith("PADORU") == padoru)
|
|
|
.keys()
|
|
|
];
|
|
|
|
|
@@ -45,6 +46,13 @@ async function morphFaces(faces, data) {
|
|
|
eh *= scaleFactor;
|
|
|
|
|
|
emojiImage = emojiImage.scale(scaleFactor);
|
|
|
+
|
|
|
+ if(padoru) {
|
|
|
+ emojiImage = await emojiImage.color([
|
|
|
+ { apply: "hue", params: [360 * Math.random()] }
|
|
|
+ ]);
|
|
|
+ }
|
|
|
+
|
|
|
jimpImage = jimpImage.composite(emojiImage, dx - ew / 2, dy - eh / 2);
|
|
|
}
|
|
|
|
|
@@ -54,6 +62,7 @@ async function morphFaces(faces, data) {
|
|
|
const CAPTION_OFFSET = 5;
|
|
|
|
|
|
async function captionFace(faces, data) {
|
|
|
+ let padoru = Math.random() <= getPadoruChance();
|
|
|
let face = faces[Math.floor(Math.random() * faces.length)];
|
|
|
let squaredFace = await face.toSquareAsync();
|
|
|
|
|
@@ -73,13 +82,13 @@ async function captionFace(faces, data) {
|
|
|
);
|
|
|
tempImg = await tempImg.scale(targetSize / squaredFace.width);
|
|
|
|
|
|
- let font = await Jimp.loadFont(Jimp.FONT_SANS_16_BLACK);
|
|
|
+ let font = await Jimp.loadFont(padoru ? Jimp.FONT_SANS_16_WHITE : Jimp.FONT_SANS_16_BLACK);
|
|
|
|
|
|
- let text = `${db.get("faceCaptions.pre").randomElement().value()} ${db.get("faceCaptions.post").randomElement().value()}`;
|
|
|
+ let text = padoru ? "PADORU PADORU" : `${db.get("faceCaptions.pre").randomElement().value()} ${db.get("faceCaptions.post").randomElement().value()}`;
|
|
|
|
|
|
let h = Jimp.measureTextHeight(font, text, targetSize - CAPTION_OFFSET * 2);
|
|
|
|
|
|
- let finalImage = await Jimp.create(targetSize, targetSize + h + CAPTION_OFFSET * 2, 0xffffffff);
|
|
|
+ let finalImage = await Jimp.create(targetSize, targetSize + h + CAPTION_OFFSET * 2, padoru ? 0xff : 0xfffd2027);
|
|
|
|
|
|
finalImage = await finalImage.print(
|
|
|
font,
|
|
@@ -93,6 +102,16 @@ async function captionFace(faces, data) {
|
|
|
return finalImage;
|
|
|
}
|
|
|
|
|
|
+/**
|
|
|
+ * PADORU PADORU
|
|
|
+ */
|
|
|
+function getPadoruChance() {
|
|
|
+ let now = new Date();
|
|
|
+ if(now.getUTCMonth() != 11 || now.getUTCDate() > 26)
|
|
|
+ return 0;
|
|
|
+ return Math.sin(2 * Math.PI * (1.0 / 4.0 * 25.0) * now.getUTCDate());
|
|
|
+}
|
|
|
+
|
|
|
async function processFaceSwap(message, attachmentUrl, processor, failMessage, successMessage) {
|
|
|
let data = await request(attachmentUrl, { encoding: null });
|
|
|
|
|
@@ -158,7 +177,7 @@ async function processFaceSwap(message, attachmentUrl, processor, failMessage, s
|
|
|
|
|
|
jimpImage.quality(90);
|
|
|
let buffer = await jimpImage.getBufferAsync(Jimp.MIME_JPEG);
|
|
|
-
|
|
|
+
|
|
|
let messageContents =
|
|
|
successMessage ||
|
|
|
`I noticed a face in the image. I think this looks better ${client.emojis.get("505076258753740810").toString()}`;
|