Достать 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()
Подскажите, что тут можно добавить, а что лишнее, заранее спасибо!