#!/usr/bin/env python3
import os
import asyncio
import random
import time
import json
from datetime import datetime
from telethon import TelegramClient, events
from telethon.tl.functions.account import UpdateProfileRequest

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

# لیست شکلک‌های جذاب
EMOJIS = [
    "🔥", "❤️", "💕", "😍", "😂", "🤣", "😘", "🥰", "😊", "🤗",
    "💖", "💗", "💓", "💝", "💘", "💌", "🌸", "🌺", "🌹", "🌷",
    "⭐", "🌟", "✨", "💫", "🌈", "🎉", "🎊", "🎈", "🎁", "🎀",
    "💎", "👑", "💍", "💋", "🦋", "🐱", "🐶", "😎", "🤩", "🥳",
    "👻", "💀", "☠️", "👽", "🤖", "🎃", "🍕", "🍔", "🌮", "🍣"
]

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

# بیوگرافی‌های خفن
BIO = [
    "🌊 آرامش درون، قدرت بیرون 🚀",
    "💫 رویاها را بساز، نه منتظر بمان 🌟",
    "🔥 زندگی کوتاه است، بزرگ زندگی کن 💪",
    "🌹 با عشق، هر روز زیباتر است ❤️",
    "💎 ارزش تو، با خودت شروع میشود ✨",
    "🚀 به آسمان برس، حتی با بال های شکسته 🌈",
    "💪 قدرتمند باش، چون هیچ کس برایت نمی‌جنگد 🔥",
    "🌟 همیشه نور باش، حتی در تاریکی 🌙",
    "🌺 زندگی مثل باغ است، خودت گل هایش را بکار 🌷",
    "💖 عشق به خود، اولین قدم برای عشق به جهان است 🌍"
]

# فونت‌های اسم
FONTS = {
    "1": "ᴀʀᴛɪsᴛɪᴄ",
    "2": "🅲🅾🅾🅻",
    "3": "𝔹𝕖𝕒𝕦𝕥𝕚𝕗𝕦𝕝",
    "4": "𝐒𝐭𝐲𝐥𝐢𝐬𝐡",
    "5": "ɢʟᴀᴍᴏʀᴏᴜs",
    "6": "𝓢𝓮𝔁𝔂",
    "7": "𝕊𝕨𝕒𝕘",
    "8": "🄴🄻🄴🄶🄰🄽🅃",
    "9": "ᴠɪʙʀᴀɴᴛ",
    "10": "ℂ𝕙𝕒𝕣𝕞𝕚𝕟𝕘"
}

# ============ فایل ذخیره عکس‌ها ============
def load_json(file):
    if os.path.exists(file):
        with open(file, 'r') as f:
            return json.load(f)
    return []

def save_json(file, data):
    with open(file, 'w') as f:
        json.dump(data, f, indent=2, ensure_ascii=False)

