goat
command
marry
Propose with custom image
0
views
0
likes
0
installs
Aliases: married, biya, engage
raw source
const fs = require("fs-extra");
const Canvas = require("canvas");
const path = require("path");
module.exports = {
config: {
name: "marry",
aliases: ["married", "biya", "engage"],
version: "3.7",
author: "xalman",
countDown: 5,
role: 0,
shortDescription: "Propose with custom image",
longDescription: "Generate a propose image with avatars perfectly placed over characters’ heads (swapped).",
category: "fun",
guide: "{pn} @mention"
},
onStart: async function ({ message, event, usersData }) {
const mention = Object.keys(event.mentions);
if (mention.length === 0)
return message.reply(" plz mention someone");
const senderID = event.senderID;
const mentionedID = mention[0];
try {
const nameSender = await usersData.getName(senderID);
const nameMentioned = await usersData.getName(mentionedID);
const avatarSender =
(await usersData.getAvatarUrl(senderID)) ||
`https://graph.facebook.com/${senderID}/picture?width=512&height=512`;
const avatarMentioned =
(await usersData.getAvatarUrl(mentionedID)) ||
`https://graph.facebook.com/${mentionedID}/picture?width=512&height=512`;
const [avatarImgSender, avatarImgMentioned, bg] = await Promise.all([
Canvas.loadImage(avatarSender),
Canvas.loadImage(avatarMentioned),
Canvas.loadImage("https://i.postimg.cc/VvjW9DwJ/images-8.jpg")
]);
const canvasWidth = 1280;
const canvasHeight = 1280;
const canvas = Canvas.createCanvas(canvasWidth, canvasHeight);
const ctx = canvas.getContext("2d");
ctx.drawImage(bg, 0, 0, canvasWidth, canvasHeight);
const avatarSize = Math.floor(canvasWidth * 0.11);
const girlHead = { x: 470, y: 310 };
const boyHead = { x: 690, y: 200 };
ctx.save();
ctx.beginPath();
ctx.arc(
girlHead.x + avatarSize / 2,
girlHead.y + avatarSize / 2,
avatarSize / 2,
0,
Math.PI * 2
);
ctx.clip();
ctx.drawImage(avatarImgMentioned, girlHead.x, girlHead.y, avatarSize, avatarSize);
ctx.restore();
ctx.save();
ctx.beginPath();
ctx.arc(
boyHead.x + avatarSize / 2,
boyHead.y + avatarSize / 2,
avatarSize / 2,
0,
Math.PI * 2
);
ctx.clip();
ctx.drawImage(avatarImgSender, boyHead.x, boyHead.y, avatarSize, avatarSize);
ctx.restore();
const tmpDir = path.join(__dirname, "tmp");
await fs.ensureDir(tmpDir);
const imgPath = path.join(tmpDir, `${senderID}_${mentionedID}_marry.png`);
await fs.writeFile(imgPath, canvas.toBuffer("image/png"));
const text =
senderID === mentionedID
? "নিজেকে নিজেকে বিয়ে করবে ? 😂"
: `💍 ${nameSender} এর বিয়ে${nameMentioned}- এর সাথে 🥰❤️`;
await message.reply(
{
body: text,
attachment: fs.createReadStream(imgPath)
},
() => fs.unlink(imgPath).catch(() => {})
);
canvas.width = canvas.height = 0;
global.gc && global.gc();
} catch (err) {
console.error("❌ Error in marry command:", err);
message.reply(`error!\n${err.message}`);
}
}
};