RedAirsoft VK to Telegram & MAX Messenger Poster

Автоматизированный Docker-сервис для периодического парсинга новых постов из сообщества ВКонтакте и их одновременной публикации в Telegram и мессенджер МАКС (MAX Messenger) с отправкой отчётов администраторам в личные сообщения.


⚡ Особенности и возможности

  1. Telegram Rich Messages (современный формат) & Legacy fallback:
    • Автоматическая сборка Rich Messages с <tg-collage>, инлайн-фото/видео и форматированным текстом.
    • Поддержка облачного Telegram Bot API и локального telegram-bot-api (для видео больше 50 МБ).
    • При недоступности формата Rich Message — автоматический переход на классические медиагруппы (sendMediaGroup / sendPhoto / sendVideo).
  2. Надёжная интеграция с Мессенджером МАКС:
    • Загрузка изображений и видео через /uploads?type=....
    • Полный цикл поллинга готовности видео (/videos/{token}) перед отправкой сообщения.
    • Обработка attachment.not.ready и рейтов (429 Retry-After).
    • Автоматическая простановка реакций (например, 👍) на первый опубликованный пост.
    • Чанкинг длинных текстов (до 4000 символов).
  3. Безопасная очистка кэша и загрузок:
    • Немедленное удаление временных файлов после обработки каждого поста.
    • Фоновый процесс очистки старых «хвостов» (cleaner.py), который никогда не удаляет файлы, находящиеся в процессе скачивания или отправки (благодаря реестру активных локов).
  4. Отчёты администраторам в ЛС Telegram:
    • Поддержка одного или списка Telegram ID через запятую (TG_ADMIN_IDS=123456,789012).
    • Отправка ссылок на оригинал в ВК, опубликованный пост в Telegram и МАКС.
  5. Сохранение состояния (SQLite):
    • База данных в папке data/poster.db (монтируется в Docker volume).
    • Исключает повторную публикацию уже обработанных постов при перезапуске контейнера.

🛠 Быстрый старт

1. Клонирование и настройка окружения

Скопируйте пример файла конфигурации:

cp .env.example .env

Заполните переменные в файле .env:

  • VK_ACCESS_TOKEN: ваш токен ВКонтакте.
  • VK_SOURCE: ссылка, короткое имя или ID группы ВК (например, redairsoft или https://vk.com/redairsoft).
  • TG_BOT_TOKEN: токен бота Telegram (от @BotFather).
  • TG_CHAT_ID: ID канала/группы Telegram (например, -1001234567890).
  • TG_ADMIN_IDS: ID администраторов через запятую для отчётов.
  • MAX_BOT_TOKEN: токен бота в мессенджере МАКС.
  • MAX_CHAT_ID: ID чата в МАКС.

2. Запуск через Docker Compose

Запустите контейнер в фоновом режиме:

docker compose up -d --build

Просмотр логов:

docker compose logs -f

📁 Структура проекта

├── src/
│   ├── config.py           # Загрузка и валидация настроек из .env
│   ├── database.py         # SQLite хранилище опубликованных постов
│   ├── vk_client.py        # Клиент VK API (wall.get, resolve, media extraction)
│   ├── media_processor.py  # Загрузчик фото/видео (yt-dlp, ffmpeg) с защитой активных файлов
│   ├── text_formatter.py   # Форматирование текста (HTML, заголовки, хештеги)
│   ├── tg_poster.py        # Публикация в Telegram (Rich Message + Legacy)
│   ├── max_poster.py       # Публикация в MAX Messenger (Uploads + Messages + Reactions)
│   ├── cleaner.py          # Фоновая очистка зависшего кэша
│   ├── admin_notifier.py   # Отправка отчетов администраторам
│   └── main.py             # Главный цикл оркестрации
├── Dockerfile              # Мультистейдж образ с ffmpeg и сертификатами
├── docker-compose.yml      # Конфигурация Docker Compose
├── docker-entrypoint.sh    # Скрипт запуска и опционального поднятия local bot api
├── requirements.txt        # Зависимости Python
├── .env.example            # Шаблон переменных окружения
└── README.md
S
Description
No description provided
Readme 382 KiB
Languages
Python 97.7%
Dockerfile 1.4%
Shell 0.9%