Update app.py
Browse files
app.py
CHANGED
|
@@ -20,11 +20,12 @@ import uvicorn
|
|
| 20 |
import random
|
| 21 |
import docx # لإضافة دعم .docx
|
| 22 |
|
| 23 |
-
# ========== إضافة المكتبات الصحيحة لحل مشكلة DNS + Lifespan ==========
|
| 24 |
import httpx
|
| 25 |
import dns.asyncresolver
|
| 26 |
from httpx import AsyncClient, AsyncHTTPTransport, Request, Response
|
| 27 |
import contextlib # <-- إضافة المكتبة الصحيحة
|
|
|
|
| 28 |
# ==========================================================
|
| 29 |
|
| 30 |
# ========== تكوين السجلات ==========
|
|
@@ -865,7 +866,7 @@ class MedicalLabBot:
|
|
| 865 |
[back_button]
|
| 866 |
]
|
| 867 |
reply_markup = InlineKeyboardMarkup(keyboard)
|
| 868 |
-
await query.edit_message_text(files_text, reply_markup=reply_markup)
|
| 869 |
# البقاء في نفس الحالة لعرض الخيارات مرة أخرى
|
| 870 |
return SELECTING_ACTION
|
| 871 |
|
|
@@ -880,7 +881,8 @@ class MedicalLabBot:
|
|
| 880 |
f"📖 **شرح محاضرة**\n\n"
|
| 881 |
f"{files_list}\n\n"
|
| 882 |
f"📝 اكتب رقم الملف من القائمة أعلاه أو جزءاً من اسمه:",
|
| 883 |
-
reply_markup=reply_markup_back
|
|
|
|
| 884 |
)
|
| 885 |
context.user_data['waiting_for'] = 'lecture_explanation'
|
| 886 |
return WAITING_FOR_QUESTION
|
|
@@ -889,7 +891,7 @@ class MedicalLabBot:
|
|
| 889 |
await query.edit_message_text("⏳ حسناً، جاري توليد بعض الأسئلة للمراجعة...", reply_markup=reply_markup_back)
|
| 890 |
questions = await self.generate_questions_for_subject(subject, user_id)
|
| 891 |
# await query.edit_message_text(questions, reply_markup=reply_markup_back) # لا تعدل الرسالة، أرسل الأسئلة كرد
|
| 892 |
-
await query.message.reply_text(questions, reply_markup=reply_markup_back) # ارسال رد جديد
|
| 893 |
return SELECTING_ACTION # العودة لقائمة الخيارات
|
| 894 |
|
| 895 |
elif action == "explain_concept":
|
|
@@ -906,7 +908,7 @@ class MedicalLabBot:
|
|
| 906 |
await query.edit_message_text("⏳ تمام، جاري تلخيص ملف مهم من المادة...", reply_markup=reply_markup_back)
|
| 907 |
summary = await self.generate_summary(subject, user_id)
|
| 908 |
# await query.edit_message_text(summary, reply_markup=reply_markup_back) # لا تعدل، أرسل كرد
|
| 909 |
-
await query.message.reply_text(summary, reply_markup=reply_markup_back)
|
| 910 |
return SELECTING_ACTION # العودة لقائمة الخيارات
|
| 911 |
|
| 912 |
# إذا لم يتعرف على الإجراء (احتياطي)
|
|
@@ -949,8 +951,10 @@ class MedicalLabBot:
|
|
| 949 |
}.get(file_type, '📄')
|
| 950 |
|
| 951 |
num_text = f" (محاضرة {lecture_num})" if lecture_num else ""
|
| 952 |
-
# تنسيق السطر: الرقم. ايموجي اسم_الملف (رقم المحاضرة إن وجد)
|
| 953 |
-
|
|
|
|
|
|
|
| 954 |
|
| 955 |
if len(files) > max_files_to_show:
|
| 956 |
files_text += f"\n... و {len(files) - max_files_to_show} ملفات أخرى."
|
|
@@ -1079,8 +1083,8 @@ async def root():
|
|
| 1079 |
</html>
|
| 1080 |
"""
|
| 1081 |
|
| 1082 |
-
# ========== !!
|
| 1083 |
-
@app.post("/telegram", response_model=
|
| 1084 |
async def handle_telegram_update(request: Request):
|
| 1085 |
"""معالجة تحديثات Telegram"""
|
| 1086 |
try:
|
|
|
|
| 20 |
import random
|
| 21 |
import docx # لإضافة دعم .docx
|
| 22 |
|
| 23 |
+
# ========== إضافة المكتبات الصحيحة لحل مشكلة DNS + Lifespan + Typing ==========
|
| 24 |
import httpx
|
| 25 |
import dns.asyncresolver
|
| 26 |
from httpx import AsyncClient, AsyncHTTPTransport, Request, Response
|
| 27 |
import contextlib # <-- إضافة المكتبة الصحيحة
|
| 28 |
+
from typing import Dict # <-- إضافة Dict لتحديد نوع الاستجابة
|
| 29 |
# ==========================================================
|
| 30 |
|
| 31 |
# ========== تكوين السجلات ==========
|
|
|
|
| 866 |
[back_button]
|
| 867 |
]
|
| 868 |
reply_markup = InlineKeyboardMarkup(keyboard)
|
| 869 |
+
await query.edit_message_text(files_text, reply_markup=reply_markup, parse_mode='Markdown') # إضافة parse_mode
|
| 870 |
# البقاء في نفس الحالة لعرض الخيارات مرة أخرى
|
| 871 |
return SELECTING_ACTION
|
| 872 |
|
|
|
|
| 881 |
f"📖 **شرح محاضرة**\n\n"
|
| 882 |
f"{files_list}\n\n"
|
| 883 |
f"📝 اكتب رقم الملف من القائمة أعلاه أو جزءاً من اسمه:",
|
| 884 |
+
reply_markup=reply_markup_back,
|
| 885 |
+
parse_mode='Markdown' # إضافة parse_mode
|
| 886 |
)
|
| 887 |
context.user_data['waiting_for'] = 'lecture_explanation'
|
| 888 |
return WAITING_FOR_QUESTION
|
|
|
|
| 891 |
await query.edit_message_text("⏳ حسناً، جاري توليد بعض الأسئلة للمراجعة...", reply_markup=reply_markup_back)
|
| 892 |
questions = await self.generate_questions_for_subject(subject, user_id)
|
| 893 |
# await query.edit_message_text(questions, reply_markup=reply_markup_back) # لا تعدل الرسالة، أرسل الأسئلة كرد
|
| 894 |
+
await query.message.reply_text(questions, reply_markup=reply_markup_back, parse_mode='Markdown') # ارسال رد جديد + parse_mode
|
| 895 |
return SELECTING_ACTION # العودة لقائمة الخيارات
|
| 896 |
|
| 897 |
elif action == "explain_concept":
|
|
|
|
| 908 |
await query.edit_message_text("⏳ تمام، جاري تلخيص ملف مهم من المادة...", reply_markup=reply_markup_back)
|
| 909 |
summary = await self.generate_summary(subject, user_id)
|
| 910 |
# await query.edit_message_text(summary, reply_markup=reply_markup_back) # لا تعدل، أرسل كرد
|
| 911 |
+
await query.message.reply_text(summary, reply_markup=reply_markup_back, parse_mode='Markdown') # ارسال رد + parse_mode
|
| 912 |
return SELECTING_ACTION # العودة لقائمة الخيارات
|
| 913 |
|
| 914 |
# إذا لم يتعرف على الإجراء (احتياطي)
|
|
|
|
| 951 |
}.get(file_type, '📄')
|
| 952 |
|
| 953 |
num_text = f" (محاضرة {lecture_num})" if lecture_num else ""
|
| 954 |
+
# تنسيق السطر: الرقم. ايموجي اسم_الملف (رقم المحاضرة إن وجد) - استخدام Markdown للأسماء
|
| 955 |
+
# استبدال الشرطة السفلية بمسافة في اسم الملف للعرض فقط
|
| 956 |
+
display_name = file_name.replace("_", " ")
|
| 957 |
+
files_text += f"{i}. {type_emoji} `{display_name}`{num_text}\n"
|
| 958 |
|
| 959 |
if len(files) > max_files_to_show:
|
| 960 |
files_text += f"\n... و {len(files) - max_files_to_show} ملفات أخرى."
|
|
|
|
| 1083 |
</html>
|
| 1084 |
"""
|
| 1085 |
|
| 1086 |
+
# ========== !! الحل البديل: تحديد نوع الاستجابة صراحة !! ==========
|
| 1087 |
+
@app.post("/telegram", response_model=Dict[str, str])
|
| 1088 |
async def handle_telegram_update(request: Request):
|
| 1089 |
"""معالجة تحديثات Telegram"""
|
| 1090 |
try:
|