// 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: "hug3", 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, "hugv1.png" ); const avatarOnePath = path.join( cacheDir, `hug_avatar_${senderID}.png` ); const avatarTwoPath = path.join( cacheDir, `hug_avatar_${mentionID}.png` ); const outputPath = path.join( cacheDir, `hug_${senderID}_${mentionID}.png` ); try { await fs.ensureDir(cacheDir); // Hug template if (!fs.existsSync(templatePath)) { const template = await axios.get( "https://i.ibb.co/3YN3T1r/q1y28eqblsr21.jpg", { responseType: "arraybuffer", timeout: 30000 } ); await fs.writeFile( templatePath, template.data ); } // Get profile picture URLs const avatarUrlOne = await usersData.getAvatarUrl(senderID); const avatarUrlTwo = await usersData.getAvatarUrl(mentionID); if (!avatarUrlOne || !avatarUrlTwo) { return message.reply( "❌ | Profile picture পাওয়া যায়নি।" ); } // Download 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 circular avatars imageOne.circle(); imageTwo.circle(); // Original avatar sizes imageOne.resize(150, 150); imageTwo.resize(130, 130); // Original positions background.composite( imageOne, 320, 100 ); background.composite( imageTwo, 280, 280 ); // Generate final image const buffer = await background.getBufferAsync( Jimp.MIME_PNG ); await fs.writeFile( outputPath, buffer ); // Send only once return message.reply({ body: "🥰 Hug 🤗", attachment: fs.createReadStream( outputPath ) }); } catch (error) { console.error( "HUG ERROR:", error ); return message.reply( `❌ | Hug image তৈরি করতে সমস্যা হয়েছে।\n\n${error.message || "Unknown error"}` ); } finally { // Remove temporary avatars 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); } } };