Export Telegram Desktop tdata sessions to Telethon string sessions
Project description
Telegram tdata Session Exporter
This library provides functionality for authenticating with Telegram using:
- JSON+.session bundle (new)
- Telegram Desktop
tdatafolder
Features
- Extract session data from Telegram Desktop's
tdatafolder - Convert tdata to Telethon session string
- Simple async interface
Requirements
- Python 3.10+
- Telethon
- opentele
- python-dotenv
- PySocks (для проверки прокси)
⚠️ ВАЖНО: Обязательное использование прокси
Библиотека работает ТОЛЬКО через прокси! Без настроенного прокси работа невозможна.
Настройка прокси через переменные окружения
Создайте файл .env в корне вашего проекта и укажите прокси в одной строке:
PROXIES=proxy.example.com:8080:user:pass
Поддерживаемые форматы:
-
С авторизацией (socks5 по умолчанию):
PROXIES=host:port:username:password
Пример:
PROXIES=proxy.example.com:8080:user:pass -
Без авторизации (socks5 по умолчанию):
PROXIES=host:port
Пример:
PROXIES=proxy.example.com:1080 -
С указанием типа прокси:
PROXIES=type:host:port:username:password
Примеры:
- SOCKS5:
PROXIES=socks5:proxy.example.com:1080:user:pass - HTTP:
PROXIES=http:proxy.example.com:8080:user:pass
- SOCKS5:
Поддерживаемые типы прокси:
socks5(по умолчанию) - SOCKS5 проксиsocks4- SOCKS4 проксиhttp- HTTP проксиhttps- HTTPS прокси
Примечание: Библиотека автоматически конвертирует формат прокси для корректной работы с Telethon. Все типы прокси работают правильно!
Проверка прокси
Библиотека автоматически проверяет:
- ✅ Наличие переменной окружения
PROXIES - ✅ Корректность формата прокси
- ✅ Валидность типа прокси
- ✅ Реальную работоспособность прокси - устанавливает соединение через прокси к серверам Telegram
- ✅ Правильность авторизации - проверяет username и password на прокси-сервере
Важно: Проверка не просто пингует порт, а реально подключается через SOCKS5/HTTP прокси с авторизацией!
Возможные ошибки
❌ ПРОКСИ ОБЯЗАТЕЛЕН!- не указана переменная окруженияPROXIES❌ Неверный формат PROXIES- неправильный формат строки прокси❌ Неверный тип прокси- указан неподдерживаемый тип прокси❌ Ошибка авторизации на прокси- неправильный username или password❌ Ошибка подключения к прокси- прокси-сервер недоступен или отклонил соединение❌ Ошибка работы прокси- прокси не смог установить соединение через себя❌ Превышено время ожидания подключения к прокси- прокси не отвечает или работает слишком медленно
Если возникают ошибки с прокси - библиотека не запустится и выдаст соответствующее сообщение об ошибке.
Installation
Install from PyPI (package name: tdata-session-exporter):
pip install tdata-session-exporter
Или напрямую из git (dev-версия из main):
pip install git+https://github.com/stufently/session-auth-lib.git
Release process (maintainers)
Релиз полностью автоматический: бампни project.version в pyproject.toml и
запушь в main. Workflow autotag.yml проверит, что этой версии ещё нет на
PyPI, создаст тег v<version> и запустит publish.yml (тест → сборка →
загрузка на PyPI через Trusted Publishing, без API-токенов).
🚀 Quick Start
-
Установите библиотеку:
pip install tdata-session-exporter
-
Создайте файл
.envс настройками прокси:Для SOCKS5 (по умолчанию):
PROXIES=proxy.example.com:8080:user:pass
Для HTTP прокси:
PROXIES=http:proxy.example.com:8080:user:pass
-
Используйте в коде:
from tdata_session_exporter import authorize_client from dotenv import load_dotenv import asyncio load_dotenv() async def main(): try: client = await authorize_client("tdata") if client: me = await client.me print(f"✅ Подключен как: {me.first_name}") except Exception as e: print(f"❌ Ошибка: {e}") asyncio.run(main())
Готово! Библиотека автоматически проверит прокси и подключится к Telegram.
Export bundle from tdata (JSON + .session)
⚠️ ВАЖНО: Для экспорта также требуется настроенный прокси!
Python API (auto path, default output under project root):
from tdata_session_exporter.auth import export_bundle_from_tdata_auto
from dotenv import load_dotenv
# Загружаем переменные окружения (включая прокси)
load_dotenv()
try:
# Сохранит в ./accounts/<basename>/<basename>.json и .session
# Автоматически проверит прокси перед началом работы
ok = export_bundle_from_tdata_auto(
tdata_path="/abs/path/to/+2349049675164/tdata",
# out_base_dir="/abs/path/to/project/accounts", # опционально, по умолчанию ./accounts
# api_id=2040, api_hash="b18441a1ff607e10a989891a5462e627", # опционально, по умолчанию Desktop ключи
)
print("✅ Экспорт успешен!" if ok else "❌ Экспорт не удался")
except (ValueError, ConnectionError) as e:
print(f"❌ Ошибка: {e}")
Python API (explicit out dir and basename):
from tdata_session_exporter.auth import export_bundle_from_tdata_sync
from dotenv import load_dotenv
# Загружаем переменные окружения (включая прокси)
load_dotenv()
try:
ok = export_bundle_from_tdata_sync(
tdata_path="/abs/path/to/tdata",
out_dir="/abs/path/to/out",
basename="+2349049675164", # имя файлов без расширения
# api_id=2040, api_hash="b18441a1ff607e10a989891a5462e627", # можно не указывать: стоят по умолчанию
)
print("✅ Экспорт успешен!" if ok else "❌ Экспорт не удался")
except (ValueError, ConnectionError) as e:
print(f"❌ Ошибка: {e}")
Usage
Auth priority
- Bundle
JSON + .session(envBUNDLE_JSON_PATHor auto-search in./accounts) tdatafolder
Preparing tdata folder
- Create a
tdatasfolder in your project root - Copy your Telegram Desktop's
tdatafolder into it (default location is%APPDATA%\Telegram Desktop\tdataon Windows)
Using the library
ВАЖНО: Перед использованием убедитесь, что настроили переменные окружения для прокси!
from tdata_session_exporter import authorize_client
import asyncio
from dotenv import load_dotenv
# Загружаем переменные окружения (включая данные прокси)
load_dotenv()
async def main():
try:
# Pass the name of the folder in tdatas/ containing tdata files
# Автоматически проверит и использует прокси из ENV
client = await authorize_client("tdata")
if client:
print("Authorization successful!")
# Now you can use client for Telegram operations
me = await client.get_me()
print(f"Logged in as {me.first_name} (@{me.username})")
else:
print("Authorization failed")
except (ValueError, ConnectionError) as e:
print(f"Ошибка: {e}")
print("Проверьте настройки прокси в .env файле!")
if __name__ == "__main__":
asyncio.run(main())
Using bundle explicitly
from tdata_session_exporter.auth import MyTelegramClient
import asyncio
from dotenv import load_dotenv
# Загружаем переменные окружения (включая прокси)
load_dotenv()
async def main():
try:
# Автоматически проверит прокси при инициализации
c = MyTelegramClient(bundle_json="/abs/path/accounts/+2349049675164.json")
ok = await c.authorize()
print(ok, c.me)
except (ValueError, ConnectionError) as e:
print(f"❌ Ошибка: {e}")
asyncio.run(main())
JSON session (string_session inside JSON)
You can authorize using a JSON file that contains app_id, app_hash and a Telethon string session. The library accepts any of these keys for the string session: string_session, session_string, telethon_string, telethon_session.
Example JSON file:
{
"app_id": 2040,
"app_hash": "b18441a1ff607e10a989891a5462e627",
"string_session": "1A...your-telethon-string-session...=="
}
Usage via environment variable:
export BUNDLE_JSON_PATH="/abs/path/to/account.json"
Or pass the path explicitly:
from tdata_session_exporter.auth import MyTelegramClient
import asyncio
from dotenv import load_dotenv
# Загружаем переменные окружения (включая прокси)
load_dotenv()
async def main():
try:
# Автоматически проверит прокси при инициализации
c = MyTelegramClient(bundle_json="/abs/path/to/account.json")
ok = await c.authorize()
print(ok, c.me)
except (ValueError, ConnectionError) as e:
print(f"❌ Ошибка: {e}")
asyncio.run(main())
If the JSON does not contain a string session, the library will try to use a neighboring .session file with the same basename as the JSON.
Troubleshooting
Ошибки прокси (самые частые)
❌ ПРОКСИ ОБЯЗАТЕЛЕН!
Библиотека не может работать без прокси. Создайте файл .env и укажите данные прокси:
PROXIES=proxy.example.com:8080:user:pass
Или без авторизации:
PROXIES=proxy.example.com:1080
❌ Неверный формат PROXIES
Проверьте правильность формата. Поддерживаемые форматы:
host:port- без авторизацииhost:port:username:password- с авторизациейtype:host:port:username:password- с указанием типа
Пример правильного формата:
PROXIES=proxy.example.com:8080:user:pass
❌ Ошибка авторизации на прокси
Библиотека реально проверяет авторизацию на прокси-сервере!
Возможные причины:
- Неправильный username или password
- Прокси не требует авторизацию, а вы указали username:password
- Прокси использует другой метод авторизации
Решение:
- Проверьте правильность username и password
- Убедитесь, что формат:
PROXIES=host:port:username:password - Попробуйте подключиться к прокси через другое приложение для проверки данных
❌ Не удалось подключиться к прокси
Возможные причины:
- Прокси-сервер выключен или недоступен
- Неверный хост или порт
- Файрвол блокирует подключение к прокси
- Прокси работает, но не может установить соединение наружу
Решение:
- Проверьте работоспособность прокси в браузере или другом приложении
- Убедитесь, что данные прокси указаны правильно
- Проверьте, что прокси-сервер работает
- Библиотека пытается подключиться к серверам Telegram (149.154.167.50:443) - убедитесь, что прокси может до них достучаться
❌ Неверный тип прокси
Поддерживаются только: socks5, socks4, http, https
Если вы указываете тип явно, используйте формат:
PROXIES=socks5:proxy.example.com:1080:user:pass
No account has been loaded
If you get an error like Unexpected Exception: No account has been loaded, make sure:
- Your
tdatafolder contains valid Telegram account data - The folder structure is correct (
tdatas/tdata/with all Telegram Desktop files inside) - You're using a compatible version of Telegram Desktop (this library has been tested with TD 4.x)
- Прокси настроен правильно (см. выше)
Connection issues
If you have connection problems:
- Убедитесь, что прокси настроен и работает корректно (это обязательное требование!)
- Make sure your internet connection is stable
- Check if your IP is not blocked by Telegram (или IP вашего прокси)
- Try using a different API (by modifying the code to use a different
APIfromopentele.api)
License
MIT License
Contributing
Contributions are welcome! Please feel free to submit a Pull Request.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file tdata_session_exporter-0.2.1.tar.gz.
File metadata
- Download URL: tdata_session_exporter-0.2.1.tar.gz
- Upload date:
- Size: 17.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7dda4e6e17bc6b01e906f92167dc001b5b658a696c1e1af202115c69c05095fb
|
|
| MD5 |
748cd1a6b62cf410fd68f014faff60b8
|
|
| BLAKE2b-256 |
d1de4fe5bea7738ccbfdb609874edb28410ad3dce79de6a12f7e5f90623b12dd
|
Provenance
The following attestation bundles were made for tdata_session_exporter-0.2.1.tar.gz:
Publisher:
publish.yml on stufently/session-auth-lib
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
tdata_session_exporter-0.2.1.tar.gz -
Subject digest:
7dda4e6e17bc6b01e906f92167dc001b5b658a696c1e1af202115c69c05095fb - Sigstore transparency entry: 2194611521
- Sigstore integration time:
-
Permalink:
stufently/session-auth-lib@55257c957d904889ad6c83eac9fe3928b9fbb2f7 -
Branch / Tag:
refs/tags/v0.2.1 - Owner: https://github.com/stufently
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@55257c957d904889ad6c83eac9fe3928b9fbb2f7 -
Trigger Event:
workflow_dispatch
-
Statement type:
File details
Details for the file tdata_session_exporter-0.2.1-py3-none-any.whl.
File metadata
- Download URL: tdata_session_exporter-0.2.1-py3-none-any.whl
- Upload date:
- Size: 14.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3fcbc526c71552ad19247693bda3efde148ea7a339e82e0cf1f2b049ff6379a4
|
|
| MD5 |
82e31dbbf52c3369056d46b82760adef
|
|
| BLAKE2b-256 |
3a04b9c6061a767f98f844c9f27b25cef5f331e9ec0c02fc7f9e1ef20437857a
|
Provenance
The following attestation bundles were made for tdata_session_exporter-0.2.1-py3-none-any.whl:
Publisher:
publish.yml on stufently/session-auth-lib
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
tdata_session_exporter-0.2.1-py3-none-any.whl -
Subject digest:
3fcbc526c71552ad19247693bda3efde148ea7a339e82e0cf1f2b049ff6379a4 - Sigstore transparency entry: 2194611562
- Sigstore integration time:
-
Permalink:
stufently/session-auth-lib@55257c957d904889ad6c83eac9fe3928b9fbb2f7 -
Branch / Tag:
refs/tags/v0.2.1 - Owner: https://github.com/stufently
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@55257c957d904889ad6c83eac9fe3928b9fbb2f7 -
Trigger Event:
workflow_dispatch
-
Statement type: