// code from goatstore // api: https://store.agi.bd const fs = require("fs-extra"); const path = require("path"); const DATA_FILE = path.join(__dirname, "autoreact.json"); // ========================== // Load saved status // ========================== let autoReactEnabled = true; try { if (fs.existsSync(DATA_FILE)) { const data = fs.readJsonSync(DATA_FILE); if (typeof data.enabled === "boolean") { autoReactEnabled = data.enabled; } } } catch (e) { autoReactEnabled = true; } // ========================== // Save status // ========================== function saveStatus() { try { fs.writeJsonSync( DATA_FILE, { enabled: autoReactEnabled }, { spaces: 2 } ); } catch (e) { console.error("AutoReact save error:", e); } } module.exports = { config: { name: "autoreact", version: "5.0.0", author: "๐€๐’๐ˆ๐… ๐๐๐˜", role: 1, category: "system", shortDescription: "Auto react on/off", longDescription: "Automatically reacts to messages based on emoji and text triggers.", guide: { en: "{pn} on - Turn AutoReact on" + "\n{pn} off - Turn AutoReact off" + "\n{pn} status - Check AutoReact status" } }, // ========================== // COMMAND // ========================== onStart: async function ({ args, message }) { const action = (args[0] || "").toLowerCase(); // -------------------------- // ON // -------------------------- if (action === "on") { if (autoReactEnabled) { return message.reply( "โ•ญโ”โ”โ”ใ€” ๐Ÿค– AUTOREACT ใ€•โ”โ”โ”โ•ฎ\n" + "โ”ƒ\n" + "โ”ƒ โœ… AutoReact is already ON.\n" + "โ”ƒ\n" + "โ•ฐโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ•ฏ" ); } autoReactEnabled = true; saveStatus(); return message.reply( "โ•ญโ”โ”โ”ใ€” ๐Ÿค– AUTOREACT ใ€•โ”โ”โ”โ•ฎ\n" + "โ”ƒ\n" + "โ”ƒ โœ… AutoReact has been turned ON.\n" + "โ”ƒ\n" + "โ”ƒ โšก Automatic reactions are active.\n" + "โ”ƒ\n" + "โ•ฐโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ•ฏ" ); } // -------------------------- // OFF // -------------------------- if (action === "off") { if (!autoReactEnabled) { return message.reply( "โ•ญโ”โ”โ”ใ€” ๐Ÿค– AUTOREACT ใ€•โ”โ”โ”โ•ฎ\n" + "โ”ƒ\n" + "โ”ƒ โŒ AutoReact is already OFF.\n" + "โ”ƒ\n" + "โ•ฐโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ•ฏ" ); } autoReactEnabled = false; saveStatus(); return message.reply( "โ•ญโ”โ”โ”ใ€” ๐Ÿค– AUTOREACT ใ€•โ”โ”โ”โ•ฎ\n" + "โ”ƒ\n" + "โ”ƒ โŒ AutoReact has been turned OFF.\n" + "โ”ƒ\n" + "โ”ƒ ๐Ÿ’ค Automatic reactions are disabled.\n" + "โ”ƒ\n" + "โ•ฐโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ•ฏ" ); } // -------------------------- // STATUS // -------------------------- if (action === "status") { return message.reply( "โ•ญโ”โ”โ”ใ€” ๐Ÿค– AUTOREACT STATUS ใ€•โ”โ”โ”โ•ฎ\n" + "โ”ƒ\n" + `โ”ƒ Status: ${autoReactEnabled ? "๐ŸŸข ON" : "๐Ÿ”ด OFF"}\n` + "โ”ƒ\n" + "โ•ฐโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ•ฏ" ); } // -------------------------- // INVALID // -------------------------- return message.reply( "โ•ญโ”โ”โ”ใ€” ๐Ÿค– AUTOREACT ใ€•โ”โ”โ”โ•ฎ\n" + "โ”ƒ\n" + "โ”ƒ Usage:\n" + "โ”ƒ โ€ข autoreact on\n" + "โ”ƒ โ€ข autoreact off\n" + "โ”ƒ โ€ข autoreact status\n" + "โ”ƒ\n" + "โ•ฐโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ•ฏ" ); }, // ========================== // AUTO REACTION // ========================== onChat: async function ({ api, event }) { try { // โŒ AutoReact OFF เฆนเฆฒเง‡ เฆ•เฆฟเฆ›เง เฆ•เฆฐเฆฌเง‡ เฆจเฆพ if (!autoReactEnabled) return; const { messageID, body, senderID, threadID } = event; if (!messageID || !body) return; // โŒ เฆจเฆฟเฆœเง‡เฆฐ / เฆฌเฆŸเง‡เฆฐ เฆฎเง‡เฆธเง‡เฆœเง‡ react เฆจเฆพ if (senderID === api.getCurrentUserID()) return; // ========================== // Cooldown // ========================== global.__autoReactCooldown ??= {}; if ( global.__autoReactCooldown[threadID] && Date.now() - global.__autoReactCooldown[threadID] < 2500 ) { return; } global.__autoReactCooldown[threadID] = Date.now(); const text = body.toLowerCase(); let react = null; // ========================== // Emoji Categories // ========================== const categories = [ { e: ["๐Ÿ˜‚", "๐Ÿคฃ", "๐Ÿ˜†", "๐Ÿ˜„", "๐Ÿ˜"], r: "๐Ÿ˜†" }, { e: ["๐Ÿ˜ญ", "๐Ÿ˜ข", "๐Ÿฅบ", "๐Ÿ’”"], r: "๐Ÿ˜ข" }, { e: ["โค๏ธ", "๐Ÿ’–", "๐Ÿ’˜", "๐Ÿฅฐ", "๐Ÿ˜"], r: "โค๏ธ" }, { e: ["๐Ÿ˜ก", "๐Ÿคฌ"], r: "๐Ÿ˜ก" }, { e: ["๐Ÿ˜ฎ", "๐Ÿ˜ฑ", "๐Ÿ˜ฒ"], r: "๐Ÿ˜ฎ" }, { e: ["๐Ÿ˜Ž", "๐Ÿ”ฅ", "๐Ÿ’ฏ"], r: "๐Ÿ˜Ž" }, { e: ["๐Ÿ‘", "๐Ÿ‘Œ", "๐Ÿ™"], r: "๐Ÿ‘" }, { e: ["๐ŸŽ‰", "๐Ÿฅณ"], r: "๐ŸŽ‰" } ]; // ========================== // Text Triggers // ========================== const texts = [ { k: ["haha", "lol", "moja", "xd"], r: "๐Ÿ˜†" }, { k: ["sad", "kharap", "mon kharap", "cry"], r: "๐Ÿ˜ข" }, { k: ["love", "valobasi", "miss"], r: "โค๏ธ" }, { k: ["rag", "angry", "rage"], r: "๐Ÿ˜ก" }, { k: ["wow", "omg"], r: "๐Ÿ˜ฎ" }, { k: ["ok", "yes", "okay", "hmm"], r: "๐Ÿ‘" } ]; // ========================== // Emoji Check // ========================== for (const category of categories) { if (category.e.some(x => text.includes(x))) { react = category.r; break; } } // ========================== // Text Check // ========================== if (!react) { for (const trigger of texts) { if (trigger.k.some(x => text.includes(x))) { react = trigger.r; break; } } } // โŒ Nothing matched if (!react) return; // ========================== // Human-like Delay // ========================== await new Promise(resolve => setTimeout(resolve, 800)); // ========================== // Final Reaction // ========================== api.setMessageReaction(react, messageID); } catch (error) { // Prevent bot crash from reaction errors } } };