# ============ کلاینت اصلی ============
class SmartBot:
    def __init__(self):
        self.client = None
        self.is_ready = False
        self.is_running = True
        self.my_name = ""
        self.saved_photos = load_json("saved_photos.json")
        self.love_targets = {}  # ذخیره افرادی که عاشقانه دریافت میکنند
        self.loop = asyncio.new_event_loop()
        asyncio.set_event_loop(self.loop)
        
    def start_login(self, phone, code=None):
        try:
            self.client = TelegramClient(SESSION_FILE, API_ID, API_HASH)
            future = asyncio.run_coroutine_threadsafe(
                self._login_async(phone, code), 
                self.loop
            )
            return future.result()
        except Exception as e:
            return {"status": "error", "message": str(e)}
    
    async def _login_async(self, phone, code=None):
        await self.client.connect()
        if code:
            await self.client.sign_in(phone, code)
            self.is_ready = True
            return {"status": "success"}
        else:
            result = await self.client.send_code_request(phone)
            return {"status": "need_code"}
    
    async def update_bio(self):
        try:
            bio = random.choice(BIO)
            await self.client(UpdateProfileRequest(about=bio))
            print(f"✅ بیوگرافی تغییر کرد: {bio[:30]}...")
            return True
        except Exception as e:
            print(f"خطا در تغییر بیو: {e}")
            return False
    
    async def change_font(self, font_number):
        """تغییر فونت اسم"""
        try:
            if font_number in FONTS:
                font_style = FONTS[font_number]
                clean_name = self.my_name
                if len(clean_name) > 5 and clean_name[0:2].isdigit() and clean_name[2:3] == ':':
                    clean_name = clean_name[6:].strip()
                new_name = f"{font_style} {clean_name}"
                await self.client.edit_profile(first_name=new_name)
                self.my_name = new_name
                return True
            return False
        except Exception as e:
            print(f"خطا در تغییر فونت: {e}")
            return False
    
    async def run_bot(self):
        if not self.is_ready:
            return {"status": "error", "message": "وارد نشده‌اید"}
        
        me = await self.client.get_me()
        self.my_name = me.first_name or me.username or "کاربر"
        
        print(f"\n✅ وارد شدید: {me.first_name}")
        print(f"📱 شماره: {me.phone}")
        print("\n" + "=" * 60)
        print("🤖 ربات هوشمند تلگرام")
        print("📌 قابلیت‌ها:")
        print("   • اسپم شکلک با هر تعداد")
        print("   • پیام عاشقانه به ریپلای‌ها")
        print("   • ذخیره خودکار عکس‌های پیوی")
        print("   • تغییر بیوگرافی خفن")
        print("   • تغییر فونت اسم (پنل)")
        print("   • تایم کنار اسم")
        print("=" * 60)
        print("💡 دستورات:")
        print("   • اسپم 10 → ۱۰ تا شکلک تصادفی")
        print("   • اسپم 5 ❤️ → ۵ تا ❤️")
        print("   • عشق → فعال کردن پیام عاشقانه به ریپلای")
        print("   • بیو → تغییر بیوگرافی")
        print("   • پنل → نمایش فونت‌های اسم")
        print("   • پنل 3 → تغییر فونت به شماره 3")
        print("⏹ برای متوقف کردن CTRL+C بزن")
        print("=" * 60)
        
        # ====== هندلر عکس تایم‌دار ======
        @self.client.on(events.NewMessage(incoming=True))
        async def photo_handler(event):
            try:
                if not event.is_private:
                    return
                if event.message.photo:
                    path = await event.message.download_media()
                    if path:
                        self.saved_photos.append({
                            "time": datetime.now().strftime("%Y-%m-%d %H:%M:%S"),
                            "from": event.sender_id,
                            "path": path
                        })
                        save_json("saved_photos.json", self.saved_photos)
                        print(f"📸 عکس تایم‌دار ذخیره شد: {path}")
            except Exception as e:
                print(f"خطا در ذخیره عکس: {e}")
        
        # ====== هندلر پیام‌های خروجی ======
        @self.client.on(events.NewMessage(outgoing=True))
        async def message_handler(event):
            try:
                if not event.message.text:
                    return
                
                text = event.message.text
                
                # ====== تغییر بیوگرافی ======
                if text == "بیو" or text == "bio":
                    await self.update_bio()
                    await event.message.delete()
                    await self.client.send_message(
                        event.chat_id,
                        "✅ بیوگرافی با موفقیت تغییر کرد! 🌟"
                    )
                    return
                
                # ====== نمایش پنل فونت ======
                if text == "پنل" or text == "font":
                    panel = "📋 **پنل فونت‌های اسم**\n\n"
                    for num, font in FONTS.items():
                        panel += f"🔹 **{num}** - `{font}`\n"
                    panel += "\n📌 برای تغییر: `پنل [شماره]`\nمثال: `پنل 3`"
                    await event.message.edit(panel, parse_mode='markdown')
                    return
                
                # ====== تغییر فونت ======
                if text.startswith('پنل '):
                    parts = text.split(' ')
                    if len(parts) == 2 and parts[1].isdigit():
                        if await self.change_font(parts[1]):
                            await event.message.edit(f"✅ فونت به شماره {parts[1]} تغییر کرد! ✨")
                        else:
                            await event.message.edit("❌ شماره فونت نامعتبر است!")
                    return
                
                # ====== فعال کردن پیام عاشقانه ======
                if text == "عشق" or text == "love":
                    self.love_targets[event.chat_id] = True
                    await event.message.delete()
                    await self.client.send_message(
                        event.chat_id,
                        "💕 حالت عاشقانه فعال شد!\nهر ریپلای = پیام عاشقانه 💘"
                    )
                    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 self.client.send_message(event.chat_id, emoji)
                                    await asyncio.sleep(0.3)
                            else:
                                for i in range(count):
                                    emoji = random.choice(EMOJIS)
                                    await self.client.send_message(event.chat_id, emoji)
                                    await asyncio.sleep(0.3)
                            print(f"✅ اسپم {count} تایی ارسال شد")
                            return
                        except:
                            pass
                
                # ====== پیام عاشقانه به ریپلای ======
                if event.message.is_reply and event.chat_id in self.love_targets:
                    love_msg = random.choice(LOVE_MESSAGES)
                    await self.client.send_message(event.chat_id, love_msg)
                    print(f"💕 پیام عاشقانه ارسال شد")
                    return
                
                # ====== تایم کنار اسم ======
                if not text.startswith('**'):
                    try:
                        time_str = datetime.now().strftime("%H:%M")
                        clean_name = self.my_name
                        if len(clean_name) > 5 and clean_name[0:2].isdigit() and clean_name[2:3] == ':':
                            clean_name = clean_name[6:].strip()
                        # اگر فونت داشت، نگه دار
                        font_part = ""
                        for font in FONTS.values():
                            if clean_name.startswith(font):
                                font_part = font
                                clean_name = clean_name[len(font):].strip()
                                break
                        new_name = f"{time_str} {font_part} {clean_name}".strip()
                        await self.client.edit_profile(first_name=new_name)
                        self.my_name = new_name
                    except:
                        pass
                
            except Exception as e:
                print(f"خطا: {e}")
        
        await self.client.run_until_disconnected()
        return {"status": "success"}

