Initial commit for RedAirsoft VK to TG and MAX poster

This commit is contained in:
2026-08-14 19:10:27 +05:00
commit 41722c0ffc
17 changed files with 2356 additions and 0 deletions
+83
View File
@@ -0,0 +1,83 @@
# 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. Клонирование и настройка окружения
Скопируйте пример файла конфигурации:
```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
```