Почему не авторизуется в сессии телеграм?

Пытаюсь сделать юзербота на базе сессий купленных. Новых ни одна не авторизуется, просит номер телефона. Где я ошибся?

import json
import asyncio
from pyrogram import Client
from pyrogram.errors import Unauthorized, SessionPasswordNeeded

# Папка с сессиями
SESSION_FOLDER = "session"

def get_sessions():
    """ Получает список всех доступных сессий в папке session/ """
    sessions = []
    for folder in os.listdir(SESSION_FOLDER):
        folder_path = os.path.join(SESSION_FOLDER, folder)
        if os.path.isdir(folder_path):
            session_file = os.path.join(folder_path, f"{folder}.session")
            json_file = os.path.join(folder_path, f"{folder}.json")
            if os.path.exists(session_file) and os.path.exists(json_file):
                sessions.append(folder)
    return sessions

async def check_session(phone_number):
    """ Проверяет валидность Telegram-сессии и вводит 2FA, если нужно. """
    session_path = os.path.join(SESSION_FOLDER, phone_number)
    json_file = os.path.join(session_path, f"{phone_number}.json")
    session_file = os.path.join(session_path, f"{phone_number}.session")

    # Загружаем данные из JSON
    try:
        with open(json_file, "r", encoding="utf-8") as f:
            data = json.load(f)
    except json.JSONDecodeError:
        print(f"❌ Ошибка чтения JSON {json_file}! Проверьте формат.")
        return

    api_id = data.get("app_id")
    api_hash = data.get("app_hash")
    password_2fa = data.get("twoFA", None)

    if not api_id or not api_hash:
        print(f"⚠️ В JSON {json_file} отсутствует app_id или app_hash!")
        return

    # Подключаемся через Pyrogram
    try:
        async with Client(
            name=session_file,
            api_id=api_id,
            api_hash=api_hash,
            device_model=data.get("device", "Unknown Device"),
            app_version=data.get("app_version", "Unknown Version"),
            system_version=data.get("sdk", "Unknown SDK"),
            lang_code=data.get("lang_code", "en")
        ) as app:
            me = await app.get_me()
            print(f"\n✅ Сессия {phone_number} валидна!")
            print(f"? ID: {me.id}")
            print(f"? Имя: {me.first_name} {me.last_name or ''}")
            print(f"? Username: @{me.username}" if me.username else "? Username: отсутствует")
            print(f"? Номер телефона: {me.phone_number}")
            print(f"? Premium: {'Да' if me.is_premium else 'Нет'}")

    except SessionPasswordNeeded:
        if password_2fa:
            try:
                async with Client(
                    name=session_file,
                    api_id=api_id,
                    api_hash=api_hash
                ) as app:
                    await app.check_password(password_2fa)
                    me = await app.get_me()
                    print(f"\n✅ Сессия {phone_number} успешно вошла после 2FA!")
            except Exception as e:
                print(f"❌ Ошибка при вводе 2FA для {phone_number}: {e}")
        else:
            print(f"❌ Требуется ввод 2FA для {phone_number}, но пароль отсутствует в JSON!")

    except Unauthorized:
        print(f"❌ Сессия {phone_number} недействительна! Требуется повторная авторизация.")
    except Exception as e:
        print(f"❌ Ошибка при проверке {phone_number}: {e}")

async def main():
    """ Главное меню выбора сессии и проверка. """
    while True:
        os.system('cls' if os.name == 'nt' else 'clear')
        print("? Выберите сессию для проверки:\n")
        sessions = get_sessions()

        if not sessions:
            print("⚠️ Нет доступных сессий! Добавьте их в папку session/")
            break

        for i, session in enumerate(sessions):
            print(f"[{i}] {session}")

        print("\n[e] Выход")

        choice = input("\nВведите номер сессии: ")

        if choice.lower() == 'e':
            break

        try:
            session_index = int(choice)
            if session_index < 0 or session_index >= len(sessions):
                print("❌ Неверный номер! Попробуйте снова.")
                continue

            await check_session(sessions[session_index])

        except ValueError:
            print("❌ Введите число или 'e' для выхода!")

if __name__ == "__main__":
    asyncio.run(main())

Ответы (1 шт):

Автор решения: Seffel

В первую очередь попробуйте авторизоваться со своего аккаунта и посмотреть как и куда сохраняется файл сессии. Вполне вероятно что есть ошибка при её считывании. Так же немного покопал код и нашёл странность в функции: get_sessions(), а именно в именах файлов. Функция читает имена файлов правильно, но потом дописывает туда ещё данные и на выходе получается путь: session/z.session.session Эта функция в целом криво устроена, ибо я как понимаю у вас сессия в 2-х файлах .session и .json, а цикл прогоняете по всем файлам папки, как следствие, вы дважды проверяете одну и туже сессию. Так же нет импорта: OS

Я бы предложил следующую реализацию:

import os    
def get_sessions():
        sessions = []
        for folder in os.listdir(SESSION_FOLDER):
            if folder.endswith('.session'):
                folder = folder.split('.')[0]
                session_file = os.path.join(SESSION_FOLDER, f"{folder}.session")
                json_file = os.path.join(SESSION_FOLDER, f"{folder}.json")
                if os.path.isfile(session_file) and os.path.isfile(session_file):
                    sessions.append(folder)
        return sessions

А так же корректировка в функции: check_session

Вместо:

async def check_session(phone_number):
    """ Проверяет валидность Telegram-сессии и вводит 2FA, если нужно. """
    session_path = os.path.join(SESSION_FOLDER, phone_number)
    json_file = os.path.join(session_path, f"{phone_number}.json")
    session_file = os.path.join(session_path, f"{phone_number}.session")

Это:

async def check_session(phone_number):
    """ Проверяет валидность Telegram-сессии и вводит 2FA, если нужно. """
    json_file = os.path.join(SESSION_FOLDER, f"{phone_number}.json")
    session_file = os.path.join(SESSION_FOLDER, f"{phone_number}.session")

Подставил свою сессию, сгенерировал JSON и сессию прочитало, думаю и вам поможет

→ Ссылка