// code from goatstore // api: https://store.agi.bd /** * @author ProCoderMew * @warn Do not edit code or edit credits */ const fs = require("fs-extra"); const path = require("path"); const axios = require("axios"); const Jimp = require("jimp"); module.exports = { config: { name: "love20", version: "8.0.0", author: "nazrul", countDown: 5, role: 0, shortDescription: "Love Pair Image", longDescription: "Create a love pair image with profile pictures", category: "fun", guide: { en: "{pn} @mention" } }, onStart: async function ({ message, event, usersData }) { let outputPath = null; let avatar1Path = null; let avatar2Path = null; try { const mentions = event.mentions || {}; const mentionIDs = Object.keys(mentions); if (mentionIDs.length < 1) { return message.reply( "💔 Please tag 1 person!\n\nExample: love20 @friend" ); } const targetID = mentionIDs[0]; const senderID = event.senderID; // ========================= // CACHE FOLDER // ========================= const cacheDir = path.join(__dirname, "cache"); if (!fs.existsSync(cacheDir)) { fs.mkdirSync(cacheDir, { recursive: true }); } // ========================= // BACKGROUND // ========================= const backgroundPath = path.join(cacheDir, "ewhd.png"); // Original background URL const backgroundURL = "https://drive.google.com/uc?id=1vPb7AFKsPVqJM6B_wmWTbQtrqv5eXTtz"; if (!fs.existsSync(backgroundPath)) { try { const response = await axios.get(backgroundURL, { responseType: "arraybuffer" }); await fs.writeFile( backgroundPath, Buffer.from(response.data) ); } catch (e) { return message.reply( "❌ Background image (ewhd.png) download করতে পারিনি!\n\n" + "আপনি manually `cache/ewhd.png` ফাইলে background image রাখুন।" ); } } // ========================= // NAMES // ========================= let senderName = "You"; let targetName = "Partner"; try { const senderData = await usersData.get(senderID); if (senderData && senderData.name) { senderName = senderData.name; } } catch (e) {} try { const targetData = await usersData.get(targetID); if (targetData && targetData.name) { targetName = targetData.name; } else if (mentions[targetID]) { targetName = mentions[targetID].replace("@", ""); } } catch (e) { if (mentions[targetID]) { targetName = mentions[targetID].replace("@", ""); } } // ========================= // DOWNLOAD PROFILE PICTURES // ========================= avatar1Path = path.join( cacheDir, `love20_avatar1_${senderID}.jpg` ); avatar2Path = path.join( cacheDir, `love20_avatar2_${targetID}.jpg` ); async function downloadAvatar(uid, filePath) { const url = `https://graph.facebook.com/${uid}/picture?width=720&height=720`; const response = await axios.get(url, { responseType: "arraybuffer", maxRedirects: 5 }); await fs.writeFile(filePath, Buffer.from(response.data)); } try { await downloadAvatar(senderID, avatar1Path); await downloadAvatar(targetID, avatar2Path); } catch (avatarError) { console.error("Avatar Error:", avatarError); return message.reply( "❌ Profile picture download করতে পারিনি!\n\n" + "Facebook avatar access unavailable হতে পারে।" ); } // ========================= // LOVE PERCENT // ========================= const lovePercent = Math.floor(Math.random() * 101); let result; if (lovePercent >= 90) { result = "Made for each other! ❤️"; } else if (lovePercent >= 75) { result = "Perfect Couple! 💕"; } else if (lovePercent >= 60) { result = "Strong Connection! 💗"; } else if (lovePercent >= 40) { result = "Maybe there is something! 💞"; } else if (lovePercent >= 20) { result = "Maybe just friends! 😅"; } else { result = "Better luck next time! 💔"; } // ========================= // LOAD BACKGROUND // ========================= const background = await Jimp.read(backgroundPath); // Original size background.resize(660, 395); // ========================= // MAKE CIRCLE AVATAR // ========================= async function makeCircleAvatar(filePath) { const image = await Jimp.read(filePath); image.resize(190, 190); const mask = new Jimp(190, 190, 0x00000000); mask.scan( 0, 0, 190, 190, function (x, y, idx) { const dx = x - 95; const dy = y - 95; if (dx * dx + dy * dy > 95 * 95) { this.bitmap.data[idx + 3] = 0; } } ); image.mask(mask, 0, 0); return image; } const avatar1 = await makeCircleAvatar(avatar1Path); const avatar2 = await makeCircleAvatar(avatar2Path); // ========================= // COMPOSITE PROFILE PICTURES // ========================= background.composite( avatar1, 215, 162 ); background.composite( avatar2, 407, 164 ); // ========================= // OUTPUT // ========================= outputPath = path.join( cacheDir, `love20_${senderID}_${targetID}_${Date.now()}.png` ); await background.writeAsync(outputPath); // ========================= // SEND // ========================= await message.reply({ body: `💗 LOVE PAIR 💗\n\n` + `👤 ${senderName}\n` + `💞 ${targetName}\n` + `❤️ Love: ${lovePercent}%\n\n` + `✨ ${result}`, attachment: fs.createReadStream(outputPath) }); // ========================= // CLEAN CACHE // ========================= setTimeout(() => { try { if (outputPath && fs.existsSync(outputPath)) { fs.unlinkSync(outputPath); } if (avatar1Path && fs.existsSync(avatar1Path)) { fs.unlinkSync(avatar1Path); } if (avatar2Path && fs.existsSync(avatar2Path)) { fs.unlinkSync(avatar2Path); } } catch (e) {} }, 15000); } catch (error) { console.error("LOVE20 ERROR:", error); try { if (outputPath && fs.existsSync(outputPath)) { fs.unlinkSync(outputPath); } if (avatar1Path && fs.existsSync(avatar1Path)) { fs.unlinkSync(avatar1Path); } if (avatar2Path && fs.existsSync(avatar2Path)) { fs.unlinkSync(avatar2Path); } } catch (e) {} return message.reply( "❌ Love20 চালাতে সমস্যা হয়েছে!\n\n" + `Error: ${error.message || error}` ); } } };