# Telegram Video Download Bot Telegram бот для скачивания видео с YouTube, Instagram, TikTok, VK и Yapfiles. Микросервисная архитектура с раздельными сервисами для каждого источника. ## Архитектура Проект разделен на микросервисы: - **Основной бот** (в корне проекта) - Telegram бот, обрабатывает сообщения и оркестрирует запросы к сервисам - **youtube-downloader** - сервис для скачивания с YouTube (порт 5557) - **instagram-downloader** - сервис для скачивания с Instagram (порт 5556) - **vk-downloader** - сервис для скачивания с VK (порт 5555) - **yapfiles-downloader** - сервис для скачивания с Yapfiles (порт 5558) - **tiktok-downloader** - сервис для скачивания с TikTok (порт 5559) Каждый сервис работает в отдельном Docker контейнере и может быть развернут независимо. ## Возможности - 📹 Скачивание видео с YouTube - 📸 Скачивание видео с Instagram (требуются cookies) - 🎵 Скачивание видео с TikTok - 🎬 Скачивание видео с VK - 📁 Скачивание видео с Yapfiles - 🌍 Локализация интерфейса (русский/английский) на основе языка пользователя - 📊 Статистика скачанных видео и пользователей - 🔄 Автоматическое сохранение статистики в базу данных - 👥 Работа в группах с автоматическим обнаружением ссылок - 📢 Рассылка сообщений всем пользователям (`broadcast.py`) ## Команды бота - `/start` — начало работы с ботом - `/stat` — статистика: количество пользователей и скачанных видео - `/support` — информация о боте и контакт автора ## Требования - Docker и Docker Compose - Telegram Bot Token (получить у [@BotFather](https://t.me/BotFather)) - Для Instagram: файл с cookies (см. раздел Instagram ниже) ## Быстрый старт ### 1. Клонирование репозитория ```bash git clone cd videoDownloadBot ``` ### 2. Настройка переменных окружения Скопируйте `.env.example` в `.env` в корне проекта и заполните: ```bash cp .env.example .env nano .env # или используйте любой редактор ``` **Необходимые переменные:** ```env TELEGRAM_BOT_TOKEN=your_telegram_bot_token_here TELEGRAM_BOT_USERNAME=your_bot_username # Downloader Services URLs YOUTUBE_DOWNLOADER_URL=http://localhost:5557 INSTAGRAM_DOWNLOADER_URL=http://localhost:5556 VK_DOWNLOADER_URL=http://localhost:5555 YAPFILES_DOWNLOADER_URL=http://localhost:5558 TIKTOK_DOWNLOADER_URL=http://localhost:5559 ``` ### 3. Настройка Instagram (опционально) Если планируете скачивать видео с Instagram: 1. Экспортируйте cookies из браузера (см. `instagram-downloader/INSTAGRAM_COOKIES_INSTRUCTIONS.md`) 2. Сохраните файл как `instagram_cookies.txt` в папке `instagram-downloader/` ```bash cd instagram-downloader ./get_instagram_cookies.sh ``` ### 4. Запуск сервисов **Каждый сервис запускается отдельно:** ```bash # Запуск сервисов загрузчиков cd youtube-downloader && docker compose up -d && cd .. cd instagram-downloader && docker compose up -d && cd .. cd vk-downloader && docker compose up -d && cd .. cd yapfiles-downloader && docker compose up -d && cd .. cd tiktok-downloader && docker compose up -d && cd .. # Запуск основного бота (из корня проекта) docker compose up -d ``` ### 5. Проверка статуса ```bash # Проверка всех сервисов docker ps | grep -E "(video_download_bot|youtube|instagram|vk|yapfiles|tiktok)" ``` ## Порты сервисов | Сервис | Порт | |--------|------| | VK Downloader | 5555 | | Instagram Downloader | 5556 | | YouTube Downloader | 5557 | | Yapfiles Downloader | 5558 | | TikTok Downloader | 5559 | ## Рассылка сообщений Скрипт `broadcast.py` позволяет отправить сообщение всем пользователям бота: ```bash # Простое сообщение ./broadcast.py -y "Текст сообщения" # С HTML-разметкой ./broadcast.py -y --html 'Важно! Новая функция добавлена.' # Из файла ./broadcast.py -y --file announcement.txt --html # Посмотреть список пользователей ./broadcast.py --list ``` ## Структура проекта ``` videoDownloadBot/ ├── bot.py # Код основного Telegram бота ├── broadcast.py # Скрипт для рассылки сообщений ├── requirements.txt # Python зависимости бота ├── Dockerfile # Образ для бота ├── docker-compose.yml # Конфигурация бота ├── .env.example # Пример конфигурации ├── data/ # База данных (bot.db) ├── video/ # Скачанные видео ├── youtube-downloader/ # Сервис для YouTube ├── instagram-downloader/ # Сервис для Instagram ├── vk-downloader/ # Сервис для VK ├── yapfiles-downloader/ # Сервис для Yapfiles ├── tiktok-downloader/ # Сервис для TikTok ├── README.md # Этот файл └── ARCHITECTURE.md # Описание архитектуры ``` ## API Endpoints Все сервисы загрузчиков предоставляют одинаковый API: - `GET /health` - проверка здоровья сервиса - `POST /download/stream` - скачивание видео (возвращает бинарные данные) ```json POST /download/stream Content-Type: application/json { "url": "https://youtube.com/watch?v=..." } ``` ## Обновление ```bash git pull # Пересобрать и перезапустить основной бот docker compose down && docker compose up -d --build # Пересобрать сервисы загрузчиков cd youtube-downloader && docker compose up -d --build && cd .. cd instagram-downloader && docker compose up -d --build && cd .. cd vk-downloader && docker compose up -d --build && cd .. cd yapfiles-downloader && docker compose up -d --build && cd .. cd tiktok-downloader && docker compose up -d --build && cd .. ``` ## Локализация Бот автоматически определяет язык пользователя из настроек Telegram: - Если язык начинается с `ru` — интерфейс на русском - Иначе — интерфейс на английском Язык сохраняется в базе данных для каждого пользователя. ## Troubleshooting ### Бот не отвечает - Проверьте логи: `docker compose logs bot` - Убедитесь, что токен правильный в `.env` - Проверьте, что все сервисы запущены и доступны ### Сервис не работает - Проверьте логи сервиса: `cd -downloader && docker compose logs -f` - Проверьте URL в `.env` - Для Instagram: проверьте валидность cookies ### База данных не сохраняется - Проверьте права на папку `data/` - Убедитесь, что volume смонтирован в `docker-compose.yml` ## Лицензия MIT ## Поддержка При возникновении проблем создайте issue в репозитории или свяжитесь с автором: @rvrubel