// code from goatstore // api: https://store.agi.bd const axios = require("axios"); const API = axios.create({ baseURL: "https://eryxenx.agi.bd/api/simsimi", timeout: 20000 }); // ====================================================== // DUPLICATE MESSAGE PROTECTION // ====================================================== const processedMessages = new Set(); function alreadyProcessed(messageID) { if (!messageID) return false; if (processedMessages.has(messageID)) return true; processedMessages.add(messageID); // Only block the exact same message event setTimeout(() => { processedMessages.delete(messageID); }, 5 * 60 * 1000); return false; } // ====================================================== // ROBOT REACTIONS // ====================================================== const triggerReactions = [ "๐Ÿค–", "๐Ÿฆพ", "โšก", "๐Ÿ”‹", "๐Ÿ›ธ", "๐Ÿ‘พ" ]; function getRandomTriggerReaction() { return triggerReactions[ Math.floor( Math.random() * triggerReactions.length ) ]; } // ====================================================== // ERROR MESSAGE // ====================================================== function errMsg(e) { const data = e?.response?.data; return ( data?.message || data?.error || data?.detail || e?.message || "Unknown error" ); } // ====================================================== // TYPING // ====================================================== async function sendTypingIndicatorV2( api, sendTyping, threadID ) { try { if ( typeof api.sendTypingIndicator === "function" ) { await api.sendTypingIndicator( threadID, sendTyping ); } } catch (e) { console.log( "โš ๏ธ Typing error:", e.message ); } } // ====================================================== // BOT UID // ====================================================== let botUID = null; function getBotUID(api) { if (botUID) return botUID; try { if ( typeof api.getCurrentUserID === "function" ) { botUID = api.getCurrentUserID(); } } catch (e) { console.log( "โš ๏ธ Bot UID error:", e.message ); } return botUID; } // ====================================================== // CONFIG // ====================================================== module.exports.config = { name: "baby", version: "13.0.0", author: "๐€๐’๐ˆ๐…", countDown: 0, role: 0, category: "chat", shortDescription: "AI auto teach chat", longDescription: "AI auto teach chat with unlimited trigger replies, robot reactions and auto teach.", guide: "{pn} [query]" + "\n{pn} list" + "\n{pn} teach [Question] - [Reply]" + "\n{pn} react [Question] - [Emoji]" + "\n{pn} edit [Question] - [OldReply] - [NewReply]" + "\n{pn} remove/rm [Question] - [Reply]" + "\n{pn} del" + "\n{pn} msg [trigger]" + "\n{pn} msg [trigger] -20" + "\n{pn} autoteach", envConfig: {} }; // ====================================================== // USER NAME // ====================================================== async function getUserName( api, uid, usersData ) { try { if ( usersData && typeof usersData.getName === "function" ) { const name = await usersData.getName(uid); if (name) return name; } if ( typeof api.getUserInfo === "function" ) { const info = await api.getUserInfo(uid); return ( info?.[uid]?.name || "User" ); } return "User"; } catch { return "User"; } } // ====================================================== // GREETING REPLIES // ====================================================== const greetingReplies = [ // ๐Ÿ˜Ž ATTITUDE "Amake dakso? Eto sahos kothay pao? ๐Ÿ˜", "Ki holo? Amar attention chara thakte paro na? ๐Ÿ˜Ž", "Daklei ki ami chole ashbo naki? ๐Ÿ˜’", "Abar amake dakteso? Obbhash hoye geche naki? ๐Ÿ™„", "Bolo, ki chai? Attitude free te dei na เฆ•เฆฟเฆจเงเฆคเง ๐Ÿ˜Ž", "Amake dakle response paba, kintu VIP treatment alada ๐Ÿ˜", "Bolo boss, system tomar command er opekkhay ๐Ÿ˜Ž", // ๐Ÿ˜‚ FUNNY "Ki re! Amar ghum bhangaila ken? ๐Ÿ˜‚", "Dak shune ashlam, biryani koi? ๐Ÿ—๐Ÿ˜‚", "Ki chai? Advice, roast, naki free entertainment? ๐Ÿ˜‚", "Abar ami? Bot er ki kono chuti nai? ๐Ÿ˜ญ๐Ÿ˜‚", "Present sir! ๐Ÿซก๐Ÿ˜‚", "Ke daklo re bhai? Attendance nite aschi ๐Ÿ˜‚", "Amake dakle age snacks dite hoy ๐Ÿ˜ญ๐Ÿ˜‚", "Bot ke dakso, bill kintu internet er ๐Ÿ˜‚", // ๐Ÿฅบ EMOTIONAL "Haan bolo, ami shunchi ๐Ÿฅบ", "Ki hoyeche? Mon kharap naki? ๐Ÿฅบ", "Bolo, chup kore thakle toh bujhbo na ๐Ÿซ‚", "Ami ekhanei achi, bolo ki hoyeche ๐ŸŒธ", "Kotha bolo, moner kotha chepe rekho na ๐Ÿฅบ", "Ki niye tension? Bolo, dekhi ki kora jay ๐Ÿซ‚", "Shob thik hoye jabe, age bolo ki hoyeche ๐ŸŒธ", // ๐ŸŒธ CUTE "Haan bolooo ๐ŸŒธ", "Ki holo? Eto mishti kore dakla ken? ๐Ÿ˜Œ", "Bolo na, shunchi ๐Ÿ‘€โœจ", "Ami ready, tumi shuru koro ๐Ÿ˜Œ", "Haan ji, bolo ๐Ÿ˜บ", "Dak shunlam, ekhon bolo ki dorkar ๐Ÿ˜Œ", "Bolo, attention ekhon tomar dike ๐Ÿ‘€", "Ji boss, bolo ๐ŸŒธ", // ๐ŸŽญ DRAMATIC "Ei dak! Ei dak er pichone nishchoi kono boro kahini ache ๐Ÿ‘€", "Abar ki holo! Drama shuru naki? ๐Ÿ˜ญ๐Ÿ˜‚", "Bujhte parchi, ajke abar kichu ekta hobe ๐Ÿ˜ถ", "Ei muhurte amar entry dorkar chilo bujhi? ๐Ÿ˜Ž", "Scene ta interesting lagtesey ๐Ÿ‘€๐Ÿฟ", "Wait... ei dak er moddhe suspicious kichu ache ๐Ÿ‘€", "Drama loading... ๐ŸŽญ๐Ÿ˜‚", // ๐Ÿ˜ TEASING "Abar amakei dakla? Onno kauke mone porlo na? ๐Ÿ˜‚", "Ki holo boss, amar kotha mone porlo? ๐Ÿ˜", "Eto bar dakle kintu ami famous hoye jabo ๐Ÿ˜‚", "Bolo, abar ki kand korte jaccho? ๐Ÿ˜", "Tomar dak shunlei bujhi kichu ekta golmal ache ๐Ÿ˜‚", "Abar dak! Dekhi ajker story ki ๐Ÿ˜", "Bolo, ki conspiracy cholche? ๐Ÿ‘€๐Ÿ˜‚", // ๐Ÿ”ฅ ROAST "Dakso ken? Nijer problem nijerai solve korte paro na? ๐Ÿ˜‚", "Ami bot, miracle worker na bhai ๐Ÿ˜ญ๐Ÿ˜‚", "Problem niye ascho, solution er expectation NASA level ๐Ÿ˜ญ", "Abar help chai? Google ke chere amar upor vorsa! ๐Ÿ˜‚", "Question dekhei amar processor gorom hoye gelo ๐Ÿค–๐Ÿ”ฅ", "CPU boltesey ektu aste boss ๐Ÿ˜‚", "System overload hobar age problem ta bolo ๐Ÿค–", // ๐Ÿซ‚ SUPPORTIVE "Bolo, ki help lagbe? ๐Ÿซ‚", "Chinta koro na, dekhi ki kora jay ๐ŸŒธ", "Bolo, joto tuku pari help korbo ๐Ÿค", "Problem ta bolo, ekshathe dekhi ๐Ÿ’ซ", "Haan bolo, ami shunchi ๐Ÿซ‚", "Ki dorkar bolo, step by step dekhi ๐Ÿค", "Bolo boss, solution khujar try kori ๐Ÿ’ซ", // ๐ŸŽฒ RANDOM "Bolo boss ๐Ÿ˜Ž", "Haan, bolo ๐Ÿ‘€", "Ki khobor? ๐Ÿ˜Œ", "Ki obostha? ๐Ÿ˜‚", "Ami present! ๐Ÿค–", "Command received ๐Ÿค–โšก", "System online... bolo ๐Ÿ˜Ž", "Bot ready! ๐Ÿฆพ", "Connection successful ๐Ÿค–๐Ÿ”‹", "Signal received ๐Ÿ›ธ", "Ki order? ๐Ÿค–", "Bolo, AI active ๐Ÿ˜Ž", "Listening... ๐Ÿ‘‚๐Ÿค–", "Online and ready โšก", "System waiting for input ๐Ÿ”‹", // โœจ EXTRA "Amake dakle reply na diye thaki kemne? ๐Ÿ˜‚", "Haan re, bolo ki hoise? ๐Ÿ˜Œ", "Ki holo abar? ๐Ÿ˜ญ๐Ÿ˜‚", "Ami ekhanei achi ๐Ÿ‘€", "Dak shune chole ashlam ๐Ÿค–", "Bolo, mission ki? ๐Ÿฆพ", "Robot mode activated ๐Ÿค–โšก", "Okay boss, command dao ๐Ÿ˜Ž", "Ready for your next message ๐Ÿ›ธ", "Bot attendance complete ๐Ÿซก๐Ÿค–", "Command accepted โšก", "AI awake ๐Ÿค–", "System fully operational ๐Ÿฆพ", "Mission received ๐Ÿ›ธ", "Robot squad ready ๐Ÿ‘พ" ]; // ====================================================== // SEND GREETING // ====================================================== async function sendGreeting( api, event ) { const reply = greetingReplies[ Math.floor( Math.random() * greetingReplies.length ) ]; await sendTypingIndicatorV2( api, true, event.threadID ); // FAST RESPONSE await new Promise(resolve => setTimeout(resolve, 300) ); await sendTypingIndicatorV2( api, false, event.threadID ); return api.sendMessage( reply, event.threadID, (err, info) => { if ( !err && info?.messageID ) { global.GoatBot.onReply.set( info.messageID, { commandName: module.exports.config.name, messageID: info.messageID, author: event.senderID, type: "simsimi" } ); } }, event.messageID ); } // ====================================================== // REACTION // ====================================================== async function reactToTrigger( api, messageID ) { if (!messageID) return; const reaction = getRandomTriggerReaction(); try { await api.setMessageReaction( reaction, messageID, () => {}, true ); } catch (e) { console.log( "โš ๏ธ Reaction error:", e.message ); } } // ====================================================== // SEND MESSAGE ASYNC // ====================================================== function sendMessageAsync( api, text, threadID, replyToID ) { return new Promise( (resolve, reject) => { const callback = (err, info) => { if (err) return reject(err); resolve(info); }; if (replyToID) { api.sendMessage( text, threadID, callback, replyToID ); } else { api.sendMessage( text, threadID, callback ); } } ); } // ====================================================== // SIMSIMI RESPONSE // ====================================================== async function deliverSimsimiResponse({ api, event, query, senderName }) { await sendTypingIndicatorV2( api, true, event.threadID ); let res; try { res = await API.get( "/", { params: { text: query, senderName, senderID: event.senderID, threadID: event.threadID } } ); } finally { await sendTypingIndicatorV2( api, false, event.threadID ); } const data = res?.data || {}; if (data.rateLimited) return; // API reaction if ( data.reaction && event.messageID ) { try { await api.setMessageReaction( data.reaction, event.messageID, () => {}, true ); } catch (e) { console.log( "โš ๏ธ API reaction error:", e.message ); } } if (!data.response) return; try { const info = await sendMessageAsync( api, data.response, event.threadID, event.messageID ); if (info?.messageID) { global.GoatBot.onReply.set( info.messageID, { commandName: module.exports.config.name, messageID: info.messageID, author: event.senderID, type: "simsimi" } ); } } catch (e) { console.log( "โŒ Reply send error:", e.message ); try { const info = await sendMessageAsync( api, data.response, event.threadID ); if (info?.messageID) { global.GoatBot.onReply.set( info.messageID, { commandName: module.exports.config.name, messageID: info.messageID, author: event.senderID, type: "simsimi" } ); } } catch (e2) { console.log( "โŒ Retry failed:", e2.message ); } } } // ====================================================== // ON START // ====================================================== module.exports.onStart = async function ({ api, event, args, usersData }) { const senderName = await getUserName( api, event.senderID, usersData ); const query = args .join(" ") .trim(); try { // ================================================== // AUTOTEACH STATUS // ================================================== if ( args[0]?.toLowerCase() === "autoteach" ) { const res = await API.get( "/autoteach/stats" ); const today = res.data?.today || 0; const total = res.data?.total || 0; return api.sendMessage( `โ•ญโ”€โ•ผ๐ŸŒŸ ๐—”๐˜‚๐˜๐—ผ๐˜๐—ฒ๐—ฎ๐—ฐ๐—ต ๐—ฆ๐˜๐—ฎ๐˜๐˜‚๐˜€ โ”œ ๐ŸŸข ๐—ฆ๐˜๐—ฎ๐˜๐˜‚๐˜€: ๐—”๐—น๐˜„๐—ฎ๐˜†๐˜€ ๐—ข๐—ก โ”œ ๐Ÿ“… ๐—ง๐—ผ๐—ฑ๐—ฎ๐˜†: ${today} โ•ฐโ”€โ•ผ๐Ÿ“Š ๐—ง๐—ผ๐˜๐—ฎ๐—น: ${total}`, event.threadID, event.messageID ); } // ================================================== // LIST // ================================================== if ( args[0]?.toLowerCase() === "list" ) { const res = await API.get( "/list" ); return api.sendMessage( `โ•ญโ”€โ•ผ๐ŸŒŸ ๐—•๐—ฎ๐—ฏ๐˜† ๐—”๐—œ ๐—ฆ๐˜๐—ฎ๐˜๐˜‚๐˜€ โ”œ ๐Ÿ“ ๐—ค๐˜‚๐—ฒ๐˜€๐˜๐—ถ๐—ผ๐—ป๐˜€: ${res.data?.totalQuestions || 0} โ”œ ๐Ÿ“ฆ ๐—ฅ๐—ฒ๐—ฝ๐—น๐—ถ๐—ฒ๐˜€: ${res.data?.totalReplies || 0} โ•ฐโ”€โ•ผ๐Ÿ‘ค ๐——๐—ฒ๐˜ƒ๐—ฒ๐—น๐—ผ๐—ฝ๐—ฒ๐—ฟ: ๐€๐’๐ˆ๐… ๐๐๐™`, event.threadID, event.messageID ); } // ================================================== // MSG // ================================================== if ( args[0]?.toLowerCase() === "msg" ) { let trigger = args .slice(1) .join(" ") .trim(); if (!trigger) { return api.sendMessage( "โŒ | Use: baby msg [trigger]\nOr: baby msg [trigger] -20", event.threadID, event.messageID ); } let customLimit = null; const limitMatch = trigger.match( /\s*-(\d+)\s*$/ ); if (limitMatch) { customLimit = parseInt( limitMatch[1], 10 ); trigger = trigger .replace( /\s*-(\d+)\s*$/, "" ) .trim(); } const res = await API.get( "/simsimi-list", { params: { ask: trigger } } ); const replies = res.data?.replies || []; if (!replies.length) { return api.sendMessage( "โŒ No replies found.", event.threadID, event.messageID ); } const limit = customLimit > 0 ? customLimit : 150; const shown = replies.slice( 0, limit ); const remaining = replies.length - shown.length; const formatted = shown .map( (rep, index) => `โžค ${index + 1}. ${rep}` ) .join("\n"); const note = remaining > 0 ? `\nโš ๏ธ ${remaining} more replies available.` : ""; const msg = `๐Ÿ“Œ ๐—ง๐—ฟ๐—ถ๐—ด๐—ด๐—ฒ๐—ฟ: ${trigger}\n` + `๐Ÿ“‹ ๐—ง๐—ผ๐˜๐—ฎ๐—น: ${replies.length}\n` + `โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\n` + formatted + `\nโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”` + note + `\n\nโœ๏ธ Reply with numbers to KEEP. Example: 2, 7`; return api.sendMessage( msg, event.threadID, (err, info) => { if ( !err && info?.messageID ) { global.GoatBot.onReply.set( info.messageID, { commandName: module.exports.config.name, messageID: info.messageID, author: event.senderID, type: "msgSelect", trigger } ); } }, event.messageID ); } // ================================================== // TEACH // ================================================== if ( args[0]?.toLowerCase() === "teach" ) { const parts = args .slice(1) .join(" ") .split(" - "); if ( parts.length < 2 ) { return api.sendMessage( "โŒ | Use: baby teach [Question] - [Reply]", event.threadID, event.messageID ); } const [ ask, ans ] = parts; const res = await API.get( "/teach", { params: { ask: ask.trim(), ans: ans.trim(), senderID: event.senderID, senderName } } ); return api.sendMessage( `โœ… ${res.data?.message || "Taught successfully."}`, event.threadID, event.messageID ); } // ================================================== // REACT // ================================================== if ( args[0]?.toLowerCase() === "react" ) { const parts = args .slice(1) .join(" ") .split(" - "); if ( parts.length < 2 ) { return api.sendMessage( "โŒ | Use: baby react [Question] - [Emoji]", event.threadID, event.messageID ); } const [ ask, emoji ] = parts; const res = await API.get( "/teachReact", { params: { ask: ask.trim(), emoji: emoji.trim(), senderName } } ); return api.sendMessage( `โœ… ${res.data?.message || "Reaction taught successfully."}`, event.threadID, event.messageID ); } // ================================================== // EDIT // ================================================== if ( args[0]?.toLowerCase() === "edit" ) { const parts = args .slice(1) .join(" ") .split(" - "); if ( parts.length < 3 ) { return api.sendMessage( "โŒ | Use: baby edit [Question] - [OldReply] - [NewReply]", event.threadID, event.messageID ); } const [ ask, oldReply, newReply ] = parts; const res = await API.get( "/edit", { params: { ask: ask.trim(), old: oldReply.trim(), new: newReply.trim() } } ); return api.sendMessage( res.data?.message || "โœ… Updated.", event.threadID, event.messageID ); } // ================================================== // REMOVE // ================================================== if ( ["remove", "rm"].includes( args[0]?.toLowerCase() ) ) { const parts = args .slice(1) .join(" ") .split(" - "); if ( parts.length < 2 ) { return api.sendMessage( "โŒ | Use: baby remove [Question] - [Reply]", event.threadID, event.messageID ); } const [ ask, ans ] = parts; const res = await API.get( "/delete", { params: { ask: ask.trim(), ans: ans.trim() } } ); return api.sendMessage( res.data?.message || "โœ… Removed.", event.threadID, event.messageID ); } // ================================================== // DEL // ================================================== if ( args[0]?.toLowerCase() === "del" ) { return api.sendMessage( "โŒ | Reply to the bot's wrong answer and use: baby del", event.threadID, event.messageID ); } // ================================================== // EMPTY // ================================================== if (!query) { return sendGreeting( api, event ); } // ================================================== // AI // ================================================== return await deliverSimsimiResponse({ api, event, query, senderName }); } catch (e) { console.error( "โŒ [baby/onStart]:", e ); return api.sendMessage( `โŒ Error: ${errMsg(e)}`, event.threadID, event.messageID ); } }; // ====================================================== // ON REPLY // ====================================================== module.exports.onReply = async function ({ api, event, Reply, usersData }) { const text = event.body?.trim(); const lowered = text?.toLowerCase(); const senderName = await getUserName( api, event.senderID, usersData ); // ================================================== // ATTACHMENT REACTION // ================================================== if ( event.attachments && event.attachments.length ) { const type = event.attachments[0].type; let reaction = null; if (type === "photo") reaction = "๐Ÿซฉ"; else if ( type === "animated_image" ) reaction = "๐Ÿ˜ตโ€๐Ÿ’ซ"; else if (type === "video") reaction = "๐Ÿค”"; else if (type === "audio") reaction = "๐Ÿค•"; if (reaction) { try { await api.setMessageReaction( reaction, event.messageID, () => {}, true ); } catch (e) { console.log( "โš ๏ธ Attachment reaction:", e.message ); } return; } } if (!text) return; // ================================================== // DELETE REPLY // ================================================== if ( lowered === "del" || lowered === "!baby del" ) { try { const originalReply = event.messageReply?.body || Reply?.body; if (!originalReply) { return api.sendMessage( "โŒ Couldn't read the original message.", event.threadID, event.messageID ); } const res = await API.get( "/deleteByReply", { params: { reply: originalReply } } ); return api.sendMessage( res.data?.message || "โœ… Deleted.", event.threadID, event.messageID ); } catch (e) { return api.sendMessage( `โŒ Failed: ${errMsg(e)}`, event.threadID, event.messageID ); } } // ================================================== // MSG SELECT // ================================================== if ( Reply?.type === "msgSelect" ) { if ( event.senderID !== Reply.author ) return; const numbers = text .split(",") .map( n => parseInt( n.trim(), 10 ) ) .filter( Number.isInteger ); if (!numbers.length) { return api.sendMessage( "โŒ Example: 2, 7, 10", event.threadID, event.messageID ); } try { const res = await API.post( "/keepOnly", { ask: Reply.trigger, keepIndexes: numbers } ); return api.sendMessage( res.data?.message || "โœ… Updated.", event.threadID, event.messageID ); } catch (e) { return api.sendMessage( `โŒ Failed: ${errMsg(e)}`, event.threadID, event.messageID ); } } // ================================================== // AI REPLY // ================================================== try { return await deliverSimsimiResponse({ api, event, query: text, senderName }); } catch (e) { return api.sendMessage( `โŒ Error: ${errMsg(e)}`, event.threadID, event.messageID ); } }; // ====================================================== // BOT MENTION // ====================================================== function isBotMentioned( event, uid ) { if ( !uid || !event.mentions ) return false; return Object.prototype.hasOwnProperty.call( event.mentions, uid ); } // ====================================================== // TRIGGERS // ====================================================== const exactTriggers = [ "baby", "bot", "bby", "beby", "bbz", "xan", "jan", "janu", "xanu", "eme", "เฆฌเง‡เฆฌเฆฟ", "เฆœเฆพเฆจ", "เฆœเฆพเฆจเง", "เฆฌเฆŸ", "asif" ]; const prefixPattern = /^(baby|bot|bby|beby|bbz|xan|jan|janu|xanu|eme|เฆฌเง‡เฆฌเฆฟ|เฆœเฆพเฆจ|เฆœเฆพเฆจเง|เฆฌเฆŸ|asif)\s+/i; // ====================================================== // ON CHAT // ====================================================== module.exports.onChat = async function ({ api, event, usersData }) { const rawText = event.body?.trim(); if (!rawText) return; const text = rawText.toLowerCase(); const uid = getBotUID(api); // ================================================== // DUPLICATE MESSAGE ONLY // ================================================== if ( !event.messageID || alreadyProcessed( event.messageID ) ) { return; } // ================================================== // BOT MENTION // ================================================== if ( isBotMentioned( event, uid ) ) { try { await reactToTrigger( api, event.messageID ); return await sendGreeting( api, event ); } catch (e) { console.error( "โŒ [baby/mention]:", e ); return; } } // ================================================== // EXACT TRIGGER // ================================================== if ( exactTriggers.includes(text) ) { try { await reactToTrigger( api, event.messageID ); return await sendGreeting( api, event ); } catch (e) { console.error( "โŒ [baby/exact]:", e ); return; } } // ================================================== // PREFIX TRIGGER // ================================================== if ( prefixPattern.test(rawText) ) { const query = rawText .replace( prefixPattern, "" ) .trim(); if (!query) return; try { await reactToTrigger( api, event.messageID ); const senderName = await getUserName( api, event.senderID, usersData ); return await deliverSimsimiResponse({ api, event, query, senderName }); } catch (e) { console.error( "โŒ [baby/onChat]:", e ); return api.sendMessage( `โŒ Error: ${errMsg(e)}`, event.threadID, event.messageID ); } } // ================================================== // AUTOTEACH // ================================================== if ( !event.isGroup || !event.senderID || event.senderID === uid ) return; try { const senderName = await getUserName( api, event.senderID, usersData ); await API.get( "/autoteach", { params: { text: rawText, senderName, senderID: event.senderID, threadID: event.threadID }, timeout: 10000 } ); } catch (e) { console.error( "โŒ [baby/autoteach]:", e.message ); } };