# RedAirsoft VK to Telegram & MAX Messenger Poster Автоматизированный Docker-сервис для периодического парсинга новых постов из сообщества ВКонтакте и их одновременной публикации в **Telegram** и мессенджер **МАКС** (MAX Messenger) с отправкой отчётов администраторам в личные сообщения. --- ## ⚡ Особенности и возможности 1. **Telegram Rich Messages (современный формат) & Legacy fallback**: - Автоматическая сборка Rich Messages с ``, инлайн-фото/видео и форматированным текстом. - Поддержка облачного 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. Клонирование и настройка окружения Скопируйте пример файла конфигурации: ```bash 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 Запустите контейнер в фоновом режиме: ```bash docker compose up -d --build ``` Просмотр логов: ```bash 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 ```