const axios = require("axios"); const fs = require("fs"); const path = require("path"); const baseApiUrl = async () => { const base = await axios.get("https://raw.githubusercontent.com/mahmudx7/HINATA/main/baseApiUrl.json"); return base.data.mahmud; }; module.exports = { config: { name: "flux", version: "1.8", author: "ajmaul", countDown: 15, role: 0, description: { bn: "ফ্লাক্স প্রো মডেল দিয়ে উন্নত এআই ছবি তৈরি করুন", en: "Generate high-quality AI images using Flux Pro model", vi: "Tạo hình ảnh AI chất lượng cao bằng mô hình Flux Pro" }, category: "image gen", guide: { bn: ' {pn} --ratio : ছবি তৈরি করতে বর্ণনা ও রেশিও দিন', en: ' {pn} --ratio : Provide description and ratio', vi: ' {pn} --ratio : Cung cấp mô tả và tỷ lệ' } }, langs: { bn: { noPrompt: "× বেবি, ছবি তৈরি করার জন্য কিছু তো লেখো!", wait: "✅ প্রো ছবি তৈরি হচ্ছে, একটু অপেক্ষা করো বেবি...!! <😘", success: "𝐇𝐞𝐫𝐞'𝐬 𝐲𝐨𝐮𝐫 𝐟𝐥𝐮𝐱 𝐩𝐫𝐨 𝐢𝐦𝐚𝐠𝐞 𝐛𝐚𝐛𝐲 <😘", error: "× সমস্যা হয়েছে: %1। প্রয়োজনে Contact Aizen।" }, en: { noPrompt: "× Baby, please provide a prompt to generate image!", wait: "🔄 | Generating your image, please wait...", success: "𝐇𝐞𝐫𝐞'𝐬 𝐲𝐨𝐮𝐫 𝐟𝐥𝐮𝐱 𝐩𝐫𝐨 𝐢𝐦𝐚𝐠 e 𝐛𝐚𝐛𝐲 <😘", error: "× API error: %1. Contact Aizen for help." }, vi: { noPrompt: "× Cưng ơi, vui lòng nhập mô tả để tạo ảnh!", wait: "✅ Đang tạo ảnh Pro, vui lòng chờ chút...!! <😘", success: "Ảnh Flux Pro của cưng đây <😘", error: "× Lỗi: %1. Liên hệ Aizen để hỗ trợ." } }, onStart: async function ({ api, event, args, message, getLang }) { const fullArgs = args.join(" "); if (!fullArgs) return message.reply(getLang("noPrompt")); const [prompt, ratio = "1:1"] = fullArgs.includes("--ratio") ? fullArgs.split("--ratio").map(s => s.trim()) : [fullArgs, "1:1"]; if (!prompt) return message.reply(getLang("noPrompt")); const cacheDir = path.join(__dirname, "cache"); const filePath = path.join(cacheDir, `fluxpro_${Date.now()}_${event.senderID}.png`); if (!fs.existsSync(cacheDir)) fs.mkdirSync(cacheDir, { recursive: true }); let waitMsg; try { api.setMessageReaction("⏳", event.messageID, () => {}, true).catch(() => {}); waitMsg = await message.reply(getLang("wait")); const baseUrl = await baseApiUrl(); const url = `${baseUrl}/api/fluxpro?prompt=${encodeURIComponent(prompt)}&ratio=${encodeURIComponent(ratio)}`; const response = await axios.get(url, { responseType: "arraybuffer", timeout: 120000 }); const buffer = Buffer.from(response.data); const contentType = response.headers["content-type"] || ""; // API যদি ছবির বদলে error/JSON রিটার্ন করে, সেটা ধরে ফেলা const looksLikeImage = contentType.startsWith("image/"); if (!looksLikeImage) { let errMsg = "Invalid response from image API"; try { const parsed = JSON.parse(buffer.toString("utf8")); errMsg = parsed?.message || parsed?.error || errMsg; } catch (_) { // buffer ছিল কিন্তু JSON ও না, image ও না } throw new Error(errMsg); } if (buffer.length < 1000) { throw new Error("Received an empty or corrupted image from the API"); } fs.writeFileSync(filePath, buffer); if (waitMsg?.messageID) { await api.unsendMessage(waitMsg.messageID).catch(() => {}); } api.setMessageReaction("✅", event.messageID, () => {}, true).catch(() => {}); return message.reply({ body: getLang("success"), attachment: fs.createReadStream(filePath) }, () => { if (fs.existsSync(filePath)) { try { fs.unlinkSync(filePath); } catch (_) {} } }); } catch (err) { console.error("Flux Pro Error:", err); if (waitMsg?.messageID) { await api.unsendMessage(waitMsg.messageID).catch(() => {}); } api.setMessageReaction("❌", event.messageID, () => {}, true).catch(() => {}); if (fs.existsSync(filePath)) { try { fs.unlinkSync(filePath); } catch (_) {} } return message.reply(getLang("error", err.message)); } } };