Задать вопрос

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

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

import os

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())
  • Вопрос задан
  • 98 просмотров
Подписаться 2 Простой Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы