#!/usr/bin/env python3
import os
import sys
import asyncio
import random
import time
from datetime import datetime
from telethon import TelegramClient, events
from telethon.tl.functions.messages import DeleteHistoryRequest
from telethon.tl.functions.contacts import BlockRequest, UnblockRequest
from telethon.network.connection.tcpabridged import ConnectionTcpAbridged

# ============ تنظیمات ============
API_ID = 37520403
API_HASH = "9c1f51b4decd44631a2dd28889e55e2f"
SESSION_FILE = "session.session"

# تنظیمات پروکسی (اگه نیاز داری)
# PROXY = {
#     "proxy_type": "socks5",  # یا "http"
#     "addr": "127.0.0.1",
#     "port": 1080,
#     "username": None,
#     "password": None
# }

EMOJIS = ["🔥", "❤️", "💕", "😍", "😂", "🤣", "😘", "🥰", "😊", "🤗", "💖", "💗", "💓", "💝", "💘", "💌", "🌸", "🌺", "🌹", "🌷", "⭐", "🌟", "✨", "💫", "🌈", "🎉", "🎊", "🎈", "🎁", "🎀"]

LOVE_MESSAGES = [
    "❤️ عاشقتم گل خودم 😘",
    "🌹 تو بهترینی که تو زندگیم داشتم 😍",
    "💕 دلم برات تنگ شده بود عزیزم 😘",
    "🌸 با تو بودن یعنی همه چیز ❤️",
    "😍 عشق منی نمیدونی چقدر دوست دارم",
    "💖 تو نوری که به قلبم میتابه 🌟",
    "🌺 همیشه با تو بودن آرزومه 😘",
    "💘 فقط تو هستی که میارزیم بهش",
    "🌹 هر روز با تو زیباتره عشق من",
    "❤️ دوستت دارم بیشتر از کلمات"
]

def main():
    loop = asyncio.new_event_loop()
    asyncio.set_event_loop(loop)
    try:
        loop.run_until_complete(async_main())
    except Exception as e:
        print("❌ خطا: {}".format(e))
    finally:
        loop.close()

async def async_main():
    print("=" * 70)
    print("🤖 ربات هوشمند تلگرام")
    print("=" * 70)
    
    # حذف جلسه قبلی در صورت وجود
    if os.path.exists(SESSION_FILE):
        try:
            os.remove(SESSION_FILE)
            print("🗑️ جلسه قبلی پاک شد")
        except:
            pass
    
    # ورود جدید
    print("\n📱 برای ورود به تلگرام:")
    phone = input("شماره تلفن (با کد کشور مثل +989123456789): ").strip()
    
    if not phone.startswith('+'):
        print("❌ شماره باید با + شروع شود!")
        return
    
    try:
        # ایجاد کلاینت با تنظیمات اتصال بهتر
        client = TelegramClient(
            SESSION_FILE, 
            API_ID, 
            API_HASH,
            connection=ConnectionTcpAbridged,
            connection_retries=5,
            retry_delay=1,
            auto_reconnect=True,
            flood_sleep_threshold=60
        )
        
        print("⏳ در حال اتصال به تلگرام...")
        await client.connect()
        
        print("⏳ در حال ارسال کد تایید به شماره {}...".format(phone))
        result = await client.send_code_request(phone)
        phone_code_hash = result.phone_code_hash
        print("✅ کد تایید ارسال شد! لطفاً تلگرام خود را چک کنید.")
        
        code = input("🔑 کد 5 رقمی را وارد کنید: ").strip()
        
        await client.sign_in(phone, code, phone_code_hash=phone_code_hash)
        
        me = await client.get_me()
        print("\n✅ ورود موفق!")
        print("👤 نام: {}".format(me.first_name))
        print("📱 شماره: {}".format(me.phone))
        
        await run_bot(client, me)
        
    except Exception as e:
        print("❌ خطا: {}".format(e))

