@andrew053

Авторизация телеграм через session string?

мне нужно чтобы при запуске софта все session string которые там загружены, автоматически запускались в сессию, но по факту что я имею это ошибка о том что нельзя авторизоваться в данную сессию, вот сам скрипт запуска сессий
accounts = {}
accounts_file = 'accounts.json'


async def start_all_accounts():
    for phone in accounts:
        session_string = accounts[phone]['session_string']
        api_id = accounts[phone]['api_id']
        api_hash = accounts[phone]['api_hash']
        proxy = accounts[phone].get('proxy', None)

        client = TelegramClient(StringSession(session_string), api_id, api_hash, proxy=proxy)

        try:
            await client.connect()
            if not await client.is_user_authorized():
                print("Is user authorized? ", await client.is_user_authorized())  # Новая строка
                print(f"Session file {session_string} found for {phone}. But not authorized. Skipping.")
                continue
            else:
                print(f"Session file {session_string} found for {phone}. Authorized. Starting client...")
                await client.start(phone=phone)
        except Exception as e:
            print(f"Error starting client for {phone}: {e}")

if os.path.exists(accounts_file):
    with open(accounts_file, 'r') as f:
        accounts = json.load(f)
else:
    accounts = {}
    with open(accounts_file, 'w') as f:
        json.dump(accounts, f)

asyncio.run(start_all_accounts())


Все аккаунты которые должны запускаться, входят в них через мой веб интерфейс, и через эту функцию
async def add_account_async(api_id, api_hash, phone, proxy, code=None, password=None, phone_code_hash=None):
        if not api_id or not api_hash or not phone:
            return None, None

        if proxy:
            host, port = proxy.split(':')
            proxy_server = connection.ConnectionTcpMTProxyRandomizedIntermediate(
                proxy=(host, int(port), "secret")
            )
        else:
            proxy_server = None

        session_string = accounts[phone]['session_string'] if phone in accounts else ""

        string_session = StringSession(session_string)
        client = TelegramClient(string_session, api_id, api_hash, proxy=proxy_server)

        try:
            await client.connect()

            if not client.is_connected():
                print("Не удалось установить соединение")
                return None, None

            if not await client.is_user_authorized():
                if code is not None and password is not None and phone_code_hash is not None:
                    try:
                        await client.sign_in(phone, code, phone_code_hash=phone_code_hash, password=password)
                    except PhoneNumberUnoccupiedError:
                        pass
                    except SessionPasswordNeededError:
                        if not password:
                            return "password_required", None
                        else:
                            try:
                                await client.check_password(password)
                            except Exception as e:
                                print(f"Ошибка проверки пароля сессии: {e}")
                                return None, None
                            await client.sign_in(password=password)
                    except PhoneCodeInvalidError:
                        print("Invalid code entered. Please try again.")
                        return "invalid_code", phone_code_hash
                    except PhoneCodeExpiredError:
                        pass  # Здесь не нужно отправлять новый код, так как мы уже отправили его раньше
                else:
                    if phone_code_hash is None:
                        result = await client.send_code_request(phone)
                        return "code_required", result.phone_code_hash
                    else:
                        try:
                            await client.sign_in(phone, code, phone_code_hash=phone_code_hash)
                        except PhoneCodeInvalidError:
                            print("Invalid code entered. Please try again.")
                            return "invalid_code", phone_code_hash

            session_string = client.session.save()

            print("Авторизация успешна")
            save_account(phone, api_id, api_hash, session_string, proxy)
        finally:
            await client.disconnect()

        result = "success"
        if code is not None and password is not None and phone_code_hash is not None:
            result = None

        return result, phone_code_hash

Тоесть мне пишет что все, авторизация успешна, все прошло удачно, а по факту после перезахода, я не могу запустить эти сессии, и мне нужно заново перезаходить вводя код и пароль, а по факту есть же session string
  • Вопрос задан
  • 785 просмотров
Пригласить эксперта
Ваш ответ на вопрос

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

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