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.
Metadata
Release files for tdata-session-exporter 0.2.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| tdata_session_exporter-0.2.1.tar.gz | 17.0 kB | With provenance | Details for tdata_session_exporter-0.2.1.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| tdata_session_exporter-0.2.1-py3-none-any.whl | Python 3 | none | any | Details for tdata_session_exporter-0.2.1-py3-none-any.whl |
Total release size: 31.0 kB
Release files / tdata_session_exporter-0.2.1.tar.gz
| Download URL | tdata_session_exporter-0.2.1.tar.gz |
|---|---|
| Size | 17.0 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
7dda4e6e17bc6b01e906f92167dc001b5b658a696c1e1af202115c69c05095fb
|
|
BLAKE2b-256 checksum How to use checksums |
d1de4fe5bea7738ccbfdb609874edb28410ad3dce79de6a12f7e5f90623b12dd
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jul 18, 2026.
Transparency logRelease files / tdata_session_exporter-0.2.1-py3-none-any.whl
| Download URL | tdata_session_exporter-0.2.1-py3-none-any.whl |
|---|---|
| Size | 14.1 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
3fcbc526c71552ad19247693bda3efde148ea7a339e82e0cf1f2b049ff6379a4
|
|
BLAKE2b-256 checksum How to use checksums |
3a04b9c6061a767f98f844c9f27b25cef5f331e9ec0c02fc7f9e1ef20437857a
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jul 18, 2026.
Transparency logSecurity for tdata-session-exporter 0.2.1
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
Full provenance
All 2 files in this release have been uploaded with provenance metadata.
Attestation for tdata_session_exporter-0.2.1.tar.gz
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jul 18, 2026.
Transparency logA note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.