Достать telegram сессию из .json и .session и на выходе получить ссылку на веб. приложение

Перерыл весь интернет, не получается найти ответ на свой вопрос. Для doc'и телетона слишком зеленый. Вообщем суть в том что на вход мы получаем .json и .session сессию телеграма, а на выходе должны получить ссылку с возможностю авторизации через веб версию

import json
from telethon import TelegramClient
from telethon.sessions import StringSession
from urllib.parse import urlencode

def extract_session_data(session_file_path):
    with open(session_file_path, 'rb') as file:
        session_data = file.read()
    
    # Конвертируем данные сессии в строку (в hex формате)
    session = session_data.hex()
    
    return session

def generate_telegram_web_app_link(api_json_path, session_file_path):
    # Загрузка данных из api.json
    with open(api_json_path, 'r', encoding='utf-8') as api_file:
        api_data = json.load(api_file)
    
    api_id = api_data.get('api_id')
    api_hash = api_data.get('api_hash')
    device_model = api_data.get('device_model')
    system_version = api_data.get('system_version')
    app_version = api_data.get('app_version')
    system_lang_code = api_data.get('system_lang_code')
    lang_code = api_data.get('lang_code')
    lang_pack = api_data.get('lang_pack')
    
    # Извлечение строки сессии
    session_string = extract_session_data(session_file_path)

    # Формирование параметров для ссылки на Telegram Web App
    params = {
        'api_id': api_id,
        'api_hash': api_hash,
        'device_model': device_model,
        'system_version': system_version,
        'app_version': app_version,
        'system_lang_code': system_lang_code,
        'lang_code': lang_code,
        'lang_pack': lang_pack,
        'session': session_string
    }

    # Генерация ссылки
    base_url = 'https://telegram.blum.codes/login'
    link = f'{base_url}?{urlencode(params)}'

    return link

def authorize_and_save_session(api_json_path, session_file_path):
    # Загрузка данных из api.json
    with open(api_json_path, 'r', encoding='utf-8') as api_file:
        api_data = json.load(api_file)

    api_id = api_data.get('api_id')
    api_hash = api_data.get('api_hash')

    # Инициализация клиента Telethon
    client = TelegramClient(
        "session",
        api_id=api_data['api_id'],
        api_hash=api_data['api_hash'],
        device_model=api_data['device_model'],
        system_version=api_data['system_version'],
        app_version=api_data['app_version'],
        system_lang_code=api_data['system_lang_code'],
        lang_code=api_data['lang_code']
    )

    try:
        # Авторизация клиента
        client.start()

        # Сохранение сессии в файл
        session = client.session.save()
        if session:
            with open(session_file_path, 'w', encoding='utf-8') as session_file:
                session_file.write(session)
            print(f"Сессия сохранена в {session_file_path}")
        else:
            print("Не удалось сохранить сессию.")
        
    except KeyboardInterrupt:
        print("\nПроцесс был прерван пользователем.")
    except Exception as e:
        print(f"Произошла ошибка при авторизации: {e}")
    finally:
        client.disconnect()

    return client

# Укажите правильные пути к вашим файлам
api_json_path = r'C:\Users\egor2\OneDrive\Рабочий стол\zadacha133iq\api.json'
session_file_path = r'C:\Users\egor2\OneDrive\Рабочий стол\zadacha133iq\session.session'

# Авторизация и сохранение сессии
client = authorize_and_save_session(api_json_path, session_file_path)

# Генерация ссылки для авторизации через Telegram Web App
if client and client.is_user_authorized():
    telegram_web_app_link = generate_telegram_web_app_link(api_json_path, session_file_path)
    print(f'Ссылка для авторизации через Telegram Web App: {telegram_web_app_link}')
else:
    print("Клиент не был авторизован.")

# Закрытие клиента
if client:
    client.disconnect()

Подскажите, что тут можно добавить, а что лишнее, заранее спасибо!


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