async def run_bot(client, me):
    my_name = me.first_name or me.username or "کاربر"
    bot_active = True
    crash_count = 0
    name_update_time = 0
    
    def show_panel():
        return """
╔══════════════════════════════════════════════════════════╗
║                    📋 پنل قابلیت‌ها                      ║
╠══════════════════════════════════════════════════════════╣
║ 1️⃣ تایم دقیق کنار اسم     → خودکار فعال               ║
║ 2️⃣ بولد کردن پیام‌ها      → خودکار فعال               ║
║ 3️⃣ اسپم با شکلک           → اسپم 10 یا اسپم 5 ❤️      ║
║ 4️⃣ ریپلای عاشقانه         → خودکار فعال               ║
║ 5️⃣ دیلیت چت               → نوشتن "دیلیت چت"          ║
║ 6️⃣ بلاک کاربر             → نوشتن "بلاک"              ║
║ 7️⃣ آنبلاک کاربر           → نوشتن "آنبلاک"            ║
║ 8️⃣ پنل قابلیت‌ها          → نوشتن "پنل"               ║
╚══════════════════════════════════════════════════════════╝
"""
    
    print("\n🔄 ربات در حال اجراست...")
    print(show_panel())
    print("⏹ برای متوقف کردن CTRL+C بزن")
    print("=" * 70)
    
    @client.on(events.NewMessage(outgoing=True))
    async def message_handler(event):
        nonlocal bot_active, crash_count, name_update_time, my_name
        
        try:
            if not bot_active:
                return
            if not event.message.text:
                return
            
            text = event.message.text
            
            # پنل
            if text == "پنل" or text == "panel":
                await event.message.edit(show_panel())
                return
            
            # دیلیت چت
            if text == "دیلیت چت" or text == "حذف چت":
                if event.is_private:
                    await event.message.delete()
                    await client(DeleteHistoryRequest(
                        peer=event.chat_id,
                        max_id=0,
                        just_clear=False,
                        revoke=True
                    ))
                    print("🗑️ کل چت با کاربر حذف شد")
                    await client.send_message(event.chat_id, "🗑️ کل چت پاک شد!")
                return
            
            # بلاک
            if text == "بلاک" or text == "block":
                if event.is_private:
                    await event.message.delete()
                    await client(BlockRequest(id=event.chat_id))
                    print("🚫 کاربر بلاک شد: {}".format(event.chat_id))
                    await client.send_message(event.chat_id, "🚫 شما بلاک شدید!")
                return
            
            # آنبلاک
            if text == "آنبلاک" or text == "unblock":
                if event.is_private:
                    await event.message.delete()
                    await client(UnblockRequest(id=event.chat_id))
                    print("✅ کاربر آنبلاک شد: {}".format(event.chat_id))
                    await client.send_message(event.chat_id, "✅ شما آنبلاک شدید!")
                return
            
            # اسپم
            if text.startswith('اسپم '):
                parts = text.split(' ', 2)
                if len(parts) >= 2:
                    try:
                        count = int(parts[1])
                        await event.message.delete()
                        if len(parts) > 2:
                            emoji = parts[2]
                            for i in range(count):
                                await client.send_message(event.chat_id, emoji)
                                await asyncio.sleep(0.3)
                        else:
                            for i in range(count):
                                emoji = random.choice(EMOJIS)
                                await client.send_message(event.chat_id, emoji)
                                await asyncio.sleep(0.3)
                        print("✅ اسپم {} تایی ارسال شد".format(count))
                        return
                    except:
                        pass
            
            # ریپلای عاشقانه
            if event.message.is_reply:
                crash_count += 1
                love_msg = random.choice(LOVE_MESSAGES)
                await client.send_message(event.chat_id, love_msg)
                print("💕 پیام عاشقانه ارسال شد (تعداد: {})".format(crash_count))
                return
            
            # بولد کردن
            if text.startswith('**') and text.endswith('**'):
                return
            if text.startswith('/'):
                return
            
            new_text = "**{}**".format(text)
            await event.message.edit(new_text, parse_mode='markdown')
            
            # به‌روزرسانی اسم با تایم
            current_time = time.time()
            if current_time - name_update_time > 10:
                try:
                    time_str = datetime.now().strftime("%H:%M:%S")
                    clean_name = my_name
                    if len(clean_name) > 8 and clean_name[0:2].isdigit() and clean_name[2:3] == ':':
                        parts = clean_name.split(' ', 1)
                        if len(parts) > 1:
                            clean_name = parts[1]
                    new_name = "{} {}".format(time_str, clean_name)
                    await client.edit_profile(first_name=new_name)
                    my_name = new_name
                    name_update_time = current_time
                    print("✅ اسم اکانت تغییر کرد: {}".format(new_name))
                except:
                    pass
            
        except Exception as e:
            print("خطا: {}".format(e))
    
    try:
        await client.run_until_disconnected()
    except Exception as e:
        print("❌ خطا در اجرا: {}".format(e))

if __name__ == "__main__":
    try:
        main()
    except KeyboardInterrupt:
        print("\n👋 خداحافظ!")
    except Exception as e:
        print("❌ خطا: {}".format(e))