// code from goatstore // api: https://store.agi.bd const axios = require("axios"); const fs = require("fs-extra"); const path = require("path"); const { loadImage, createCanvas } = require("canvas"); module.exports = { config: { name: "pairv2", version: "2.0.0", author: "MrTomXxX", countDown: 10, role: 0, shortDescription: { en: "Get to know your partner" }, longDescription: { en: "Pair yourself with a random group member" }, category: "love", guide: { en: "{pn}" }, dependencies: { axios: "", "fs-extra": "", canvas: "" } }, onStart: async function ({ api, event, usersData }) { const { threadID, messageID, senderID } = event; const cacheDir = path.join(__dirname, "cache"); const time = Date.now(); const pathImg = path.join( cacheDir, `pair2_${time}.png` ); const pathAvt1 = path.join( cacheDir, `pair2_avt1_${time}.png` ); const pathAvt2 = path.join( cacheDir, `pair2_avt2_${time}.png` ); try { await fs.ensureDir(cacheDir); // Sender name const name1 = await usersData.getName(senderID); // Group information const threadInfo = await api.getThreadInfo(threadID); if ( !threadInfo || !Array.isArray(threadInfo.participantIDs) ) { throw new Error( "Group member list পাওয়া যায়নি" ); } // Bot ID const botID = String(api.getCurrentUserID()); // নিজের এবং bot-এর ID বাদ const members = threadInfo.participantIDs.filter( id => String(id) !== String(senderID) && String(id) !== botID ); if (members.length === 0) { return api.sendMessage( "❌ | এই গ্রুপে pair করার মতো অন্য কোনো member নেই।", threadID, messageID ); } // Random partner const id2 = members[ Math.floor( Math.random() * members.length ) ]; // Partner name const name2 = await usersData.getName(id2); // ========================== // Random percentage // ========================== const randomNumber = Math.floor(Math.random() * 100) + 1; const specialRates = [ "0", "-1", "99,99", "-99", "-100", "101", "0,01" ]; const special = specialRates[ Math.floor( Math.random() * specialRates.length ) ]; const rates = [ `${randomNumber}`, `${randomNumber}`, `${randomNumber}`, `${randomNumber}`, `${randomNumber}`, `${special}`, `${randomNumber}`, `${randomNumber}`, `${randomNumber}`, `${randomNumber}` ]; const tile = rates[ Math.floor( Math.random() * rates.length ) ]; // ========================== // Background // ========================== const backgroundURL = "https://i.ibb.co/RBRLmRt/Pics-Art-05-14-10-47-00.jpg"; const accessToken = "6628568379%7Cc1e620fa708a1d5696fb991c1bde5662"; // ========================== // Download sender avatar // ========================== const avatar1 = await axios.get( `https://graph.facebook.com/${senderID}/picture?width=720&height=720&access_token=${accessToken}`, { responseType: "arraybuffer", timeout: 30000 } ); await fs.writeFile( pathAvt1, Buffer.from(avatar1.data) ); // ========================== // Download partner avatar // ========================== const avatar2 = await axios.get( `https://graph.facebook.com/${id2}/picture?width=720&height=720&access_token=${accessToken}`, { responseType: "arraybuffer", timeout: 30000 } ); await fs.writeFile( pathAvt2, Buffer.from(avatar2.data) ); // ========================== // Background download // ========================== const bg = await axios.get( backgroundURL, { responseType: "arraybuffer", timeout: 30000 } ); // ========================== // Load images // ========================== const baseImage = await loadImage( Buffer.from(bg.data) ); const baseAvt1 = await loadImage(pathAvt1); const baseAvt2 = await loadImage(pathAvt2); // ========================== // Canvas // ========================== const canvas = createCanvas( baseImage.width, baseImage.height ); const ctx = canvas.getContext("2d"); // Background ctx.drawImage( baseImage, 0, 0, canvas.width, canvas.height ); // Sender avatar ctx.drawImage( baseAvt1, 111, 175, 330, 330 ); // Partner avatar ctx.drawImage( baseAvt2, 1018, 173, 330, 330 ); // Save await fs.writeFile( pathImg, canvas.toBuffer("image/png") ); // Remove temporary avatars await fs.remove(pathAvt1); await fs.remove(pathAvt2); // ========================== // Send // ========================== await api.sendMessage( { body: `『💗』Congratulations ${name1}『💗』\n\n` + `『❤️』Looks like your destiny brought you together with ${name2}『❤️』\n\n` + `『🔗』Your link percentage is ${tile}%『🔗』`, mentions: [ { tag: name1, id: senderID }, { tag: name2, id: id2 } ], attachment: fs.createReadStream(pathImg) }, threadID, messageID ); // Delete generated image setTimeout(() => { fs.remove(pathImg).catch(() => {}); }, 5000); } catch (error) { console.error( "[pair2] Error:", error ); await fs.remove(pathAvt1).catch(() => {}); await fs.remove(pathAvt2).catch(() => {}); await fs.remove(pathImg).catch(() => {}); return api.sendMessage( `❌ | Pairing failed!\n\n${error.message}`, threadID, messageID ); } } };