// code from goatstore // api: https://store.agi.bd const axios = require("axios"); const fs = require("fs-extra"); const path = require("path"); const Jimp = require("jimp"); module.exports = { config: { name: "hugv2", version: "4.0.0", author: "MrTomXxX", countDown: 5, role: 0, shortDescription: "Hug 🥰", longDescription: "Create a hug image with a mentioned person.", category: "image", guide: { en: "{pn} @mention" }, dependencies: { axios: "", "fs-extra": "", jimp: "" } }, onStart: async function ({ event, message, usersData }) { const { senderID, mentions } = event; const mentionID = Object.keys(mentions || {})[0]; if (!mentionID) { return message.reply("❌ | Please mention 1 person."); } const cacheDir = path.join(__dirname, "cache", "canvas"); const templatePath = path.join( cacheDir, "hugv2.jpg" ); const avatarOnePath = path.join( cacheDir, `hugv2_avatar_${senderID}.png` ); const avatarTwoPath = path.join( cacheDir, `hugv2_avatar_${mentionID}.png` ); const outputPath = path.join( cacheDir, `hugv2_${senderID}_${mentionID}.png` ); try { await fs.ensureDir(cacheDir); // Download Hug template if (!fs.existsSync(templatePath)) { const template = await axios.get( "https://i.ibb.co/zRdZJzG/1626342271-28-kartinkin-com-p-anime-obnimashki-v-posteli-anime-krasivo-30.jpg", { responseType: "arraybuffer", timeout: 30000 } ); await fs.writeFile( templatePath, template.data ); } // Get GoatBot avatar URLs const avatarUrlOne = await usersData.getAvatarUrl(senderID); const avatarUrlTwo = await usersData.getAvatarUrl(mentionID); if (!avatarUrlOne || !avatarUrlTwo) { return message.reply( "❌ | Profile picture পাওয়া যায়নি।" ); } // Download both avatars const [avatarOne, avatarTwo] = await Promise.all([ axios.get(avatarUrlOne, { responseType: "arraybuffer", timeout: 30000 }), axios.get(avatarUrlTwo, { responseType: "arraybuffer", timeout: 30000 }) ]); await fs.writeFile( avatarOnePath, avatarOne.data ); await fs.writeFile( avatarTwoPath, avatarTwo.data ); // Load images const background = await Jimp.read(templatePath); const imageOne = await Jimp.read(avatarOnePath); const imageTwo = await Jimp.read(avatarTwoPath); // Make avatars circular imageOne.circle(); imageTwo.circle(); // Original size: 100x100 imageOne.resize(100, 100); imageTwo.resize(100, 100); // Original positions background.composite( imageOne, 370, 40 ); background.composite( imageTwo, 330, 150 ); // Create PNG const buffer = await background.getBufferAsync( Jimp.MIME_PNG ); await fs.writeFile( outputPath, buffer ); // Send image only once return message.reply({ body: "", attachment: fs.createReadStream( outputPath ) }); } catch (error) { console.error( "hugv2 error:", error ); return message.reply( "❌ | Hug image তৈরি করতে সমস্যা হয়েছে।" ); } finally { // Remove temporary avatar files try { if (fs.existsSync(avatarOnePath)) { await fs.remove(avatarOnePath); } if (fs.existsSync(avatarTwoPath)) { await fs.remove(avatarTwoPath); } } catch (e) {} // Remove generated image after sending setTimeout(async () => { try { if (fs.existsSync(outputPath)) { await fs.remove(outputPath); } } catch (e) {} }, 10000); } } };