# from telegram import Update
# from telegram.ext import Application, MessageHandler, filters, ContextTypes
# import re
# from collections import defaultdict
# import time

# TOKEN = "8900447772:AAGpi1GRBcv41B8LSe_IAPEDgcEPGrAkCLY"

# # سجل لتتبع الرسائل السريعة (لمنع التكرار المزعج)
# user_message_times = defaultdict(list)
# # سجل لتحذيرات الطلاب
# user_warnings = defaultdict(int)

# async def cost_free_smart_moderate(update: Update, context: ContextTypes.DEFAULT_TYPE):
#     if not update.message or not update.message.text:
#         return

#     message = update.message
#     user_id = message.from_user.id
#     current_time = time.time()

#     # 1. نظام الحماية من الروبوتات السريعة (Anti-Flood)
#     user_message_times[user_id].append(current_time)
#     # الاحتفاظ بآخر 4 رسائل فقط خلال 10 ثوانٍ
#     user_message_times[user_id] = [t for t in user_message_times[user_id] if current_time - t < 10]

#     if len(user_message_times[user_id]) > 2:
#         await message.delete()
#         await message.reply_text("عذراً، يرجى إبطاء سرعة الإرسال للحفاظ على تنظيم المجموعة.")
#         return

#     # 2. الفلترة المتقدمة بالأنماط (Regex)
#     text = message.text

#     # نمط لاكتشاف الروابط التي لا تنتمي لنطاقات المنصة المعتمدة
#     # (يُسمح هنا فقط بـ youtube.com أو altaasil.com على سبيل المثال)
#     link_pattern = r'(https?://(?:www\.)?(?!youtube\.com|altaasil\.com)[^\s]+)'

#     # نمط لاكتشاف النصوص المزعجة (مثل الإعلانات أو التداول)
#     spam_pattern = r'(ربح|استثمار|تداول|عملات رقمية|crypto)'

#     if re.search(link_pattern, text) or re.search(spam_pattern, text):
#         await message.delete()
#         user_warnings[user_id] += 1

#         # 3. نظام التحذيرات المتدرج
#         if user_warnings[user_id] >= 3:
#             # إذا تكررت المخالفة 3 مرات، يتم توجيه إنذار أخير (يمكن تطويره لاحقاً لكتم العضو)
#             await message.reply_text("تم تسجيل عدة مخالفات. يرجى الالتزام بقوانين المنصة التعليمية لتجنب تقييد الحساب.")
#         else:
#             await message.reply_text("عذراً، تم حذف الرسالة لمخالفتها قواعد المجموعة (روابط خارجية أو محتوى إعلاني).")

# def main():
#     app = Application.builder().token(TOKEN).build()
#     # مراقبة النصوص فقط في هذا المثال
#     app.add_handler(MessageHandler(filters.TEXT & ~filters.COMMAND, cost_free_smart_moderate))
#     print("تم تشغيل البوت المجاني المتقدم بنجاح!")
#     app.run_polling()

# if __name__ == '__main__':
#     main()




from telegram import Update
from telegram.ext import (
    Application,
    MessageHandler,
    ContextTypes,
    filters
)

from collections import defaultdict
from urllib.parse import urlparse
import re
import time

TOKEN = "8900447772:AAGpi1GRBcv41B8LSe_IAPEDgcEPGrAkCLY"

# =========================
# إعدادات الحماية
# =========================

ALLOWED_DOMAINS = {
    "youtube.com",
    "www.youtube.com",
    "youtu.be",
    "altaasil.com",
    "www.altaasil.com",
    "www.spacechanels.com",
}

MAX_MESSAGES = 3
TIME_WINDOW = 10
MAX_WARNINGS = 3

# =========================
# قواعد البيانات المؤقتة
# =========================

user_message_times = defaultdict(list)
user_warnings = defaultdict(int)

# =========================
# Regex احترافية
# =========================

URL_PATTERN = re.compile(
    r'(?i)\b(?:https?://|www\.)?[a-z0-9-]+(?:\.[a-z0-9-]+)+(?:/[^\s]*)?'
)

TELEGRAM_PATTERN = re.compile(
    r'(?i)(?:https?://)?(?:t\.me|telegram\.me|telegram\.dog)/[a-zA-Z0-9_+\-/]+'
)

IP_PATTERN = re.compile(
    r'\b(?:\d{1,3}\.){3}\d{1,3}\b'
)

SPAM_PATTERN = re.compile(
    r'(?i)\b('
    r'ربح|استثمار|تداول|'
    r'عملات رقمية|'
    r'crypto|'
    r'bitcoin|'
    r'forex|'
    r'binance|'
    r'اربح|'
    r'اكسب|'
    r'دخل يومي|'
    r'مضمون 100%'
    r')\b'
)

# =========================
# التحقق من الروابط
# =========================

def contains_forbidden_link(text: str) -> bool:
    matches = URL_PATTERN.findall(text)

    for url in matches:

        if not url.startswith(("http://", "https://")):
            url = "https://" + url

        try:
            parsed = urlparse(url)

            domain = parsed.netloc.lower()

            if domain.startswith("www."):
                domain = domain[4:]

            allowed = {
                d.replace("www.", "")
                for d in ALLOWED_DOMAINS
            }

            if domain and domain not in allowed:
                return True

        except Exception:
            return True

    return False

# =========================
# نظام الإشراف
# =========================

async def smart_moderation(
    update: Update,
    context: ContextTypes.DEFAULT_TYPE
):
    if not update.message:
        return

    if not update.message.text:
        return

    message = update.message
    text = message.text.strip()
    user_id = message.from_user.id

    current_time = time.time()

    # =====================
    # Anti Flood
    # =====================

    user_message_times[user_id].append(current_time)

    user_message_times[user_id] = [
        t
        for t in user_message_times[user_id]
        if current_time - t < TIME_WINDOW
    ]

    if len(user_message_times[user_id]) > MAX_MESSAGES:

        try:
            await message.delete()
        except Exception:
            pass

        await message.reply_text(
            "⚠️ يرجى عدم إرسال الرسائل بسرعة كبيرة."
        )
        return

    # =====================
    # فحص المخالفات
    # =====================

    violation = (
        contains_forbidden_link(text)
        or TELEGRAM_PATTERN.search(text)
        or IP_PATTERN.search(text)
        or SPAM_PATTERN.search(text)
    )

    if not violation:
        return

    # =====================
    # حذف الرسالة
    # =====================

    try:
        await message.delete()
    except Exception:
        pass

    user_warnings[user_id] += 1

    warnings_count = user_warnings[user_id]

    # =====================
    # التحذيرات
    # =====================

    if warnings_count >= MAX_WARNINGS:

        await message.reply_text(
            f"🚫 تحذير نهائي.\n"
            f"عدد المخالفات: {warnings_count}\n"
            f"يرجى الالتزام بقوانين المجموعة."
        )

    else:

        remaining = MAX_WARNINGS - warnings_count

        await message.reply_text(
            f"⚠️ تم حذف رسالتك لمخالفتها قواعد المجموعة.\n"
            f"عدد التحذيرات: {warnings_count}/{MAX_WARNINGS}\n"
            f"متبقي قبل الإنذار النهائي: {remaining}"
        )

# =========================
# تشغيل البوت
# =========================

def main():

    app = Application.builder().token(TOKEN).build()

    app.add_handler(
        MessageHandler(
            filters.TEXT & ~filters.COMMAND,
            smart_moderation
        )
    )

    print("✅ Smart Moderation Bot Started")

    app.run_polling()

if __name__ == "__main__":
    main()