// code from goatstore // api: https://store.agi.bd const axios = require("axios"); const fs = require("fs-extra"); const path = require("path"); const { createCanvas, loadImage } = require("canvas"); // ✅ Admin UIDs const ADMIN_UIDS = [ "61585966465927", "61591419904701" ]; module.exports = { config: { name: "avatar", aliases: ["av"], version: "1.0", author: "MOHAMMAD AKASH", countDown: 5, role: 1, description: "Overlay two users' avatars on a template", category: "fun", }, onStart: async function ({ message, event }) { try { // 🚫 Admin only if (!ADMIN_UIDS.includes(event.senderID)) { return message.reply("⚠️ Only admins can use this command!"); } let targetID; const mentions = Object.keys(event.mentions || {}); if (mentions.length > 0) { targetID = mentions[0]; } else if (event.messageReply) { targetID = event.messageReply.senderID; } else { return message.reply( "⚠️ Please mention or reply to 1 person!" ); } const one = event.senderID; const two = targetID; const dir = path.join(__dirname, "cache"); if (!fs.existsSync(dir)) { fs.mkdirSync(dir, { recursive: true }); } const bgPath = path.join( dir, "avatar_template.jpg" ); // Put your SAFE template URL here const templateURL = "YOUR_TEMPLATE_URL_HERE"; if (!fs.existsSync(bgPath)) { const img = await axios.get(templateURL, { responseType: "arraybuffer" }); fs.writeFileSync( bgPath, Buffer.from(img.data) ); } const avatar1 = path.join( dir, `${one}.png` ); const avatar2 = path.join( dir, `${two}.png` ); // Get avatar const getAvatar = async (id, savePath) => { const avatar = await axios.get( `https://graph.facebook.com/${id}/picture?width=512&height=512`, { responseType: "arraybuffer" } ); fs.writeFileSync( savePath, Buffer.from(avatar.data) ); }; await getAvatar(one, avatar1); await getAvatar(two, avatar2); // Load images const bg = await loadImage(bgPath); const av1 = await loadImage(avatar1); const av2 = await loadImage(avatar2); // Canvas const canvas = createCanvas( bg.width, bg.height ); const ctx = canvas.getContext("2d"); // Background ctx.drawImage( bg, 0, 0, bg.width, bg.height ); // Avatar 1 ctx.save(); ctx.beginPath(); ctx.arc( 120, 450, 80, 0, Math.PI * 2 ); ctx.clip(); ctx.drawImage( av1, 40, 370, 160, 160 ); ctx.restore(); // Avatar 2 ctx.save(); ctx.beginPath(); ctx.arc( 520, 200, 80, 0, Math.PI * 2 ); ctx.clip(); ctx.drawImage( av2, 440, 120, 160, 160 ); ctx.restore(); // Output const outPath = path.join( dir, `avatar_result_${one}_${two}.png` ); fs.writeFileSync( outPath, canvas.toBuffer("image/png") ); // Send image await message.reply({ body: "💥 Here you go!", attachment: fs.createReadStream( outPath ) }); // Cleanup if (fs.existsSync(avatar1)) { fs.unlinkSync(avatar1); } if (fs.existsSync(avatar2)) { fs.unlinkSync(avatar2); } if (fs.existsSync(outPath)) { fs.unlinkSync(outPath); } } catch (err) { console.error(err); return message.reply( `❌ Error while generating image: ${err.message}` ); } } };