// code from goatstore // api: https://store.agi.bd const axios = require("axios"); const triggerLocks = new Set(); async function sendTypingIndicatorV2(api, sendTyping, threadID) { try { if (typeof api.sendTypingIndicator === "function") { await api.sendTypingIndicator(threadID, sendTyping); } } catch (err) {} } let botUID = null; function getBotUID(api) { if (botUID) return botUID; try { if (typeof api.getCurrentUserID === "function") { botUID = api.getCurrentUserID(); } } catch {} return botUID; } module.exports.config = { name: "baby", version: "10.0.0", role: 0, author: "Amir", countTime: 0, category: "chat", shortDescription: "دردشة سمسمي باللغة العربية المباشرة", longDescription: "دردشة تفاعلية مع البوت باللغة العربية بطلاقة باستخدام API SimSimi العربي المباشر", guide: "{pn} [نص الرسالة]" }; async function getUserName(api, uid, usersData) { try { if (usersData && typeof usersData.getName === "function") { const name = await usersData.getName(uid); if (name) return name; } const info = await api.getUserInfo(uid); return (info && info[uid] && info[uid].name) || "مستخدم"; } catch { return "مستخدم"; } } // ردود الترحيب العشوائية باللغة العربية عند المناداة باسم البوت فقط const greetingReplies = [ "نعم يا غالي، كيف يمكنني مساعدتك؟ 🥰", "أنا هنا وأستمع إليك، تفضل اسألني! ✨", "أهلاً بك! كيف حالك اليوم؟ 💖", "مرحباً بك! ماذا تحب أن نتحدث عنه؟ 🌸" ]; async function sendGreeting(api, event) { const reply = greetingReplies[Math.floor(Math.random() * greetingReplies.length)]; await sendTypingIndicatorV2(api, true, event.threadID); await new Promise(r => setTimeout(r, 1000)); await sendTypingIndicatorV2(api, false, event.threadID); return api.sendMessage(reply, event.threadID, event.messageID); } // دالة جلب الرد من API سمسمي العربي المباشر async function getSimsimiArabicReply(query, senderName) { // 1. المحاولة الأساسية: سيرفر SimSimi العربي المباشر try { const res = await axios.post( "https://api.simsimi.vn/v1/simsimi", new URLSearchParams({ text: query, lc: "ar" }), { headers: { "Content-Type": "application/x-www-form-urlencoded" }, timeout: 7000 } ); if (res.data && res.data.isSucces && res.data.response) { return res.data.response; } } catch (e) { console.log("⚠️ تعذر الاتصال بسيرفر سمسمي الرئيسي، جاري التحويل للمحرك البديل..."); } // 2. المحرك الاحتياطي السريع في حال حدوث بطء أو خمول في السيرفر الأول try { const backupRes = await axios.get( `https://api.popcat.xyz/chatbot?msg=${encodeURIComponent(query)}&owner=Amir&botname=Baby`, { timeout: 5000 } ); if (backupRes.data && backupRes.data.response) { return backupRes.data.response; } } catch (e) {} return "أهلاً بك! أنا هنا وأستمع إليك، اسألني عن أي شيء تريد معرفته ✨"; } async function deliverResponse({ api, event, query, senderName }) { await sendTypingIndicatorV2(api, true, event.threadID); try { const reply = await getSimsimiArabicReply(query, senderName); await api.sendMessage(reply, event.threadID, event.messageID); } catch (e) { console.error("❌ خطأ إرسال الرد:", e.message); } finally { await sendTypingIndicatorV2(api, false, event.threadID); } } module.exports.onStart = async function ({ api, event, args, usersData }) { const senderName = await getUserName(api, event.senderID, usersData); const query = args.join(" ").trim(); if (!query) return await sendGreeting(api, event); return await deliverResponse({ api, event, query, senderName }); }; module.exports.onReply = async function ({ api, event, usersData }) { const senderName = await getUserName(api, event.senderID, usersData); const text = event.body?.trim(); if (!text) return; return await deliverResponse({ api, event, query: text, senderName }); }; module.exports.onChat = async function ({ api, event, usersData }) { const text = event.body?.trim(); if (!text) return; const senderName = await getUserName(api, event.senderID, usersData); const triggers = ["baby", "bot", "سمسمي", "بيبي", "بوت", "يا بوت"]; const uid = getBotUID(api); if (isBotMentioned(event, uid) || triggers.includes(text.toLowerCase())) { if (triggerLocks.has(event.threadID)) return; triggerLocks.add(event.threadID); try { return await sendGreeting(api, event); } finally { triggerLocks.delete(event.threadID); } } const matchPrefix = /^(baby|bot|سمسمي|بيبي|بوت|يا بوت)\s+/i; if (matchPrefix.test(text)) { const query = text.replace(matchPrefix, "").trim(); if (!query) return; if (triggerLocks.has(event.threadID)) return; triggerLocks.add(event.threadID); try { return await deliverResponse({ api, event, query, senderName }); } finally { triggerLocks.delete(event.threadID); } } }; function isBotMentioned(event, uid) { if (!uid || !event.mentions) return false; return Object.prototype.hasOwnProperty.call(event.mentions, uid); }