// code from goatstore // api: https://store.agi.bd const { createCanvas, loadImage } = require("canvas"); const fs = require("fs-extra"); const path = require("path"); module.exports = { config: { name: "cdi", version: "1.0", author: "RS RIFAT", countDown: 5, role: 0, shortDescription: "CDI meme", longDescription: "Generates a CDI meme: sender's avatar on left circle, replied/mentioned user's avatar on right circle", category: "fun", guide: { en: "{pn} reply to someone's message or mention them\nExample: {pn} @Someone" } }, onStart: async function ({ api, event, message }) { const { senderID, type, messageReply, mentions } = event; let targetID; if (type === "message_reply" && messageReply) { targetID = messageReply.senderID; } else if (mentions && Object.keys(mentions).length > 0) { targetID = Object.keys(mentions)[0]; } if (!targetID) { return message.reply( "Please reply to someone's message or mention them to use this command." ); } if (targetID === senderID) { return message.reply("You can't use this command on yourself."); } try { const templateUrl = "https://files.catbox.moe/hji8qw.jpg"; const avatarSenderUrl = `https://graph.facebook.com/${senderID}/picture?width=512&height=512&access_token=6628568379%7Cc1e620fa708a1d5696fb991c1bde5662`; const avatarTargetUrl = `https://graph.facebook.com/${targetID}/picture?width=512&height=512&access_token=6628568379%7Cc1e620fa708a1d5696fb991c1bde5662`; const [template, avatarLeft, avatarRight] = await Promise.all([ loadImage(templateUrl), loadImage(avatarSenderUrl), loadImage(avatarTargetUrl) ]); const canvas = createCanvas(template.width, template.height); const ctx = canvas.getContext("2d"); ctx.drawImage(template, 0, 0, template.width, template.height); const drawAvatarInCircle = (img, cx, cy, radius) => { ctx.save(); ctx.beginPath(); ctx.arc(cx, cy, radius, 0, Math.PI * 2); ctx.closePath(); ctx.clip(); ctx.drawImage(img, cx - radius, cy - radius, radius * 2, radius * 2); ctx.restore(); }; const w = template.width; const h = template.height; // Left circle -> command sender drawAvatarInCircle(avatarLeft, w * 0.342, h * 0.237, w * 0.097); // Right circle -> replied / mentioned user drawAvatarInCircle(avatarRight, w * 0.796, h * 0.184, w * 0.103); const cacheDir = path.join(__dirname, "cache"); await fs.ensureDir(cacheDir); const filePath = path.join(cacheDir, `cdi_${senderID}_${Date.now()}.png`); const buffer = canvas.toBuffer("image/png"); await fs.writeFile(filePath, buffer); await message.reply({ body: "", attachment: fs.createReadStream(filePath) }); await fs.unlink(filePath).catch(() => {}); } catch (err) { console.error(err); return message.reply("Failed to generate the image. Please try again."); } } };