Update app.py
Browse files
app.py
CHANGED
|
@@ -58,7 +58,7 @@ class MedicalLabBot:
|
|
| 58 |
self.load_all_materials()
|
| 59 |
|
| 60 |
async def initialize_application(self):
|
| 61 |
-
"""تهيئة تطبيق التليجرام بشكل غير متزامن"""
|
| 62 |
try:
|
| 63 |
if not self.application:
|
| 64 |
logger.info("🔄 جاري تهيئة تطبيق التليجرام...")
|
|
@@ -70,16 +70,35 @@ class MedicalLabBot:
|
|
| 70 |
await self.setup_handlers()
|
| 71 |
|
| 72 |
# ========== !! الحــل !! ==========
|
| 73 |
-
#
|
| 74 |
-
# httpx.ConnectError: [Errno -5] No address associated with hostname
|
| 75 |
-
# await self.application.initialize()
|
| 76 |
-
# =================================
|
| 77 |
|
| 78 |
-
|
| 79 |
-
|
| 80 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 81 |
except Exception as e:
|
| 82 |
-
logger.error(f"❌ خطأ في تهيئة التطبيق: {e}")
|
| 83 |
self.is_initialized = False
|
| 84 |
return False
|
| 85 |
|
|
@@ -748,11 +767,12 @@ bot = MedicalLabBot()
|
|
| 748 |
async def on_startup():
|
| 749 |
"""إعداد Webhook عند بدء التشغيل"""
|
| 750 |
try:
|
| 751 |
-
# تهيئة التطبيق أولاً (
|
| 752 |
success = await bot.initialize_application()
|
| 753 |
|
| 754 |
if not success:
|
| 755 |
-
logger.error("❌ فشل في تهيئة التطبيق الأساسي")
|
|
|
|
| 756 |
return
|
| 757 |
|
| 758 |
if SPACE_URL:
|
|
@@ -769,8 +789,9 @@ async def on_startup():
|
|
| 769 |
|
| 770 |
except Exception as e:
|
| 771 |
logger.error(f"❌ Error during startup (likely setting webhook): {e}")
|
| 772 |
-
#
|
| 773 |
-
|
|
|
|
| 774 |
|
| 775 |
@app.get("/", response_class=HTMLResponse)
|
| 776 |
async def root():
|
|
@@ -796,7 +817,7 @@ async def root():
|
|
| 796 |
<h1>🏥 بوت المختبرات الطبية الذكي</h1>
|
| 797 |
<div class="status">
|
| 798 |
<h2>✅ البوت يعمل</h2>
|
| 799 |
-
<p><strong>الحالة:</strong> {'✅ نشط ومهيأ' if bot.is_initialized else '❌ غير مهيأ'}</p>
|
| 800 |
<p><strong>المواد المحملة:</strong> {materials_count} مادة</p>
|
| 801 |
<p><strong>إجمالي ال��لفات:</strong> {total_files} ملف</p>
|
| 802 |
</div>
|
|
|
|
| 58 |
self.load_all_materials()
|
| 59 |
|
| 60 |
async def initialize_application(self):
|
| 61 |
+
"""تهيئة تطبيق التليجرام بشكل غير متزامن مع محاولات إعادة"""
|
| 62 |
try:
|
| 63 |
if not self.application:
|
| 64 |
logger.info("🔄 جاري تهيئة تطبيق التليجرام...")
|
|
|
|
| 70 |
await self.setup_handlers()
|
| 71 |
|
| 72 |
# ========== !! الحــل !! ==========
|
| 73 |
+
# إعادة تفعيل `initialize` مع إضافة محاولات إعادة للتعامل مع أخطاء الشبكة المؤقتة
|
|
|
|
|
|
|
|
|
|
| 74 |
|
| 75 |
+
max_retries = 3
|
| 76 |
+
retry_delay = 5 # ثواني
|
| 77 |
+
|
| 78 |
+
for attempt in range(max_retries):
|
| 79 |
+
try:
|
| 80 |
+
logger.info(f"🚀 محاولة تهيئة الاتصال بـ Telegram (محاولة {attempt + 1}/{max_retries})...")
|
| 81 |
+
await self.application.initialize()
|
| 82 |
+
self.is_initialized = True
|
| 83 |
+
logger.info("✅ تم تهيئة تطبيق التليجرام بنجاح")
|
| 84 |
+
return True # نجح، اخرج من الدالة
|
| 85 |
+
except Exception as e:
|
| 86 |
+
logger.warning(f"⚠️ فشلت محاولة التهيئة {attempt + 1}: {e}")
|
| 87 |
+
if attempt < max_retries - 1:
|
| 88 |
+
logger.info(f"⏳ الانتظار {retry_delay} ثواني قبل إعادة المحاولة...")
|
| 89 |
+
await asyncio.sleep(retry_delay)
|
| 90 |
+
else:
|
| 91 |
+
logger.error(f"❌ فشل تهيئة التطبيق نهائياً بعد {max_retries} محاولات.")
|
| 92 |
+
# لا تطلق الخطأ، فقط سجل الفشل وأكمل
|
| 93 |
+
self.is_initialized = False
|
| 94 |
+
return False
|
| 95 |
+
|
| 96 |
+
# في حالة الفشل بعد كل المحاولات
|
| 97 |
+
self.is_initialized = False
|
| 98 |
+
return False
|
| 99 |
+
|
| 100 |
except Exception as e:
|
| 101 |
+
logger.error(f"❌ خطأ فادح في تهيئة التطبيق: {e}")
|
| 102 |
self.is_initialized = False
|
| 103 |
return False
|
| 104 |
|
|
|
|
| 767 |
async def on_startup():
|
| 768 |
"""إعداد Webhook عند بدء التشغيل"""
|
| 769 |
try:
|
| 770 |
+
# تهيئة التطبيق أولاً (مع آلية إعادة المحاولة)
|
| 771 |
success = await bot.initialize_application()
|
| 772 |
|
| 773 |
if not success:
|
| 774 |
+
logger.error("❌ فشل في تهيئة التطبيق الأساسي بعد عدة محاولات")
|
| 775 |
+
# التطبيق سيعمل، لكن is_initialized ستكون False
|
| 776 |
return
|
| 777 |
|
| 778 |
if SPACE_URL:
|
|
|
|
| 789 |
|
| 790 |
except Exception as e:
|
| 791 |
logger.error(f"❌ Error during startup (likely setting webhook): {e}")
|
| 792 |
+
# إذا فشل الويب هوك، التطبيق لا يزال "مهيأ" من ناحية الكود
|
| 793 |
+
# لكنه لن يستقبل تحديثات
|
| 794 |
+
pass
|
| 795 |
|
| 796 |
@app.get("/", response_class=HTMLResponse)
|
| 797 |
async def root():
|
|
|
|
| 817 |
<h1>🏥 بوت المختبرات الطبية الذكي</h1>
|
| 818 |
<div class="status">
|
| 819 |
<h2>✅ البوت يعمل</h2>
|
| 820 |
+
<p><strong>الحالة:</strong> {'✅ نشط ومهيأ' if bot.is_initialized else '❌ غير مهيأ (فشل الاتصال بـ Telegram)'}</p>
|
| 821 |
<p><strong>المواد المحملة:</strong> {materials_count} مادة</p>
|
| 822 |
<p><strong>إجمالي ال��لفات:</strong> {total_files} ملف</p>
|
| 823 |
</div>
|