# Telegram Archiver — Список задач для продолжения работы **Дата:** 6 марта 2026 г. **Статус:** Phase 0 MVP завершён, 992 поста заархивировано --- ## 🔴 Высокий приоритет (критичные баги) ### 0.10 — Посты без index.md **Проблема:** Пост 987 — в папке только mp3 файл, index.md отсутствует. **Что сделать:** - [ ] Проверять наличие index.md после записи - [ ] Создавать минимальный front-matter даже если текст пуст - [ ] Логировать ошибки записи **Файлы:** `app/archiver.py` --- ### 0.13 — Временная зона (GMT+3 Москва) **Проблема:** `date: '2026-01-18T08:11:24+00:00'` — UTC вместо Москвы. **Что сделать:** - [ ] Конвертировать время: `date.astimezone(ZoneInfo('Europe/Moscow'))` - [ ] Сохранять с offset +03:00 **Файлы:** `app/archiver.py` --- ### 0.15 — Размер файла = 0 во front-matter **Проблема:** `size: 0` вместо реального размера. **Что сделать:** - [ ] Брать размер из атрибутов Telegram: `doc.size` - [ ] Либо проверять после записи: `Path(filepath).stat().st_size` **Файлы:** `app/telethon_client.py`, `app/archiver.py` --- ### 0.21 — Resume прерванной архивации **Проблема:** 2 часа на 1000 постов — при обрыве начинать заново. **Что сделать:** - [ ] Сохранять `last_message_id` в файл состояния - [ ] Добавить флаг `--resume` для продолжения - [ ] При старте проверять последний ID **Файлы:** `app/main.py`, `app/archiver.py` --- ## 🟡 Средний приоритет (улучшения) ### 0.9 — Прямые ссылки на посты **Проблема:** Нет ссылок на оригинальные посты для репостов. **Что сделать:** - [ ] Для репостов: `original_post_url: https://t.me/channel/123` - [ ] Для канала: `channel_url: https://t.me/dedinit` - [ ] Для поста: `post_url: https://t.me/dedinit/1234` **Файлы:** `app/archiver.py` --- ### 0.12 — Отчёт о неуспешно скачанных файлах **Проблема:** Файлы по таймауту пропускаются без информации для дозагрузки. **Что сделать:** - [ ] Создавать `to_download_later.md` со списком URL - [ ] Сохранять `message_id` и `media_id` - [ ] Добавить команду `--resume-downloads` **Файлы:** `app/archiver.py`, `app/main.py` --- ### 0.14 — Прямые ссылки на файлы **Проблема:** При таймауте нет ссылки для дозагрузки. **Что сделать:** - [ ] Сохранять `download_url` во front-matter (временная ссылка) - [ ] Для дозагрузки переподключаться к Telegram - [ ] Запрашивать файл по ID через API **Файлы:** `app/telethon_client.py` --- ### 0.16 — Расширенный front-matter **Проблема:** Нет ссылок на канал, автора, оригинальный пост. **Что сделать:** ```yaml author: Дед in АйТи author_username: "@dedinit" channel_title: "Дед in АйТи" channel_username: "@dedinit" channel_url: "https://t.me/dedinit" post_url: "https://t.me/dedinit/1234" original_post_url: "https://t.me/otherchannel/987" ``` **Файлы:** `app/models.py`, `app/archiver.py` --- ## 🟢 Низкий приоритет (оптимизации) ### 0.11 — Видео-кружки и .bin файлы **Проблема:** Пост 988 — видео-кружок сохранился как `.bin`. **Что сделать:** - [ ] Определять тип по MIME: `video/mp4` → `.mp4` - [ ] Переименовывать после скачивания - [ ] Опционально: конвертировать через ffmpeg **Файлы:** `app/telethon_client.py` --- ### 0.17 — Многопоточное скачивание медиа **Идея:** Скачивать медиафайлы параллельно (3-5 потоков). **Что сделать:** - [ ] Создать очередь на скачивание - [ ] Запускать 3-5 корутин через `asyncio.gather()` - [ ] Соблюдать rate limits (паузы) **Ожидаемое ускорение:** в 2-3 раза **Файлы:** `app/telethon_client.py`, `app/archiver.py` --- ### 0.18 — Валидация скачанных файлов **Проблема:** Нет проверки целостности файлов. **Что сделать:** - [ ] Проверять размер после скачивания - [ ] Проверять magic bytes - [ ] Логировать битые файлы в `corrupted.md` **Файлы:** `app/archiver.py` --- ### 0.19 — Очередь на скачивание + многопоточность **Идея:** Разделить на 2 прохода: сбор URL → загрузка. **Что сделать:** - [ ] Первый проход: собрать все `download_url` - [ ] Сохранить в `queue.json` - [ ] Второй проход: загружать параллельно **Файлы:** `app/archiver.py`, `app/main.py` --- ## 🔵 Долгий приоритет (фичи для Hugo) ### 0.20 — Аудио-файлы для Hugo **Проблема:** Голосовые сообщения без метаданных. **Что сделать:** - [ ] Извлекать длительность: `doc.attributes.duration` - [ ] Сохранять во front-matter: `duration: 45` - [ ] Для Hugo: shortcode с wavesurfer.js **Файлы:** `app/telethon_client.py`, `app/archiver.py` --- ### 0.22 — Формат тегов для Hugo **Проблема:** Сейчас список YAML, Hugo предпочитает inline. **Что сделать:** - [ ] Изменить формат: `tags: ["tag1", "tag2"]` - [ ] Протестировать в Hugo **Файлы:** `app/archiver.py` --- ### 0.23 — Обработка трансляций **Проблема:** Посты 122, 120 — трансляции без текста. **Что сделать:** - [ ] Изучить `message.media` для трансляций - [ ] Сохранять метаданные во front-matter - [ ] Создавать index.md с информацией **Файлы:** `app/archiver.py` --- ### 0.24 — Голосовые сообщения **Проблема:** Голосовухи как `.bin` или `.ogg`. **Что сделать:** - [ ] Определять по MIME: `audio/ogg` → `.ogg` - [ ] Извлекать длительность - [ ] Сохранять: `duration: 45, size: 127359` **Файлы:** `app/telethon_client.py` --- ## 📋 План на следующую сессию ### Рекомендуется начать с: 1. **0.21** — Resume (критично для длинных каналов) 2. **0.13** — Временная зона (важно для корректности) 3. **0.15** — Размер файлов (простое исправление) 4. **0.10** — Посты без index.md (критичный баг) ### Затем: 5. **0.9, 0.16** — Ссылки на посты (важно для навигации) 6. **0.12, 0.14** — Отчёт о таймаутах (удобство) 7. **0.17, 0.19** — Многопоточность (производительность) --- ## 🎯 Глобальные цели - [ ] Завершить Phase 0 (исправить все баги) - [ ] Перейти к Phase 1 (лендинг + GitHub) - [ ] Подготовить к продакшену --- *Документ создан: 6 марта 2026 г.* *Следующее обновление: после исправления задач 0.10, 0.13, 0.15, 0.21*