8.2 KiB
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
Проблема: Нет ссылок на канал, автора, оригинальный пост.
Что сделать:
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
📋 План на следующую сессию
Рекомендуется начать с:
- 0.21 — Resume (критично для длинных каналов)
- 0.13 — Временная зона (важно для корректности)
- 0.15 — Размер файлов (простое исправление)
- 0.10 — Посты без index.md (критичный баг)
Затем:
- 0.9, 0.16 — Ссылки на посты (важно для навигации)
- 0.12, 0.14 — Отчёт о таймаутах (удобство)
- 0.17, 0.19 — Многопоточность (производительность)
🎯 Глобальные цели
- Завершить Phase 0 (исправить все баги)
- Перейти к Phase 1 (лендинг + GitHub)
- Подготовить к продакшену
Документ создан: 6 марта 2026 г.
Следующее обновление: после исправления задач 0.10, 0.13, 0.15, 0.21