import telebot
from telethon import TelegramClient
from telethon.errors import SessionPasswordNeededError
import os
import asyncio

BOT_TOKEN = '8636739829:AAE9kLyXbezhdomkpoDpGKKTj2PRwp-m-ug'
API_ID = 24785156
API_HASH = '83275a80c858dea2637cabdc83f98fde'

bot = telebot.TeleBot(BOT_TOKEN)
user_data = {}

@bot.message_handler(commands=['start'])
def send_welcome(message):
    bot.reply_to(message, "سلام! لطفا شماره تلفنی که می‌خواهید سشن کنید را با فرمت بین‌المللی ارسال کنید.\nمثال: +989123456789")
    bot.register_next_step_handler(message, get_phone)

def get_phone(message):
    phone = message.text.strip().replace(" ", "")
    chat_id = message.chat.id
    
    bot.reply_to(message, "در حال درخواست کد از تلگرام... لطفا صبر کنید.")
    
    session_name = f"session_{chat_id}"
    client = TelegramClient(session_name, API_ID, API_HASH)
    
    loop = asyncio.new_event_loop()
    asyncio.set_event_loop(loop)
    
    try:
        loop.run_until_complete(client.connect())
        send_code_req = loop.run_until_complete(client.send_code_request(phone))
        phone_code_hash = send_code_req.phone_code_hash
        
        user_data[chat_id] = {
            'client': client,
            'phone': phone,
            'phone_code_hash': phone_code_hash,
            'loop': loop
        }
        
        bot.reply_to(message, "کد تایید تلگرام ارسال شد. لطفا کد را بفرستید:")
        bot.register_next_step_handler(message, get_code)
        
    except Exception as e:
        bot.reply_to(message, f"خطایی رخ داد: {str(e)}")
        loop.run_until_complete(client.disconnect())

def get_code(message):
    chat_id = message.chat.id
    code = message.text.strip()
    
    if chat_id not in user_data:
        bot.reply_to(message, "خطایی رخ داده، لطفا دوباره با /start شروع کنید.")
        return

    data = user_data[chat_id]
    client = data['client']
    phone = data['phone']
    phone_code_hash = data['phone_code_hash']
    loop = data['loop']
    
    try:
        loop.run_until_complete(client.sign_in(phone, code, phone_code_hash=phone_code_hash))
        bot.reply_to(message, f"موفقیت‌آمیز بود! سشن برای شماره {phone} ساخته و در هاست ذخیره شد.")
        
    except SessionPasswordNeededError:
        bot.reply_to(message, "این اکانت رمز دو مرحله‌ای دارد. لطفا رمز خود را ارسال کنید:")
        bot.register_next_step_handler(message, get_password)
        return
    except Exception as e:
        bot.reply_to(message, f"خطا در تایید کد: {str(e)}")
    
    loop.run_until_complete(client.disconnect())
    del user_data[chat_id]

def get_password(message):
    chat_id = message.chat.id
    password = message.text.strip()
    
    data = user_data[chat_id]
    client = data['client']
    loop = data['loop']
    
    try:
        loop.run_until_complete(client.sign_in(password=password))
        bot.reply_to(message, "رمز دو مرحله‌ای تایید شد! سشن با موفقیت ذخیره شد.")
    except Exception as e:
        bot.reply_to(message, f"خطا در تایید رمز: {str(e)}")
        
    loop.run_until_complete(client.disconnect())
    del user_data[chat_id]

if __name__ == '__main__':
    bot.infinity_polling()
