tg-export 1.0.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (42) hide show
  1. tg_export-1.0.0/LICENSE +21 -0
  2. tg_export-1.0.0/PKG-INFO +261 -0
  3. tg_export-1.0.0/README.md +236 -0
  4. tg_export-1.0.0/pyproject.toml +43 -0
  5. tg_export-1.0.0/setup.cfg +4 -0
  6. tg_export-1.0.0/tests/test_api.py +137 -0
  7. tg_export-1.0.0/tests/test_auth.py +43 -0
  8. tg_export-1.0.0/tests/test_catalog.py +64 -0
  9. tg_export-1.0.0/tests/test_cli.py +31 -0
  10. tg_export-1.0.0/tests/test_config.py +121 -0
  11. tg_export-1.0.0/tests/test_converter.py +109 -0
  12. tg_export-1.0.0/tests/test_exporter.py +70 -0
  13. tg_export-1.0.0/tests/test_incremental.py +63 -0
  14. tg_export-1.0.0/tests/test_integration.py +52 -0
  15. tg_export-1.0.0/tests/test_media.py +48 -0
  16. tg_export-1.0.0/tests/test_migration.py +27 -0
  17. tg_export-1.0.0/tests/test_models.py +79 -0
  18. tg_export-1.0.0/tests/test_monoforum.py +28 -0
  19. tg_export-1.0.0/tests/test_renderer.py +130 -0
  20. tg_export-1.0.0/tests/test_state.py +124 -0
  21. tg_export-1.0.0/tests/test_topics.py +26 -0
  22. tg_export-1.0.0/tg_export/__init__.py +1 -0
  23. tg_export-1.0.0/tg_export/__main__.py +3 -0
  24. tg_export-1.0.0/tg_export/api.py +190 -0
  25. tg_export-1.0.0/tg_export/auth.py +174 -0
  26. tg_export-1.0.0/tg_export/catalog.py +270 -0
  27. tg_export-1.0.0/tg_export/cli.py +1278 -0
  28. tg_export-1.0.0/tg_export/config.py +372 -0
  29. tg_export-1.0.0/tg_export/converter.py +614 -0
  30. tg_export-1.0.0/tg_export/exporter.py +1098 -0
  31. tg_export-1.0.0/tg_export/html/__init__.py +1 -0
  32. tg_export-1.0.0/tg_export/html/renderer.py +642 -0
  33. tg_export-1.0.0/tg_export/importer.py +192 -0
  34. tg_export-1.0.0/tg_export/media.py +347 -0
  35. tg_export-1.0.0/tg_export/models.py +836 -0
  36. tg_export-1.0.0/tg_export/state.py +604 -0
  37. tg_export-1.0.0/tg_export.egg-info/PKG-INFO +261 -0
  38. tg_export-1.0.0/tg_export.egg-info/SOURCES.txt +40 -0
  39. tg_export-1.0.0/tg_export.egg-info/dependency_links.txt +1 -0
  40. tg_export-1.0.0/tg_export.egg-info/entry_points.txt +2 -0
  41. tg_export-1.0.0/tg_export.egg-info/requires.txt +13 -0
  42. tg_export-1.0.0/tg_export.egg-info/top_level.txt +1 -0
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Vitaly Ostanin
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,261 @@
1
+ Metadata-Version: 2.4
2
+ Name: tg-export
3
+ Version: 1.0.0
4
+ Summary: Flexible Telegram data export tool
5
+ Author-email: Vitaly Ostanin <vitaly.ostanin@gmail.com>
6
+ License-Expression: MIT
7
+ Project-URL: Homepage, https://github.com/VitalyOstanin/tg-export
8
+ Project-URL: Repository, https://github.com/VitalyOstanin/tg-export
9
+ Project-URL: Issues, https://github.com/VitalyOstanin/tg-export/issues
10
+ Requires-Python: >=3.11
11
+ Description-Content-Type: text/markdown
12
+ License-File: LICENSE
13
+ Requires-Dist: telethon>=1.36
14
+ Requires-Dist: pyyaml>=6.0
15
+ Requires-Dist: aiosqlite>=0.20
16
+ Requires-Dist: jinja2>=3.1
17
+ Requires-Dist: click>=8.0
18
+ Requires-Dist: rich>=13.0
19
+ Provides-Extra: proxy
20
+ Requires-Dist: python-socks[asyncio]>=2.0; extra == "proxy"
21
+ Provides-Extra: dev
22
+ Requires-Dist: pytest>=8.0; extra == "dev"
23
+ Requires-Dist: pytest-asyncio>=0.23; extra == "dev"
24
+ Dynamic: license-file
25
+
26
+ # tg-export
27
+
28
+ Экспорт данных из Telegram на локальный диск с гибкой настройкой.
29
+
30
+ ## Содержание
31
+
32
+ - [Возможности](#возможности)
33
+ - [Сценарии использования](#сценарии-использования)
34
+ - [Установка](#установка)
35
+ - [Быстрый старт](#быстрый-старт)
36
+ - [Структура конфигов](#структура-конфигов)
37
+ - [Конфигурация экспорта](#конфигурация-экспорта)
38
+ - [Тесты](#тесты)
39
+
40
+ ## Возможности
41
+
42
+ - **Инкрементальный экспорт** -- при повторном запуске скачиваются только новые сообщения и файлы, состояние хранится в SQLite
43
+ - **Sibling-дедупликация** -- при экспорте нескольких аккаунтов (семья, рабочий/личный) общие файлы не скачиваются повторно, а линкуются через hardlink
44
+ - **Импорт из tdesktop** -- файлы из стандартного экспорта Telegram Desktop копируются вместо повторного скачивания
45
+ - **Takeout API** -- использует официальный Takeout для обхода rate-limiting
46
+ - **Гибкие правила экспорта** -- настройка по чатам, папкам, типам (personal, groups, channels, bots), с фильтрами по датам, типам медиа и размеру файлов
47
+ - **Логика архивных чатов** -- чат считается архивным (`is_archived`) только если он присутствует исключительно в архиве Telegram. Если чат есть в основном списке диалогов или в именованной папке, он не помечается как архивный, даже если одновременно находится в архиве
48
+ - **Проверка размера в runtime** -- если реальный размер файла превышает лимит, скачивание прерывается и частичный файл удаляется
49
+ - **HTML-рендеринг по месяцам** -- каждый месяц в отдельном файле, с оглавлением (TOC) и навигацией prev/next
50
+ - **Progress bars** -- основной прогресс по сообщениям + sub-progress bars для каждого скачиваемого файла
51
+ - **Контроль свободного места** -- экспорт останавливается, если свободное место на диске падает ниже порога (`min_free_space` в `config.yaml`, по умолчанию 20 GB)
52
+ - **Корректный shutdown** -- Ctrl+C сохраняет состояние, двойной Ctrl+C -- force shutdown с cleanup
53
+ - **Поддержка прокси** -- SOCKS5, SOCKS4, HTTP прокси для подключения к Telegram API
54
+ - **Данные в SQLite** -- все сообщения и метаданные хранятся в SQLite, что позволяет пересоздать HTML без обращения к Telegram API, строить поисковые индексы, подключить веб-интерфейс или использовать данные в любых других целях
55
+ - **CLI для анализа** -- команда `tg info` для batch-запросов информации о чатах через API
56
+ - **Очистка данных чата** -- команда `purge` для удаления данных конкретного чата из БД и с диска
57
+
58
+ ## Сценарии использования
59
+
60
+ **Личный архив** -- экспорт всех личных переписок и групп с медиафайлами на локальный диск для долгосрочного хранения.
61
+
62
+ **Семейный экспорт** -- экспорт аккаунтов нескольких членов семьи. Общие группы и каналы содержат одинаковые файлы -- sibling-дедупликация экономит место на диске через hardlink.
63
+
64
+ **Выборочный экспорт** -- экспорт только нужных чатов/папок с правилами: рабочие чаты экспортируются, боты и публичные каналы пропускаются, для флудилок скачиваются только фото.
65
+
66
+ **Миграция с tdesktop** -- если уже есть экспорт из Telegram Desktop, файлы из него импортируются без повторного скачивания.
67
+
68
+ ## Установка
69
+
70
+ Из PyPI (экспериментально, не проверялось):
71
+
72
+ ```bash
73
+ pip install tg-export
74
+ ```
75
+
76
+ Для работы через прокси:
77
+
78
+ ```bash
79
+ pip install tg-export[proxy]
80
+ ```
81
+
82
+ Из исходников:
83
+
84
+ ```bash
85
+ uv pip install -e .
86
+ ```
87
+
88
+ ## Быстрый старт
89
+
90
+ ### 1. Получить API credentials
91
+
92
+ Зайти на [my.telegram.org](https://my.telegram.org), создать приложение, получить `api_id` и `api_hash`.
93
+
94
+ ```bash
95
+ uv run tg-export auth credentials
96
+ ```
97
+
98
+ Ввести `api_id` и `api_hash`. Они сохраняются в `~/.config/tg-export/api_credentials.yaml` и используются для всех аккаунтов.
99
+
100
+ ### 2. Настроить прокси (если нужен)
101
+
102
+ Создать файл `~/.config/tg-export/config.yaml`:
103
+
104
+ ```yaml
105
+ proxy:
106
+ type: socks5 # socks5, socks4, http
107
+ host: 127.0.0.1
108
+ port: 1080
109
+ # username: user # опционально
110
+ # password: pass # опционально
111
+ ```
112
+
113
+ ### 3. Залогиниться в Telegram
114
+
115
+ ```bash
116
+ uv run tg-export auth add --name myaccount
117
+ ```
118
+
119
+ Ввести номер телефона и код подтверждения. Сессия сохранится в `~/.config/tg-export/sessions/myaccount.session`.
120
+
121
+ Для нескольких аккаунтов повторить с разными именами. Установить аккаунт по умолчанию:
122
+
123
+ ```bash
124
+ uv run tg-export account default myaccount
125
+ ```
126
+
127
+ ### 4. Анализ чатов и каталог
128
+
129
+ Получить каталог всех чатов аккаунта:
130
+
131
+ ```bash
132
+ uv run tg-export list --output catalog.yaml
133
+ uv run tg-export list --format json --output catalog.json
134
+ ```
135
+
136
+ Посмотреть информацию о конкретных чатах (количество сообщений, последние сообщения):
137
+
138
+ ```bash
139
+ uv run tg-export info 123456789 987654321
140
+ uv run tg-export info --from-catalog catalog.json --type personal --last 3
141
+ ```
142
+
143
+ ### 5. Настройка правил экспорта
144
+
145
+ Сгенерировать шаблон конфига:
146
+
147
+ ```bash
148
+ uv run tg-export init
149
+ ```
150
+
151
+ Конфиг создается в `~/.config/tg-export/myaccount.yaml`. Настроить правила: какие чаты экспортировать, какие пропускать, какие типы медиа скачивать.
152
+
153
+ AI-агенты (Claude Code, Cursor и т.д.) могут помочь с настройкой: показать список чатов по категориям, задать вопросы о каждом и сформировать конфиг интерактивно.
154
+
155
+ Пример конфига:
156
+
157
+ ```yaml
158
+ output:
159
+ path: ./export_output/myaccount
160
+
161
+ defaults:
162
+ media:
163
+ types: [all]
164
+ max_file_size: 100MB
165
+ concurrent_downloads: 3
166
+
167
+ # Импорт файлов из существующего экспорта tdesktop
168
+ import_existing:
169
+ - path: ~/Downloads/Telegram Desktop/DataExport
170
+ type: tdesktop
171
+
172
+ # Правила по типам чатов
173
+ type_rules:
174
+ bots:
175
+ skip: true
176
+ public:
177
+ skip: true
178
+ personal: {} # экспортировать все личные чаты
179
+ self: {} # экспортировать Saved Messages
180
+
181
+ # Правила по папкам Telegram
182
+ folders:
183
+ Work: {}
184
+ Family:
185
+ media:
186
+ types: [photo, video]
187
+
188
+ # Правила по конкретным чатам
189
+ chats:
190
+ - id: 777000
191
+ name: Telegram
192
+ action: skip
193
+ - id: 123456789
194
+ name: "Important Chat"
195
+ media:
196
+ types: [] # без медиа
197
+
198
+ # Что делать с чатами, не попавшими ни в одно правило
199
+ unmatched: skip
200
+ ```
201
+
202
+ ### 6. Запустить экспорт
203
+
204
+ ```bash
205
+ uv run tg-export run
206
+ ```
207
+
208
+ Для пробного запуска без скачивания:
209
+
210
+ ```bash
211
+ uv run tg-export run --dry-run
212
+ ```
213
+
214
+ При повторном запуске скачиваются только новые сообщения (инкрементальный экспорт).
215
+
216
+ ### 7. Sibling-дедупликация
217
+
218
+ При экспорте нескольких аккаунтов в один каталог (`./export_output/`), tg-export автоматически находит соседние базы данных и использует уже скачанные файлы через hardlink:
219
+
220
+ ```
221
+ export_output/
222
+ account1/ # первый аккаунт
223
+ account2/ # файлы из общих чатов линкуются из account1
224
+ ```
225
+
226
+ ## Структура конфигов
227
+
228
+ ```
229
+ ~/.config/tg-export/
230
+ api_credentials.yaml # API ID и Hash (общие для всех аккаунтов)
231
+ config.yaml # Глобальные настройки (proxy, min_free_space)
232
+ default_account # Имя аккаунта по умолчанию
233
+ sessions/
234
+ myaccount.session # Telethon-сессия
235
+ myaccount.yaml # Конфиг экспорта для аккаунта
236
+
237
+ export_output/
238
+ myaccount/
239
+ .tg-export-state.db # SQLite: состояние экспорта, сообщения, файлы
240
+ unfiled/
241
+ Chat_Name_123456/
242
+ messages.html # Redirect на первый месяц
243
+ messages_2024-01.html # Сообщения за январь 2024
244
+ messages_2024-02.html # Сообщения за февраль 2024
245
+ photos/ # Скачанные фото
246
+ videos/ # Скачанные видео
247
+ files/ # Скачанные документы
248
+ folders/
249
+ Work/
250
+ ...
251
+ ```
252
+
253
+ ## Тесты
254
+
255
+ ```bash
256
+ uv run python -m pytest tests/ -v
257
+ ```
258
+
259
+ ## Лицензия
260
+
261
+ [MIT License](LICENSE)
@@ -0,0 +1,236 @@
1
+ # tg-export
2
+
3
+ Экспорт данных из Telegram на локальный диск с гибкой настройкой.
4
+
5
+ ## Содержание
6
+
7
+ - [Возможности](#возможности)
8
+ - [Сценарии использования](#сценарии-использования)
9
+ - [Установка](#установка)
10
+ - [Быстрый старт](#быстрый-старт)
11
+ - [Структура конфигов](#структура-конфигов)
12
+ - [Конфигурация экспорта](#конфигурация-экспорта)
13
+ - [Тесты](#тесты)
14
+
15
+ ## Возможности
16
+
17
+ - **Инкрементальный экспорт** -- при повторном запуске скачиваются только новые сообщения и файлы, состояние хранится в SQLite
18
+ - **Sibling-дедупликация** -- при экспорте нескольких аккаунтов (семья, рабочий/личный) общие файлы не скачиваются повторно, а линкуются через hardlink
19
+ - **Импорт из tdesktop** -- файлы из стандартного экспорта Telegram Desktop копируются вместо повторного скачивания
20
+ - **Takeout API** -- использует официальный Takeout для обхода rate-limiting
21
+ - **Гибкие правила экспорта** -- настройка по чатам, папкам, типам (personal, groups, channels, bots), с фильтрами по датам, типам медиа и размеру файлов
22
+ - **Логика архивных чатов** -- чат считается архивным (`is_archived`) только если он присутствует исключительно в архиве Telegram. Если чат есть в основном списке диалогов или в именованной папке, он не помечается как архивный, даже если одновременно находится в архиве
23
+ - **Проверка размера в runtime** -- если реальный размер файла превышает лимит, скачивание прерывается и частичный файл удаляется
24
+ - **HTML-рендеринг по месяцам** -- каждый месяц в отдельном файле, с оглавлением (TOC) и навигацией prev/next
25
+ - **Progress bars** -- основной прогресс по сообщениям + sub-progress bars для каждого скачиваемого файла
26
+ - **Контроль свободного места** -- экспорт останавливается, если свободное место на диске падает ниже порога (`min_free_space` в `config.yaml`, по умолчанию 20 GB)
27
+ - **Корректный shutdown** -- Ctrl+C сохраняет состояние, двойной Ctrl+C -- force shutdown с cleanup
28
+ - **Поддержка прокси** -- SOCKS5, SOCKS4, HTTP прокси для подключения к Telegram API
29
+ - **Данные в SQLite** -- все сообщения и метаданные хранятся в SQLite, что позволяет пересоздать HTML без обращения к Telegram API, строить поисковые индексы, подключить веб-интерфейс или использовать данные в любых других целях
30
+ - **CLI для анализа** -- команда `tg info` для batch-запросов информации о чатах через API
31
+ - **Очистка данных чата** -- команда `purge` для удаления данных конкретного чата из БД и с диска
32
+
33
+ ## Сценарии использования
34
+
35
+ **Личный архив** -- экспорт всех личных переписок и групп с медиафайлами на локальный диск для долгосрочного хранения.
36
+
37
+ **Семейный экспорт** -- экспорт аккаунтов нескольких членов семьи. Общие группы и каналы содержат одинаковые файлы -- sibling-дедупликация экономит место на диске через hardlink.
38
+
39
+ **Выборочный экспорт** -- экспорт только нужных чатов/папок с правилами: рабочие чаты экспортируются, боты и публичные каналы пропускаются, для флудилок скачиваются только фото.
40
+
41
+ **Миграция с tdesktop** -- если уже есть экспорт из Telegram Desktop, файлы из него импортируются без повторного скачивания.
42
+
43
+ ## Установка
44
+
45
+ Из PyPI (экспериментально, не проверялось):
46
+
47
+ ```bash
48
+ pip install tg-export
49
+ ```
50
+
51
+ Для работы через прокси:
52
+
53
+ ```bash
54
+ pip install tg-export[proxy]
55
+ ```
56
+
57
+ Из исходников:
58
+
59
+ ```bash
60
+ uv pip install -e .
61
+ ```
62
+
63
+ ## Быстрый старт
64
+
65
+ ### 1. Получить API credentials
66
+
67
+ Зайти на [my.telegram.org](https://my.telegram.org), создать приложение, получить `api_id` и `api_hash`.
68
+
69
+ ```bash
70
+ uv run tg-export auth credentials
71
+ ```
72
+
73
+ Ввести `api_id` и `api_hash`. Они сохраняются в `~/.config/tg-export/api_credentials.yaml` и используются для всех аккаунтов.
74
+
75
+ ### 2. Настроить прокси (если нужен)
76
+
77
+ Создать файл `~/.config/tg-export/config.yaml`:
78
+
79
+ ```yaml
80
+ proxy:
81
+ type: socks5 # socks5, socks4, http
82
+ host: 127.0.0.1
83
+ port: 1080
84
+ # username: user # опционально
85
+ # password: pass # опционально
86
+ ```
87
+
88
+ ### 3. Залогиниться в Telegram
89
+
90
+ ```bash
91
+ uv run tg-export auth add --name myaccount
92
+ ```
93
+
94
+ Ввести номер телефона и код подтверждения. Сессия сохранится в `~/.config/tg-export/sessions/myaccount.session`.
95
+
96
+ Для нескольких аккаунтов повторить с разными именами. Установить аккаунт по умолчанию:
97
+
98
+ ```bash
99
+ uv run tg-export account default myaccount
100
+ ```
101
+
102
+ ### 4. Анализ чатов и каталог
103
+
104
+ Получить каталог всех чатов аккаунта:
105
+
106
+ ```bash
107
+ uv run tg-export list --output catalog.yaml
108
+ uv run tg-export list --format json --output catalog.json
109
+ ```
110
+
111
+ Посмотреть информацию о конкретных чатах (количество сообщений, последние сообщения):
112
+
113
+ ```bash
114
+ uv run tg-export info 123456789 987654321
115
+ uv run tg-export info --from-catalog catalog.json --type personal --last 3
116
+ ```
117
+
118
+ ### 5. Настройка правил экспорта
119
+
120
+ Сгенерировать шаблон конфига:
121
+
122
+ ```bash
123
+ uv run tg-export init
124
+ ```
125
+
126
+ Конфиг создается в `~/.config/tg-export/myaccount.yaml`. Настроить правила: какие чаты экспортировать, какие пропускать, какие типы медиа скачивать.
127
+
128
+ AI-агенты (Claude Code, Cursor и т.д.) могут помочь с настройкой: показать список чатов по категориям, задать вопросы о каждом и сформировать конфиг интерактивно.
129
+
130
+ Пример конфига:
131
+
132
+ ```yaml
133
+ output:
134
+ path: ./export_output/myaccount
135
+
136
+ defaults:
137
+ media:
138
+ types: [all]
139
+ max_file_size: 100MB
140
+ concurrent_downloads: 3
141
+
142
+ # Импорт файлов из существующего экспорта tdesktop
143
+ import_existing:
144
+ - path: ~/Downloads/Telegram Desktop/DataExport
145
+ type: tdesktop
146
+
147
+ # Правила по типам чатов
148
+ type_rules:
149
+ bots:
150
+ skip: true
151
+ public:
152
+ skip: true
153
+ personal: {} # экспортировать все личные чаты
154
+ self: {} # экспортировать Saved Messages
155
+
156
+ # Правила по папкам Telegram
157
+ folders:
158
+ Work: {}
159
+ Family:
160
+ media:
161
+ types: [photo, video]
162
+
163
+ # Правила по конкретным чатам
164
+ chats:
165
+ - id: 777000
166
+ name: Telegram
167
+ action: skip
168
+ - id: 123456789
169
+ name: "Important Chat"
170
+ media:
171
+ types: [] # без медиа
172
+
173
+ # Что делать с чатами, не попавшими ни в одно правило
174
+ unmatched: skip
175
+ ```
176
+
177
+ ### 6. Запустить экспорт
178
+
179
+ ```bash
180
+ uv run tg-export run
181
+ ```
182
+
183
+ Для пробного запуска без скачивания:
184
+
185
+ ```bash
186
+ uv run tg-export run --dry-run
187
+ ```
188
+
189
+ При повторном запуске скачиваются только новые сообщения (инкрементальный экспорт).
190
+
191
+ ### 7. Sibling-дедупликация
192
+
193
+ При экспорте нескольких аккаунтов в один каталог (`./export_output/`), tg-export автоматически находит соседние базы данных и использует уже скачанные файлы через hardlink:
194
+
195
+ ```
196
+ export_output/
197
+ account1/ # первый аккаунт
198
+ account2/ # файлы из общих чатов линкуются из account1
199
+ ```
200
+
201
+ ## Структура конфигов
202
+
203
+ ```
204
+ ~/.config/tg-export/
205
+ api_credentials.yaml # API ID и Hash (общие для всех аккаунтов)
206
+ config.yaml # Глобальные настройки (proxy, min_free_space)
207
+ default_account # Имя аккаунта по умолчанию
208
+ sessions/
209
+ myaccount.session # Telethon-сессия
210
+ myaccount.yaml # Конфиг экспорта для аккаунта
211
+
212
+ export_output/
213
+ myaccount/
214
+ .tg-export-state.db # SQLite: состояние экспорта, сообщения, файлы
215
+ unfiled/
216
+ Chat_Name_123456/
217
+ messages.html # Redirect на первый месяц
218
+ messages_2024-01.html # Сообщения за январь 2024
219
+ messages_2024-02.html # Сообщения за февраль 2024
220
+ photos/ # Скачанные фото
221
+ videos/ # Скачанные видео
222
+ files/ # Скачанные документы
223
+ folders/
224
+ Work/
225
+ ...
226
+ ```
227
+
228
+ ## Тесты
229
+
230
+ ```bash
231
+ uv run python -m pytest tests/ -v
232
+ ```
233
+
234
+ ## Лицензия
235
+
236
+ [MIT License](LICENSE)
@@ -0,0 +1,43 @@
1
+ [build-system]
2
+ requires = ["setuptools>=68.0"]
3
+ build-backend = "setuptools.build_meta"
4
+
5
+ [project]
6
+ name = "tg-export"
7
+ version = "1.0.0"
8
+ description = "Flexible Telegram data export tool"
9
+ license = "MIT"
10
+ requires-python = ">=3.11"
11
+ readme = "README.md"
12
+ authors = [{name = "Vitaly Ostanin", email = "vitaly.ostanin@gmail.com"}]
13
+ dependencies = [
14
+ "telethon>=1.36",
15
+ "pyyaml>=6.0",
16
+ "aiosqlite>=0.20",
17
+ "jinja2>=3.1",
18
+ "click>=8.0",
19
+ "rich>=13.0",
20
+ ]
21
+
22
+ [project.urls]
23
+ Homepage = "https://github.com/VitalyOstanin/tg-export"
24
+ Repository = "https://github.com/VitalyOstanin/tg-export"
25
+ Issues = "https://github.com/VitalyOstanin/tg-export/issues"
26
+
27
+ [project.optional-dependencies]
28
+ proxy = [
29
+ "python-socks[asyncio]>=2.0",
30
+ ]
31
+ dev = [
32
+ "pytest>=8.0",
33
+ "pytest-asyncio>=0.23",
34
+ ]
35
+
36
+ [tool.pytest.ini_options]
37
+ asyncio_mode = "auto"
38
+
39
+ [tool.setuptools.packages.find]
40
+ include = ["tg_export*"]
41
+
42
+ [project.scripts]
43
+ tg-export = "tg_export.cli:main"
@@ -0,0 +1,4 @@
1
+ [egg_info]
2
+ tag_build =
3
+ tag_date = 0
4
+