# ============ اجرا ============
def main():
    bot = SmartBot()
    
    print("=" * 60)
    print("🤖 ربات هوشمند تلگرام - نسخه کامل")
    print("📌 قابلیت‌ها:")
    print("   • اسپم با شکلک‌های جذاب")
    print("   • پیام عاشقانه به ریپلای‌ها")
    print("   • ذخیره عکس‌های تایم‌دار پیوی")
    print("   • تغییر بیوگرافی خفن")
    print("   • تغییر فونت اسم (پنل)")
    print("   • تایم کنار اسم")
    print("=" * 60)
    
    if os.path.exists(SESSION_FILE):
        try:
            bot.is_ready = True
            bot.client = TelegramClient(SESSION_FILE, API_ID, API_HASH)
            
            future = asyncio.run_coroutine_threadsafe(
                bot.client.connect(), 
                bot.loop
            )
            future.result()
            
            if future.result():
                me = asyncio.run_coroutine_threadsafe(
                    bot.client.get_me(), 
                    bot.loop
                ).result()
                
                print(f"\n✅ وارد شدید: {me.first_name}")
                print(f"📱 شماره: {me.phone}")
                
                asyncio.run_coroutine_threadsafe(
                    bot.run_bot(), 
                    bot.loop
                ).result()
                return
        except:
            pass
    
    phone = input("\n📱 شماره تلفن (با کد کشور): ")
    
    result = bot.start_login(phone)
    
    if result.get("status") == "need_code":
        code = input("🔑 کد تایید: ")
        result2 = bot.start_login(phone, code)
        
        if result2.get("status") == "success":
            asyncio.run_coroutine_threadsafe(
                bot.run_bot(), 
                bot.loop
            ).result()
        else:
            print(f"❌ {result2.get('message')}")
    
    elif result.get("status") == "error":
        print(f"❌ {result.get('message')}")

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