File size: 4,194 Bytes
1a91a80
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
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

@client.on(events.NewMessage(incoming=True))
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__)

@app.route("/")
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