tailsgora Control
Who Im · محتوى اللعبة ✓
صفحة مستقلة عن tailsgora Control Center وعن لوحة القيادة.
Who Im · إدارة الصور والأسئلة
com.netforge.whoim · Firestore categories / characters · رفع الصور عبر /storage
تصنيف جديد
شخصية + صورة + سؤال/تلميح
مكتبة الشخصيات
tailsgora Control Center ✓
com.netforge.tailsgora · Firebase RTDB · WireGuard · WebRTC · v5.5.15-compat23
أقران متصلون
0
Mesh Networkمكالمات نشطة
0
WebRTCأنفاق VPN
0
WireGuardرسائل
0
Realtimeأجهزة Android
0
OnlineFirebase RTDB
متصل
SyncedWireGuard Server
Activeشبكة الأقران المباشرة ✓
Firebase /meshالمكالمات النشطة ✓
Firebase /callsآخر الرسائل ✓
Firebase /chats/*/messagesتحكم التطبيق ✓ Android · /admin/controls
أي مفتاح هنا يصل إلى تطبيق الجوال مباشرة عبر Firebase. النسخة المثبّتة حالياً في المشروع: 5.5.15-compat23 · versionCode 68 · الحزمة com.netforge.tailsgora
مفاتيح حية
—
رسالة الصيانة وأقل إصدار
رابط التخزين على السيرفر
—شبكة الأقران ✓ (Mesh Network)
دليل الأسماء الرمزية
قائمة الأقران
| المستخدم | الاسم الرمزي | UID | Virtual IP | الحالة | آخر ظهور | إجراءات |
|---|---|---|---|---|---|---|
| جاري التحميل... | ||||||
مركز المكالمات ✓ (WebRTC · tailsgora)
اتصال باسم رمزي
مكالمة جماعية (رنين للكل)
يرن كل الأعضاء كاتصال وارد من tailsgora
ضوابط الأدمن
المكالمات النشطة
سجل المكالمات
WebRTC Signaling
مراقبة الدردشة ✓
الرسائل المباشرة
Firebase /chats/*/messagesإحصائيات
إرسال رسالة
تظهر في الدردشة الخاصة باسم tailsgora عبر Firebase + FCM
WireGuard VPN Monitor ✓
Server Configuration
[Interface] Address = 100.64.0.1/10 ListenPort = 51820 PrivateKey = (hidden) [Peer] # Server public key PublicKey = VJiYOv8sd2w82txb5Au7kCzZJvZELrO1RPCTBygyOCk= Endpoint = 34.165.237.115:51820 AllowedIPs = 100.64.0.0/10
أنفاق VPN النشطة
أجهزة Android ✓
الأجهزة المسجلة
| الجهاز | UID | Virtual IP | VPN | آخر نشاط |
|---|---|---|---|---|
| جاري التحميل... | ||||
أدمن tailsgora ✓
رسائل خاصة + أوامر التيرمنال العميق للأعضاء
رسالة خاصة من tailsgora
أوامر التيرمنال العميق
أجهزة أونلاين (AdminBridge)
بلاغات التطبيق ✓
بلاغات الأعضاء
تقارير المشاكل (تيرمنال)
التخزين · G:\New folder\LocalNetStorage ✓
المجلد: G:\New folder\LocalNetStorage · الخادم :3000
محتويات LocalNetStorage
—| مجلد | ملف | حجم | تاريخ | إجراء |
|---|---|---|---|---|
| اضغط تحديث أو انتظر التحميل… | ||||
حصة كل عضو (100MB / 24h)
| العضو | UID | مستخدم | متبقي | النسبة |
|---|---|---|---|---|
| لا بيانات /storage/quota بعد | ||||
التحكم بالحسابات ✓
حظر إيميل / يوزرنيم / الاثنين · فك الحظر · حذف اليوزرنيم · حذف الحساب (Auth + RTDB عبر ops-agent)
| UID | يوزر | إيميل | ربط | حظر | إجراءات |
|---|
دليل الأسماء الرمزية ✓
كل الأسماء من /usernames + /mesh · تعديل / حذف اليوزر · حذف الحساب بالكامل (Firebase + Auth)
| الاسم الرمزي | الإيميل | الاسم | UID | Android ID | حالة | إجراءات |
|---|
مولّد SDK · Projects ✓
مثل Agora Console: أنشئ App ID + Certificate + Temporary Token لدمج محادثات نصية/صوتية في الألعاب والتطبيقات الأخرى
بانتظار Firebase…
Create New Project
يُحفظ في Firebase /sdkApps — App ID بطول 32 حرف مثل Agora، مع شهادة لتوليد التوكن.
Projects
| الاسم | App ID | Use case | Features | Status | إجراءات |
|---|
—
——
••••
لا تضع الـ Certificate داخل لعبة أو APK — فقط على السيرفر.
Generate Temporary Token
—
Integration snippet · app.js
جاهز للصق في ألعابك مثل تكامل Agora + Firebase — يستبدل AGORA_APP_ID بـ TAILSGORA_APP_ID.
سجل البناء · tailsgora Playbook ✓
كيف نشرنا الروابط · استخدمنا SDK · وصلنا لمكالمة ودردشة حقيقية · بنينا CodePenio · وجعلنا الروابط عالمية — مع المشاكل التي واجهتنا
1) البنية التي اعتمدناها
عميل الويب التجريبي: Desktop/index.html + app.js · لوحة الإدارة: هذا الملف · CodePenio: مجلد مستقل على سطح المكتب.
2) كيف نستخدم الـ SDK (مثل Agora)
- من الشريط: → Create New Project (اسم + use case + Text/Voice).
- يُنشأ App ID (32 hex) + Certificate ويُحفظ في /sdkApps/{appId}.
- Generate Temporary Token للقناة (مثل lobby) والـ UID — الصيغة: TG1.appId.channel.uid.expire.sig.
- انسخ snippet أو حمّل الملف، وفي العميل ضع TAILSGORA_APP_ID + التوكن + إعدادات Firebase tailsgora.
- الملف المرجعي: sdk/tailsgora-client.js — دردشة عبر RTDB؛ الصوت الحقيقي يحتاج WebRTC فوق الإشارة.
const TAILSGORA_APP_ID = "<appId>";
// Firebase: netforge-tailsgora + Asia RTDB
await joinChat({ channel: "lobby", token: "TG1...." });
await joinVoice({ channel: "lobby", token: "TG1...." }); // + WebRTC mesh في عميل الويب
3) كيف وصلنا لمكالمة حقيقية
في البداية كان «الانضمام للصوت» يكتب فقط عضواً وجلسة في Firebase — بدون مسار ميديا. لذلك لا يُسمع الطرف الآخر.
/sdkRooms/{appId}/{channel}/voice/webrtc/{uid}/offers|answers|candidates
اختبار: افتح http://127.0.0.1:5501/index.html من جهازين/متصفحين بنفس القناة بعد إذن المايك.
4) دردشة نصية حقيقية
- المسار: /sdkRooms/{appId}/{channel}/messages
- تظهر في تبويب «الدردشة النصية» + صندوق مصغّر داخل صفحة المكالمة.
- تنضم تلقائياً عند انضمام الصوت؛ أو يدوياً بزر «انضمام للدردشة».
- يتطلب Auth (Anonymous) لأن قواعد sdkRooms = auth != null.
5) كيف تنشر الروابط (من الإدارة والمنتجات)
من إعدادات APP_LINK: inviteBaseUrl على Firebase Hosting. حدّث الحقول من لوحة التخزين/البنية ثم انشرها للعملاء.
شغّل storage-server.js على الـ hub، ثم ضع النفق في RTDB:
https://tailsgora.duckdns.org/storage (Nginx → 127.0.0.1:3000 — no Cloudflare)
من المحرر: «إنشاء رابط عالمي» → حفظ في RTDB /codepenio/pens + رفع HTML عبر نفق الرفع /upload → رابط /download/files/….html.
6) كيف صنعنا CodePenio
- مشروع مستقل: Desktop/codepenio/ (لا يلمس كود Android مباشرة).
- محرر HTML/CSS/JS + معاينة iframe srcdoc كل 500ms + حفظ مسودة محلية.
- ربط بنفس Firebase tailsgora في config.js.
- عند النشر: كتابة القلم في RTDB + رفع صفحة HTML كاملة عبر /storage/upload (نفس نطاق tailsgora.duckdns.org).
- صفحة view.html?id= تعرض القلم من RTDB إن كان غير منتهٍ (24 ساعة).
محلي: python -m http.server 5502 داخل مجلد codepenio → http://127.0.0.1:5502/index.html
7) كيف خلّينا الروابط تشتغل عالمياً
- المشكلة: IP الـ hub :3000 غالباً غيرreachable من الإنترنت / المتصفح (timeout).
- الحل: نطاق دائم https://tailsgora.duckdns.org مع Nginx reverse proxy — لا Cloudflare Tunnel عشوائي.
- الرابط النهائي ثابت مثل: https://tailsgora.duckdns.org/storage/download/files/uuid.html
- بديل/مكمل: Firebase Storage تحت codepenio/pens/ إن فُتحت قواعد الكتابة لـ text/html.
- عرض تفاعلي عبر Hosting لاحقاً: …/codepenio/view.html?id= بعد نشر المجلد.
8) المشاكل التي واجهتنا وكيف عالجناها
| المشكلة | السبب | العلاج |
|---|---|---|
| لا أسمع الطرف الآخر | إشارة RTDB فقط بلا WebRTC | mesh WebRTC + audio elements |
| زر الخروج لا ينهي المكالمة | await Firebase يعلّق قبل تحديث الواجهة | إيقاف محلي فوري ثم تنظيف بمهلة |
| الدردشة «غير موجودة» | مخفية في درج ضيق / بدون انضمام | شريط علوي + دردشة مصغّرة في المكالمة |
| Permission denied على sdkRooms | rules تتطلب auth | signInAnonymously قبل join |
| المايك مرفوض | فتح file:// بدل http | خدمة محلية 127.0.0.1:5501 |
| توكن منتهٍ فجأة | TTL قصير للتجربة | إعادة التوليد من مولّد SDK / TTL أطول |
| روابط Storage لا تفتح عالمياً | :3000 على IP عام مغلق/محجوب | Duck DNS + Nginx HTTPS |
| Hub WS :8080 / STUN :3478 timeout | جدار ناري أو الخدمة متوقفة | Google STUN للمكالمات؛ شخّص من صفحة العميل |
| حلقة «تحميل رسائل أقدم» في التطبيق | مراقب حي يعيد hasMore | فصل تحديثات live عن صفحات الأقدم |
| Crash CallForegroundService | startForeground / صلاحيات | fallback specialUse + ترقية مبكرة |
بوت محادثة حر 🤖 ✓
مساعد حر — اسأل عن أي موضوع: معرفة عامة، كتب، محادثات، موسوعة RightNow، أو المنصة
واتساب Bridge ★
جاري الاتصال بالجسر على المنفذ 3100…
المكتبة: C:\Users\PC-1\Desktop\مكتبات الذكا\whatsapp-web.js-main
يبدأ بعد: اشتغل يازنجي، أو اشتغل يا زنجي، أو يازنجي اشتغل، ويرد «تم». بعدها يقرأ رسائل المجموعة، وإذا كانت موجهة له بتاق أو بسحب الرد على كلامه يجيب من المكتبة. هذه الرسائل تظهر في الصندوق.
تحديث الصفحة لا يقطع الجلسة. لا تُغلق إلا من زر تسجيل خروج.
اختر المجموعات ✓
علّم صح على المجموعة التي تريد أن يعمل فيها البوت. المجموعة بدون صح يبقى البوت ساكتاً فيها.
لم تُحمَّل المجموعات بعد.
مسح QR / الربط
انتظر صورة الباركود أو اطلب كود الربط.
واتساب → الإعدادات → الأجهزة المرتبطة → ربط جهاز
في واتساب: الأجهزة المرتبطة → ربط بجهاز → ربط برقم الهاتف، ثم أدخل الكود.
إرسال رسالة
الرد داخل المجموعات المعلّمة ✓
لا إشعارات لأرقام الجوال. البلاغات والانهيارات تبقى في صفحتي الأمان والبلاغات، ولا تُرسل إلى واتساب.
بدون هذه العلامة يبقى البوت صامتاً. كلمة التشغيل تشغّله داخل المجموعة ويرد «تم». بعد ذلك أي تاق أو سحب رد على كلامه يُجاب من المكتبة، وإذا ما لقى جواباً يقول: كل خرا لاتكلمني. قبل كلمة التشغيل تظهر الرسالة في الصندوق بلا رد.
عند التفعيل تُرسل الرسالة للمجموعات المعلّمة فقط، ولا تذهب إلى أي رقم أو مجموعة بدون علامة صح.
تبدأ في المجموعات المعلّمة ومعها معلومة مساعدة، ثم معلومة جديدة كل 10 ثوانٍ. الجواب القريب جداً يُحسب فوزاً، فيعمل البوت تاق للفائز ويكتب اسمه مع: صحيح تست تست. ومن داخل المجموعة: .حار_بارد أو .بدء_حار_بارد
رسائل التاق والرد ✓
تظهر كلمة التشغيل، والتاق، وسحب الرد على كلام البوت، حتى لو كان البوت لسا ما انشغّل. بعد «تم» يصير يرد على الموجّه له.
السرعة الحالية: 10–20 ثانية
بيانات ومعلومات البوت ✓
نفس مكتبة البوت المحلي: ملاحظاتك هنا، مع الأسئلة والكتب وموسوعة RightNow المخزّنة. تُستخدم عندما يتاغون البوت أو يردّون على رسالته أو يكتبون كلمة التشغيل ثم السؤال.
لوحة القيادة ✓ بيانات حية
WebSocket
—
relayMesh peers
0
/meshActive calls
0
WebRTCالتخزين المحلي
—
G:\New folderOnline
0
peersAll calls
0
/callsBans
0
adminReports
0
/reportsالبنية التحتية · حية ✓
Google Cloud Hub
التخزين المحلي ✓
Mesh
API Gateway Console · حي ✓
—
المسارات الحقيقية
| الخدمة | الهدف | Methods | Latency | Status |
|---|
WebRTC Analytics · من /calls ✓
آخر المكالمات
| الوقت | نوع | حالة | من → إلى |
|---|
Security Center · حي ✓
كل الانهيارات ✓
البلاغات ✓
قائمة المحظورين
الكونسول والسجلات ✓
سبب الإغلاق، تسلسل الشاشات، وطرفية الجهاز المختار.
تسلسل الأحداث من الجوال
—