
bitchat v1.7.1
دردشة بلوتوث ميش، بأجواء IRC
bitchat
تطبيق مراسلة لامركزي من نظير إلى نظير بمعمارية نقل مزدوجة: شبكات Bluetooth mesh محلية للتواصل دون اتصال، وبروتوكول Nostr القائم على الإنترنت للوصول العالمي. لا حسابات، لا أرقام هواتف، لا خوادم مركزية. إنه الشات الجانبي للمجموعة.
License
هذا المشروع مُصدر إلى النطاق العام. راجع ملف LICENSE للتفاصيل.
Features
- معمارية النقل المزدوج: شبكة Bluetooth mesh للعمل دون اتصال + بروتوكول Nostr للمراسلة عبر الإنترنت
- قنوات مبنية على الموقع: غرف دردشة جغرافية باستخدام إحداثيات geohash عبر مرحلات Nostr العالمية
- التوجيه الذكي للرسائل: يختار تلقائيًا أفضل وسيلة نقل (Bluetooth ← الرجوع إلى Nostr)
- شبكة شبكية لامركزية: اكتشاف تلقائي للأقران وترحيل متعدد القفزات للرسائل عبر Bluetooth LE
- الخصوصية أولاً: لا حسابات، لا أرقام هواتف، لا معرّفات دائمة
- تشفير الرسائل الخاصة من طرف إلى طرف: بروتوكول Noise لشبكة mesh وNIP-17 لـ Nostr
- أوامر بأسلوب IRC: واجهة مألوفة على غرار
/slapو/msgو/who - تطبيق شامل: دعم أصلي لنظامي iOS وmacOS
- مسح طارئ: نقرة ثلاثية لمسح جميع البيانات فورًا
- تحسينات الأداء: ضغط الرسائل LZ4، وأوضاع بطارية تكيفية، وشبكات محسّنة
المعمارية التقنية
يستخدم BitChat معمارية مراسلة هجينة بطبقتين للنقل متكاملتين:
شبكة Bluetooth Mesh (دون اتصال)
- تواصل محلي: مباشر من نظير إلى نظير ضمن نطاق Bluetooth
- ترحيل متعدد القفزات: تمرير الرسائل عبر الأجهزة القريبة (بحد أقصى 7 قفزات)
- لا يتطلب إنترنت: يعمل دون اتصال تمامًا في سيناريوهات الكوارث
- تشفير بروتوكول Noise: تشفير من طرف إلى طرف مع سرية أمامية
- بروتوكول ثنائي: تنسيق حزم مضغوط محسَّن لقيود Bluetooth LE
- اكتشاف تلقائي: اكتشاف الأقران وإدارة الاتصالات
- طاقة تكيفية: دورة تشغيل محسّنة للبطارية
بروتوكول Nostr (إنترنت)
- وصول عالمي: تواصل مع المستخدمين حول العالم عبر مرحلات الإنترنت
- قنوات الموقع: غرف دردشة جغرافية باستخدام إحداثيات geohash
- شبكة مرحلات تضم 290+ مرحلاً: موزعة حول العالم لضمان الموثوقية
- تشفير NIP-17: رسائل خاصة مغلّفة كهدايا للخصوصية على الإنترنت
- مفاتيح مؤقتة: هوية تشفير جديدة لكل منطقة geohash
أنواع القنوات
mesh #bluetooth
- النقل: شبكة Bluetooth Low Energy الشبكية
- النطاق: الأجهزة المحلية ضمن نطاق متعدد القفزات
- الإنترنت: غير مطلوب
- حالة الاستخدام: التواصل دون اتصال، الاحتجاجات، الكوارث، المناطق النائية
قنوات الموقع (block #dr5rsj7, neighborhood #dr5rs, country #dr)
- النقل: بروتوكول Nostr عبر الإنترنت
- النطاق: مناطق جغرافية محددة بدقة geohash
block(7 أحرف): مستوى المربع السكني في المدينةneighborhood(6 أحرف): الحي/المنطقةcity(5 أحرف): مستوى المدينةprovince(4 أحرف): الولاية/المقاطعةregion(حرفان): البلد/المنطقة الكبيرة
- الإنترنت: مطلوب (يتصل بمرحلات Nostr)
- حالة الاستخدام: دردشة مجتمعية قائمة على الموقع، أحداث محلية، نقاشات إقليمية
توجيه الرسائل المباشرة
تستخدم الرسائل الخاصة اختيار النقل الذكي:
-
Bluetooth أولاً (مُفضَّل عند توفره)
- اتصال مباشر بجلسة Noise قائمة
- الخيار الأسرع والأكثر خصوصية
-
الاحتياط عبر Nostr (عند عدم توفر Bluetooth)
- يستخدم المفتاح العام الخاص بالمستلم على Nostr
- تغليف NIP-17 كهدية للخصوصية
- التوجيه عبر شبكة المرحلات العالمية
-
الطابور الذكي (عند عدم توفر أي منهما)
- تُخزَّن الرسائل في طابور حتى يتوفر النقل
- تسليم تلقائي عند إنشاء الاتصال
للاطلاع على توثيق البروتوكول المفصّل، راجع الورقة التقنية البيضاء.
الإعداد
الخيار 1: باستخدام Xcode
cd bitchat
open bitchat.xcodeproj
لتشغيل التطبيق على جهاز، هناك بضع خطوات لتجهيز الكود:
- انسخ الإعدادات المحلية:
cp Configs/Local.xcconfig.example Configs/Local.xcconfig - أضف معرّف فريق المطوّر الخاص بك إلى
Configs/Local.xcconfigالمُنشأ حديثًا- سيتم تعيين معرّف الحزمة إلى
chat.bitchat.<team_id>(إلا إذا عيّنت قيمة أخرى)
- سيتم تعيين معرّف الحزمة إلى
- يجب تحديث الصلاحيات يدويًا (TODO: أتمتة):
- ابحث عن
group.chat.bitchatواستبدلها بـgroup.<your_bundle_id>(مثلgroup.chat.bitchat.ABC123)
- ابحث عن
الخيار 2: باستخدام just
brew install just
هل تريد تجربة ذلك على macOS: just run سيقوم بالإعداد والتشغيل من المصدر.
شغّل just clean بعد ذلك لاستعادة الأشياء إلى حالتها الأصلية لبناء وتطوير تطبيق الجوال.
التوطين
- موارد التطبيق الأساسية موجودة في
bitchat/Localization/Base.lproj/. أضف النصوص الجديدة إلىLocalizable.stringsوقواعد الجمع إلىLocalizable.stringsdict. - نصوص ملحق المشاركة منفصلة في
bitchatShareExtension/Localization/Base.lproj/Localizable.strings. - فضّل المفاتيح التي تصف الغرض (
app_info.features.offline.title) وأعد استخدام الموجود منها حيثما أمكن. - شغّل
xcodebuild -project bitchat.xcodeproj -scheme "bitchat (macOS)" -configuration Debug CODE_SIGNING_ALLOWED=NO buildللتحقق من ترجمة أي تحديثات للتوطين.