Spaces:
Runtime error
Runtime error
| from telethon import TelegramClient, events, Button, utils | |
| from telethon.sessions import StringSession | |
| import datetime | |
| import html | |
| import asyncio | |
| import os | |
| from flask import Flask | |
| import threading | |
| # إعدادات البوت - سيتم قراءتها من متغيرات البيئة | |
| api_id = int(os.environ.get("API_ID", 0)) | |
| api_hash = os.environ.get("API_HASH", "") | |
| session_string = os.environ.get("SESSION_STRING", "") | |
| KEYWORDS = ["يساعدني","يحل", "يحِل", "ابغى", "يسوي", "أبغى", "يساعد"] | |
| ALERT_TARGET = os.environ.get("ALERT_TARGET", "Shaher8642") # يمكن تغييرها لتكون متغير بيئة أيضاً | |
| # استخدام StringSession إذا كانت متوفرة، وإلا فابدأ جلسة جديدة | |
| client = TelegramClient(StringSession(session_string) if session_string else None, api_id, api_hash) | |
| def contains_keyword(text: str) -> bool: | |
| if not text: | |
| return False | |
| t = text.lower() | |
| return any(kw.lower() in t for kw in KEYWORDS) | |
| def build_chat_link(chat, chat_id, message_id): | |
| if getattr(chat, "username", None): | |
| return f"https://t.me/{chat.username}/{message_id}" | |
| try: | |
| s = str(chat_id) | |
| if s.startswith("-100"): | |
| short = s[4:] | |
| return f"https://t.me/c/{short}/{message_id}" | |
| except Exception: | |
| pass | |
| return None | |
| async def handler(event): | |
| try: | |
| text = event.message.message or "" | |
| if not text or not contains_keyword(text): | |
| return | |
| chat = await event.get_chat() | |
| sender = await event.get_sender() | |
| sender_name = utils.get_display_name(sender) if sender else "مجهول" | |
| if sender and getattr(sender, "username", None): | |
| sender_user_field = f"@{sender.username}" | |
| sender_link = f"https://t.me/{sender.username}" | |
| elif sender and getattr(sender, "id", None): | |
| sender_user_field = f"{sender_name}" | |
| sender_link = f"tg://user?id={sender.id}" | |
| else: | |
| sender_user_field = "لا يوجد" | |
| sender_link = None | |
| chat_title = getattr(chat, "title", None) or getattr(chat, "first_name", None) or "المجموعة" | |
| chat_id = event.chat_id | |
| chat_link = build_chat_link(chat, chat_id, event.message.id) | |
| when = datetime.datetime.utcnow().strftime("%Y-%m-%d %H:%M:%S UTC") | |
| header = ( | |
| f"📢 رسالة مهمة:\n\n" | |
| f"👤 المرسل: {html.escape(sender_name)}\n" | |
| f"🔗 يوزر/رابط المرسل: {sender_user_field}\n" | |
| f"🏷️ المجموعة: {html.escape(chat_title)}\n" | |
| f"🔗 رابط الرسالة: {chat_link if chat_link else 'لا يمكن توليد رابط عام'}\n" | |
| f"🕒 الوقت: {when}\n\n" | |
| f"— الرسالة الأصلية ستأتي بعد هذه الملاحظة —" | |
| ) | |
| buttons = [] | |
| if chat_link: | |
| buttons.append([Button.url("🔗 الانتقال إلى الرسالة", chat_link)]) | |
| await client.send_message(ALERT_TARGET, header, buttons=buttons) | |
| try: | |
| await client.forward_messages(ALERT_TARGET, event.message) | |
| except Exception as fe: | |
| await client.send_message(ALERT_TARGET, "💬 (لم أستطع إعادة توجيه الرسالة — أدرج النص أدناه):\n\n" + text) | |
| except Exception as e: | |
| print("Error handling message:", repr(e)) | |
| # Flask app for keep-alive | |
| app = Flask(__name__) | |
| def home(): | |
| return "I am alive!" | |
| def run_flask_app(): | |
| app.run(host="0.0.0.0", port=7860) | |
| async def main(): | |
| # Start Flask app in a separate thread | |
| flask_thread = threading.Thread(target=run_flask_app) | |
| flask_thread.daemon = True # Allow main program to exit even if thread is running | |
| flask_thread.start() | |
| print("Connecting to Telegram...") | |
| await client.start() | |
| print("Userbot started — listening...") | |
| await client.run_until_disconnected() | |
| if __name__ == '__main__': | |
| try: | |
| asyncio.run(main()) | |
| except KeyboardInterrupt: | |
| pass | |