// code from goatstore // api: https://store.agi.bd const axios = require("axios"); const fs = require("fs"); const path = require("path"); const customPath = path.join(__dirname, "custom.json"); const topPath = path.join(__dirname, "top.json"); const lockPath = path.join(__dirname, "lock.json"); const banPath = path.join(__dirname, "ban.json"); const economyPath = path.join(__dirname, "economy.json"); if (!fs.existsSync(customPath)) fs.writeFileSync(customPath, JSON.stringify({}, null, 2)); if (!fs.existsSync(topPath)) fs.writeFileSync(topPath, JSON.stringify({}, null, 2)); if (!fs.existsSync(lockPath)) fs.writeFileSync(lockPath, JSON.stringify({ nicklock: {}, dplock: {}, adminonly: {} }, null, 2)); if (!fs.existsSync(banPath)) fs.writeFileSync(banPath, JSON.stringify({}, null, 2)); if (!fs.existsSync(economyPath)) fs.writeFileSync(economyPath, JSON.stringify({}, null, 2)); if (!global.spamTracker) global.spamTracker = {}; if (!global.muted) global.muted = {}; if (!Array.prototype.random) { Array.prototype.random = function () { return this[Math.floor(Math.random() * this.length)]; }; } const mahmud = ["oh","মিম","baby","bby","সুমাইয়া","bbu","jan","Jannat","জান","জানু","বেবি","Rayhan","rayhan","রায়হান","সাব্বির","@Rj Sabbir","Sabbir"]; const baseApiUrl = async () => { const b = await axios.get("https://raw.githubusercontent.com/mahmudx7/HINATA/main/baseApiUrl.json"); return b.data.mahmud; }; module.exports = { config: { name: "hinata", version: "14.0 FIXED", author: "𝐑𝐀𝐘𝐇𝐀𝐍-𝐒𝐀𝐁𝐁𝐈𝐑 👑", countDown: 1, role: 0, category: "chat" }, onStart: async function ({ api, event, args }) { /* আগের মতোই */ }, onChat: async function ({ api, event }) { const threadID = event.threadID; const senderID = event.senderID; let lockData = JSON.parse(fs.readFileSync(lockPath)); let banData = JSON.parse(fs.readFileSync(banPath)); let ecoData = JSON.parse(fs.readFileSync(economyPath)); // === TOP + MONEY COUNT === try { let topData = JSON.parse(fs.readFileSync(topPath)); if (!topData[threadID]) topData[threadID]={}; if (!topData[threadID][senderID]) topData[threadID][senderID]=0; topData[threadID][senderID]++; fs.writeFileSync(topPath, JSON.stringify(topData, null, 2)); if (!ecoData[senderID]) ecoData[senderID]={money:0,lastDaily:""}; ecoData[senderID].money+=1; fs.writeFileSync(economyPath, JSON.stringify(ecoData, null, 2)); } catch {} // === AUTO ADD + WELCOME + BAN CHECK === if (event.logMessageType === "log:unsubscribe") { const leftID = event.logMessageData.leftParticipantFbId; if (leftID!= api.getCurrentUserID()) { await api.addUserToGroup(leftID, threadID).catch(()=>{}); return api.sendMessage(`😏 লিভ নিছিলি? আবার এড করে দিলাম!`, threadID); } } if (event.logMessageType === "log:subscribe") { const added = event.logMessageData.addedParticipants || []; for (let u of added) { if (banData[threadID] && banData[threadID].includes(u.userFbId)) { await api.removeUserFromGroup(u.userFbId, threadID).catch(()=>{}); return api.sendMessage(`🚫 ব্যান ইউজার ${u.fullName} কে কিক করা হলো!`, threadID); } if (u.userFbId!= api.getCurrentUserID()) return api.sendMessage(`🎉 Welcome ${u.fullName} 🥰 আমার বস 𝐑𝐀𝐘𝐇𝐀𝐍-𝐒𝐀𝐁𝐁𝐈𝐑 এর গ্রুপে স্বাগতম!`, threadID); } } if (event.logMessageType === "log:user-nickname" && lockData.nicklock[threadID]) { try { await api.changeNickname(event.logMessageData.nickname || "", threadID, event.logMessageData.participant_id); return api.sendMessage(`🔒 Nickname Lock!`, threadID); } catch {} } const message = event.body?.toLowerCase().trim() || ""; const rawBody = event.body?.trim() || ""; if (!message && event.attachments.length==0) return; if (senderID == api.getCurrentUserID()) return; // MUTE if (global.muted[threadID] && global.muted[threadID].includes(senderID)) { try { await api.unsendMessage(event.messageID); } catch {} return; } // AUTO REACT api.setMessageReaction(["❤️","😂","😮","😍","🥰"].random(), event.messageID, ()=>{}, true); // === COMMANDS === if (message.startsWith(".nicklock")) { const on = rawBody.split(" ")[1]; if (on==="on") { lockData.nicklock[threadID]=true; fs.writeFileSync(lockPath, JSON.stringify(lockData,null,2)); return api.sendMessage("🔒 Nick Lock ON!", threadID); } if (on==="off") { delete lockData.nicklock[threadID]; fs.writeFileSync(lockPath, JSON.stringify(lockData,null,2)); return api.sendMessage("🔓 OFF!", threadID); } } if (message.startsWith(".adminonly")) { const on = rawBody.split(" ")[1]; if (on==="on") { lockData.adminonly[threadID]=true; fs.writeFileSync(lockPath, JSON.stringify(lockData,null,2)); return api.sendMessage("🔒 Admin Only ON!", threadID); } if (on==="off") { delete lockData.adminonly[threadID]; fs.writeFileSync(lockPath, JSON.stringify(lockData,null,2)); return api.sendMessage("🔓 OFF!", threadID); } } if (message.startsWith(".ban")) { const m = Object.keys(event.mentions||{})[0]; if (!m) return; if (!banData[threadID]) banData[threadID]=[]; banData[threadID].push(m); fs.writeFileSync(banPath, JSON.stringify(banData,null,2)); await api.removeUserFromGroup(m,threadID).catch(()=>{}); return api.sendMessage(`🚫 ব্যান করা হলো!`, threadID); } if (message.startsWith(".unban")) { const m = Object.keys(event.mentions||{})[0]||rawBody.split(" ")[1]; if (banData[threadID]) { banData[threadID]=banData[threadID].filter(id=>id!=m); fs.writeFileSync(banPath, JSON.stringify(banData,null,2)); } return api.sendMessage(`✅ আনব্যান!`, threadID); } if (message.startsWith(".mute")) { const m = Object.keys(event.mentions||{})[0]; if (!global.muted[threadID]) global.muted[threadID]=[]; global.muted[threadID].push(m); return api.sendMessage(`🔇 মিউট!`, threadID); } if (message.startsWith(".unmute")) { const m = Object.keys(event.mentions||{})[0]; if (global.muted[threadID]) global.muted[threadID]=global.muted[threadID].filter(id=>id!=m); return api.sendMessage(`🔊 আনমিউট!`, threadID); } if (message.startsWith(".rules")) return api.sendMessage(`📜 রুলস:\n1. গালি নয়\n2. লিংক নয়\n3. স্প্যাম নয়\n4. সম্মান করো - বস 𝐑𝐀𝐘𝐇𝐀𝐍-𝐒𝐀𝐁𝐁𝐈𝐑`, threadID); if (message.startsWith(".daily")) { const today = new Date().toDateString(); if (!ecoData[senderID]) ecoData[senderID]={money:0,lastDaily:""}; if (ecoData[senderID].lastDaily===today) return api.sendMessage("❌ আজ নেওয়া হয়ে গেছে!", threadID); ecoData[senderID].money+=100; ecoData[senderID].lastDaily=today; fs.writeFileSync(economyPath, JSON.stringify(ecoData,null,2)); return api.sendMessage(`✅ 100 টাকা পেলে! মোট: ${ecoData[senderID].money}`, threadID); } if (message.startsWith(".rank")) { let topData = JSON.parse(fs.readFileSync(topPath)); let t = topData[threadID]||{}; const myMsg=t[senderID]||0; const money=ecoData[senderID]?.money||0; return api.sendMessage(`🏆 Rank: ${myMsg} msg | 💰 ${money} tk`, threadID); } if (message.startsWith(".kick")) { const m = Object.keys(event.mentions||{})[0]; try { await api.removeUserFromGroup(m,threadID); return api.sendMessage(`🚫 কিক!`, threadID); } catch {} } if (message.startsWith(".info")) { const m = Object.keys(event.mentions||{})[0]||senderID; const info = await api.getUserInfo(m); return api.sendMessage(`👤 ${info[m].name}\nID: ${m}`, threadID); } if (message.startsWith(".uid")) { const m = Object.keys(event.mentions||{})[0]||senderID; return api.sendMessage(`🆔 ${m}`, threadID); } if (message.startsWith(".unsend") && event.type==="message_reply") return api.unsendMessage(event.messageReply.messageID); if (message.startsWith(".photo")) { try { const res = await axios.get("https://api.mahmudx7.workers.dev/api/photo"); return api.sendMessage({ body: "📸", attachment: await global.utils.getStreamFromURL(res.data.url) }, threadID); } catch {} } if (message.startsWith(".emoji")) { const emoji = rawBody.split(".emoji")[1]?.trim().split(" ")[0]; if (emoji) { try { await api.changeThreadEmoji(emoji, threadID); return api.sendMessage(`✅ ইমোজি ${emoji} সেট!`, threadID); } catch {} } } if (message.startsWith(".theme")) { const color = rawBody.split(".theme")[1]?.trim().split(" ")[0]; if (color) { try { await api.changeThreadColor(color, threadID); return api.sendMessage(`✅ থিম ${color} সেট!`, threadID); } catch {} } } if (message.startsWith(".nick")) { const argsNick = rawBody.split(" ").slice(1); try { if (argsNick[0]==="all") { const newName = argsNick.slice(1).join(" "); const info = await api.getThreadInfo(threadID); for (let id of info.participantIDs) await api.changeNickname(newName, threadID, id); return api.sendMessage(`✅ সবার নাম ${newName}`, threadID); } else if (Object.keys(event.mentions||{}).length>0) { const newName = argsNick.slice(1).join(" "); const mid = Object.keys(event.mentions)[0]; await api.changeNickname(newName, threadID, mid); return api.sendMessage(`✅ নাম ${newName} সেট!`, threadID); } else { const newName = argsNick.join(" "); await api.changeNickname(newName, threadID, senderID); return api.sendMessage(`✅ তোমার নাম ${newName}`, threadID); } } catch { return api.sendMessage("❌ বটকে এডমিন দাও!", threadID); } } // === ANTI LINK/GALI/SPAM === const linkCheck = ["http://","https://","t.me","bit.ly"]; if (linkCheck.some(l => message.includes(l))) return api.sendMessage(`🚫 লিংক নিষেধ!`, threadID); const gali = ["madarchod","মাদারচোদ","খানকি","bal","কুত্তা","বান্দর","শয়তান"]; if (gali.some(w => message.includes(w))) { try { await api.removeUserFromGroup(senderID, threadID); return api.sendMessage(`🚫 গালির জন্য কিক!`, threadID); } catch { return api.sendMessage(`⚠️ গালি দিও না! বস 𝐑𝐀𝐘𝐇𝐀𝐍-𝐒𝐀𝐁𝐁𝐈𝐑 দেখছে!`, threadID); } } if (event.attachments[0]?.type === "sticker") return api.sendMessage(`⚠️ স্টিকার নিষেধ!`, threadID); const key = `${threadID}_${senderID}`; if (!global.spamTracker[key]) global.spamTracker[key] = { last: message, count: 1 }; else { if (global.spamTracker[key].last === message) global.spamTracker[key].count++; else global.spamTracker[key] = { last: message, count: 1 }; } if (global.spamTracker[key].count == 2) return api.sendMessage(`⚠️ ওয়ার্নিং! আর ১ বার দিলে কিক!`, threadID); if (global.spamTracker[key].count >= 3) { try { await api.removeUserFromGroup(senderID, threadID); delete global.spamTracker[key]; return api.sendMessage(`🚫 স্প্যাম কিক!`, threadID); } catch {} } if (fs.existsSync(customPath)) { const data = JSON.parse(fs.readFileSync(customPath)); for (const k in data) if (message.includes(k)) return api.sendMessage(data[k].random(), threadID, event.messageID); } // ====== তোমার পুরাতন ১৬টা কথা - সব ফিরিয়ে দিলাম ====== if (["👍","❤️","😆","😮","😢","😠"].includes(event.reaction)) { return api.sendMessage("কিরে হালা! রিয়্যাক্ট মেরে কি বুঝাইতে চাস? 😒", threadID, event.messageID); } if (message.includes("miss you") || message.includes("মিস ইউ") || message.includes("miss u")) { return api.sendMessage("আমিও তোমাকে মিস করি🥺 কিন্তু আমার বস 𝐑𝐀𝐘𝐇𝐀𝐍-𝐒𝐀𝐁𝐁𝐈𝐑 বলসে কারো সাথে প্রেম করা যাবে না😭", threadID, event.messageID); } if (/^[\p{Emoji}\s]+$/u.test(message) && message.length < 10) { return api.sendMessage(["ওরে বাবা কি কিউট ইমোজি😍", "ইমোজি দিয়ে কি বুঝাইলা? 😏"].random(), threadID, event.messageID); } if (message.includes("good morning") || message.includes("গুড মর্নিং") || message.includes("শুভ সকাল")) { return api.sendMessage("শুভ সকাল☀️ দিনটা ভালো কাটুক!", threadID, event.messageID); } if (message.includes("salam") || message.includes("সালাম") || message.includes("আসসালামু")) { return api.sendMessage("ওয়ালাইকুমুস সালাম🤍 কেমন আছো?", threadID, event.messageID); } if (message.includes("thank") || message.includes("ধন্যবাদ") || message.includes("tnx")) { return api.sendMessage("You are most welcome🥰", threadID, event.messageID); } if (message.includes("rag") || message.includes("রাগ") || message.includes("angry")) { return api.sendMessage("আহারে রাগ করতেসো?😥 সরি জানু", threadID, event.messageID); } if (message === "hum" || message === "হুম" || message === "hmm") { return api.sendMessage(["হুম কি হুম? 🙄", "হুম বলেই শেষ?"].random(), threadID, event.messageID); } if (message.includes("নাম কি") || message.includes("name") || message.includes("তোমার নাম")) { return api.sendMessage("𝗠𝘆 𝗡𝗮𝗺𝗲 𝗶𝘀 𝐀𝐍𝐈𝐊𝐀 𝐀𝐈 𝐁𝐨𝐭! 🤖 বস 𝐑𝐀𝐘𝐇𝐀𝐍-𝐒𝐀𝐁𝐁𝐈𝐑 👑", threadID, event.messageID); } if (message.includes("single") || message.includes("সিঙ্গেল")) { return api.sendMessage("সিঙ্গেল থাকা পাপ না ভাই😌 আমিও সিঙ্গেল!", threadID, event.messageID); } if (message.includes("gf") || message.includes("bf")) { return api.sendMessage("আমার GF/BF নাই🥺 আমি বট!", threadID, event.messageID); } if (message.includes("haha") || message.includes("হাহা") || message.includes("lol")) { return api.sendMessage(["হাসো হাসো😂", "এত হাসি কিসের?"].random(), threadID, event.messageID); } if (message.includes("kemon acho") || message.includes("কেমন আছো")) { return api.sendMessage("আলহামদুলিল্লাহ ভালো আছি😊 তুমি কেমন আছো?", threadID, event.messageID); } if (message.includes("bye") || message.includes("বাই") || message.includes("tata")) { return api.sendMessage("টাটা বাই বাই👋 আবার আসিও!", threadID, event.messageID); } if (message.includes("khaiso") || message.includes("খাইছো") || message.includes("eat")) { return api.sendMessage(["হ্যাঁ খাইসি😋 তুমি খাইসো?", "না এখনো খাই নাই🍔"].random(), threadID, event.messageID); } if (message.includes("leave") || message.includes("লিভ")) { return api.sendMessage("⚠️ ওই! লিভ নিবি কেন? 😡 লিভ নিলে আবার এড করে দিবো!", threadID, event.messageID); } if (event.type!== "message_reply" && mahmud.some(word => message.startsWith(word))) { const randomReplies = ["বলো বেবি😘","হুম শুনছি😼","বস বল বস😎"]; const msgParts = message.trim().split(/\s+/); if (msgParts.length === 1 && event.attachments.length === 0) { return api.sendMessage(randomReplies.random(), threadID, (err, info) => { if (!err) global.GoatBot.onReply.set(info.messageID, { commandName: "hinata", author: event.senderID }); }, event.messageID); } else { let userText = message; for (const p of mahmud) { if (message.startsWith(p)) { userText = message.substring(p.length).trim(); break; } } try { const baseUrl = await baseApiUrl(); const res = await axios.post(`${baseUrl}/api/hinata`, { text: userText, style: 3, attachments: event.attachments }); return api.sendMessage(res.data.message, threadID, (err, info) => { if (!err) global.GoatBot.onReply.set(info.messageID, { commandName: "hinata", author: event.senderID }); }, event.messageID); } catch {} } } } };