Files

8.2 KiB
Raw Permalink Blame History

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


📋 План на следующую сессию

Рекомендуется начать с:

  1. 0.21 — Resume (критично для длинных каналов)
  2. 0.13 — Временная зона (важно для корректности)
  3. 0.15 — Размер файлов (простое исправление)
  4. 0.10 — Посты без index.md (критичный баг)

Затем:

  1. 0.9, 0.16 — Ссылки на посты (важно для навигации)
  2. 0.12, 0.14 — Отчёт о таймаутах (удобство)
  3. 0.17, 0.19 — Многопоточность (производительность)

🎯 Глобальные цели

  • Завершить Phase 0 (исправить все баги)
  • Перейти к Phase 1 (лендинг + GitHub)
  • Подготовить к продакшену

Документ создан: 6 марта 2026 г.
Следующее обновление: после исправления задач 0.10, 0.13, 0.15, 0.21