goat
command
married
married canvas card
0
views
0
likes
0
installs
raw source
// Married command - Canvas powered
const fs = require("fs-extra");
const path = require("path");
const axios = require("axios");
const { createCanvas, loadImage } = require("canvas");
const { getMentionIdsRobust } = require("../../includes/mentionResolver");
module.exports.config = {
name: "married",
version: "3.2.0",
role: 0,
author: "π©π
ππ·πΎππͺ πππΎ",
description: "married canvas card",
category: "img",
usages: "[@mention]",
countDown: 5,
};
async function circleAvatar(img, size) {
const canvas = createCanvas(size, size);
const ctx = canvas.getContext("2d");
ctx.beginPath();
ctx.arc(size / 2, size / 2, size / 2, 0, Math.PI * 2, true);
ctx.closePath();
ctx.clip();
ctx.drawImage(img, 0, 0, size, size);
return canvas;
}
async function makeImage({ one, two }) {
const cacheDir = path.join(__dirname, "cache", "canvas");
await fs.ensureDir(cacheDir);
const bgPath = path.join(cacheDir, "married.png");
if (!fs.existsSync(bgPath)) {
const res = await axios.get("https://i.imgur.com/txnRTKf.png", { responseType: "arraybuffer" });
fs.writeFileSync(bgPath, Buffer.from(res.data));
}
const outPath = path.join(cacheDir, "batman" + one + "_" + two + ".png");
const [bgImg, avt1Res, avt2Res] = await Promise.all([
loadImage(bgPath),
axios.get("https://graph.facebook.com/" + one + "/picture?width=512&height=512&access_token=6628568379%7Cc1e620fa708a1d5696fb991c1bde5662", { responseType: "arraybuffer" }),
axios.get("https://graph.facebook.com/" + two + "/picture?width=512&height=512&access_token=6628568379%7Cc1e620fa708a1d5696fb991c1bde5662", { responseType: "arraybuffer" })
]);
const [avt1Img, avt2Img] = await Promise.all([
loadImage(Buffer.from(avt1Res.data)),
loadImage(Buffer.from(avt2Res.data))
]);
const canvas = createCanvas(bgImg.width, bgImg.height);
const ctx = canvas.getContext("2d");
ctx.drawImage(bgImg, 0, 0);
const cAvt1 = await circleAvatar(avt1Img, 170);
const cAvt2 = await circleAvatar(avt2Img, 170);
ctx.drawImage(cAvt1, 1520, 210, 170, 170);
ctx.drawImage(cAvt2, 980, 300, 170, 170);
fs.writeFileSync(outPath, canvas.toBuffer("image/png"));
return outPath;
}
module.exports.onStart = async function ({ event, api, args }) {
const { threadID, messageID, senderID } = event;
const mention = await getMentionIdsRobust(api, event);
if (!mention || !mention[0]) {
return api.sendMessage("Please mention 1 person.", threadID, messageID);
}
const one = senderID;
const two = mention[0];
try {
const imgPath = await makeImage({ one, two });
return api.sendMessage(
{ body: "", attachment: fs.createReadStream(imgPath) },
threadID,
() => fs.unlinkSync(imgPath),
messageID
);
} catch (err) {
return api.sendMessage("Failed to generate married image: " + err.message, threadID, messageID);
}
};