Spaces:
Sleeping
Sleeping
| import os | |
| import requests | |
| from fastapi import FastAPI, Request | |
| from transformers import AutoTokenizer, AutoModelForSequenceClassification, TextClassificationPipeline | |
| # توكن تيلقرام (قدري تحطينه هنا مباشرة) | |
| TELEGRAM_BOT_TOKEN = os.getenv( | |
| "TELEGRAM_BOT_TOKEN", | |
| "8513655100:AAH5bgPDpXioJNW-o5IiNy6sqOVQvjvQXS0" # استبدليه لو غيرتي التوكن | |
| ) | |
| # موديل المشاعر من هقنق فيس | |
| MODEL_ID = "maryaa4/my-arabic-sentiment-model" | |
| print("Loading model...") | |
| tokenizer = AutoTokenizer.from_pretrained(MODEL_ID) | |
| model = AutoModelForSequenceClassification.from_pretrained(MODEL_ID) | |
| pipeline = TextClassificationPipeline(model=model, tokenizer=tokenizer, return_all_scores=False) | |
| print("Model loaded. Device set to CPU.") | |
| app = FastAPI() | |
| async def root(): | |
| # عشان صفحة السبيس ما تعطي 404 | |
| return {"status": "ok", "message": "Telegram webhook is at /telegram"} | |
| def analyze_sentiment(text: str) -> str: | |
| if not text: | |
| return "أرسل لي جملة عربية عشان أحلل مشاعرها 😊" | |
| result = pipeline(text)[0] | |
| label = result["label"] | |
| score = result["score"] | |
| return f"التصنيف: {label} — الثقة: {score:.2f}" | |
| async def telegram_webhook(request: Request): | |
| """ | |
| هذا الإندبوينت يستقبل تحديثات تيلقرام كـ JSON | |
| ويرد على نفس الشات باستعمال sendMessage | |
| """ | |
| try: | |
| update = await request.json() | |
| # ناخذ المرسلة الأساسية (لو رسالة جديدة أو معدلة) | |
| message = update.get("message") or update.get("edited_message") or {} | |
| chat = message.get("chat") or {} | |
| chat_id = chat.get("id") | |
| # لو مافي شات آي دي، نطلع بس بدون ما نسوي شيء | |
| if not chat_id: | |
| return {"ok": True} | |
| text = message.get("text") or "" | |
| reply_text = analyze_sentiment(text) | |
| # نرسل الرد لتيلقرام | |
| url = f"https://api.telegram.org/bot{TELEGRAM_BOT_TOKEN}/sendMessage" | |
| payload = { | |
| "chat_id": chat_id, | |
| "text": reply_text, | |
| } | |
| requests.post(url, json=payload) | |
| except Exception as e: | |
| # تطبعين الخطأ في اللوق لو حبيتي تشوفين وش صار | |
| print("Error in /telegram webhook:", e) | |
| # لازم نرجع 200 لتيلقرام | |
| return {"ok": True} |