const fs = require("fs-extra"); const axios = require("axios"); const { loadImage, createCanvas } = require("canvas"); const API_BASE = "https://hridoy-api.onrender.com"; const CMD_NAME = "hack"; module.exports = { config: { name: "hack", version: "2.0", author: "HR ID OY", countDown: 0, role: 0, shortDescription: "Fake FB hack generator 😅", category: "Tag Fun", guide: { en: "{pn} @mention বা reply" } }, wrapText(ctx, text, maxWidth) { return new Promise(resolve => { if (ctx.measureText(text).width < maxWidth) return resolve([text]); const words = text.split(" "); const lines = []; let line = ""; while (words.length > 0) { if (ctx.measureText(line + words[0]).width < maxWidth) { line += words.shift() + " "; } else { lines.push(line.trim()); line = ""; } if (words.length === 0) lines.push(line.trim()); } resolve(lines); }); }, onStart: async function ({ event, message, usersData }) { const mentionID = Object.keys(event.mentions)[0] || event.senderID; const userName = await usersData.getName(mentionID); const config = (await axios.get(`${API_BASE}/api/images/${CMD_NAME}`)).data; const bgPath = __dirname + "/cache/hack_bg.png"; const avatarPath = __dirname + "/cache/hack_avatar.png"; await fs.ensureDir(__dirname + "/cache"); const avatarData = (await axios.get( `https://graph.facebook.com/${mentionID}/picture?width=720&height=720&access_token=6628568379%7Cc1e620fa708a1d5696fb991c1bde5662`, { responseType: "arraybuffer" })).data; fs.writeFileSync(avatarPath, Buffer.from(avatarData)); const bgData = (await axios.get(config.url, { responseType: "arraybuffer" })).data; fs.writeFileSync(bgPath, Buffer.from(bgData)); const background = await loadImage(bgPath); const avatar = await loadImage(avatarPath); const canvas = createCanvas(background.width, background.height); const ctx = canvas.getContext("2d"); ctx.drawImage(background, 0, 0, canvas.width, canvas.height); const textPos = config.text || { x: 136, y: 335, font: "400 23px Arial", color: "#1878F3", maxWidth: 1160 }; ctx.font = textPos.font; ctx.fillStyle = textPos.color; ctx.textAlign = "start"; const wrapped = await this.wrapText(ctx, userName, textPos.maxWidth); ctx.fillText(wrapped.join("\n"), textPos.x, textPos.y); const facePos = config.positions.face; ctx.beginPath(); ctx.drawImage(avatar, facePos.x, facePos.y, facePos.w, facePos.h); const finalBuffer = canvas.toBuffer(); fs.writeFileSync(bgPath, finalBuffer); await message.reply({ body: config.messages?.[0] || "😎 হ্যাক সম্পূর্ণ!", attachment: fs.createReadStream(bgPath) }); fs.unlinkSync(bgPath); fs.unlinkSync(avatarPath); } };