# Telegram Video Download Bot Telegram бот для скачивания видео с YouTube, Instagram и VK. Микросервисная архитектура с раздельными сервисами для каждого источника. ## Архитектура Проект разделен на микросервисы: - **Основной бот** (в корне проекта) - Telegram бот, обрабатывает сообщения и оркестрирует запросы к сервисам - **youtube-downloader** - сервис для скачивания с YouTube (порт 5557) - **instagram-downloader** - сервис для скачивания с Instagram (порт 5556) - **vk-downloader** - сервис для скачивания с VK (порт 5555) Каждый сервис работает в отдельном Docker контейнере и может быть развернут независимо. ## Возможности - 📹 Скачивание видео с YouTube - 📸 Скачивание видео с Instagram (требуются cookies) - 🎬 Скачивание видео с VK - 📊 Статистика скачанных видео и пользователей - 🔄 Автоматическое сохранение статистики в базу данных - 👥 Работа в группах с автоматическим обнаружением ссылок ## Требования - 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 # Для локальной разработки через docker-compose используются внутренние имена сервисов YOUTUBE_DOWNLOADER_URL=http://youtube-downloader:5000 INSTAGRAM_DOWNLOADER_URL=http://instagram-downloader:5000 VK_DOWNLOADER_URL=http://vk-downloader:5000 ``` - **TELEGRAM_BOT_TOKEN** — токен бота от @BotFather - **TELEGRAM_BOT_USERNAME** — username бота (без @), используется в подписи видео - **YOUTUBE_DOWNLOADER_URL** — URL YouTube сервиса (для docker-compose: `http://youtube-downloader:5000`, для продакшена: `http://:5557`) - **INSTAGRAM_DOWNLOADER_URL** — URL Instagram сервиса (для docker-compose: `http://instagram-downloader:5000`, для продакшена: `http://:5556`) - **VK_DOWNLOADER_URL** — URL VK сервиса (для docker-compose: `http://vk-downloader:5000`, для продакшена: `http://:5555`) ### 3. Настройка Instagram (опционально) Если планируете скачивать видео с Instagram: 1. Экспортируйте cookies из браузера (см. `instagram-downloader/INSTAGRAM_COOKIES_INSTRUCTIONS.md`) 2. Сохраните файл как `instagram_cookies.txt` в папке `instagram-downloader/` 3. Формат: Netscape cookies file **Быстрое получение cookies через скрипт:** ```bash cd instagram-downloader ./get_instagram_cookies.sh ``` Или обновление существующих cookies: ```bash cd instagram-downloader ./update_instagram_cookies.sh ``` **Примечание:** Без cookies Instagram может блокировать запросы. При первом запуске обновите cookies вручную. ### 4. Запуск сервисов **Важно:** Каждый сервис запускается отдельно на своем хосте (или на одном хосте, но отдельными командами). #### Запуск основного бота ```bash # Из корня проекта docker compose up -d ``` Это запустит только основной Telegram бот. #### Запуск сервисов загрузчиков Каждый сервис запускается отдельно в своей папке: ```bash # Запуск YouTube сервиса (порт 5557) cd youtube-downloader docker compose up -d # Запуск Instagram сервиса (порт 5556) cd ../instagram-downloader docker compose up -d # Запуск VK сервиса (порт 5555) cd ../vk-downloader docker compose up -d ``` **Порядок запуска:** Сначала запустите сервисы загрузчиков, затем основной бот. #### Раздельное развертывание на разных хостах (рекомендуется для продакшена) **Хост 1 (с VPN для YouTube/Instagram):** - YouTube сервис (порт 5557) - Instagram сервис (порт 5556) - Основной бот **Хост 2 (без VPN для VK):** - VK сервис (порт 5555) В `.env` файле в корне проекта на хосте 1 укажите IP адреса сервисов: ```env YOUTUBE_DOWNLOADER_URL=http://localhost:5557 INSTAGRAM_DOWNLOADER_URL=http://localhost:5556 VK_DOWNLOADER_URL=http://:5555 ``` ### 5. Проверка статуса Проверить статус сервисов: ```bash # Основной бот (из корня проекта) docker compose ps # Сервисы загрузчиков (из соответствующих папок) cd youtube-downloader && docker compose ps cd ../instagram-downloader && docker compose ps cd ../vk-downloader && docker compose ps ``` Просмотр логов: ```bash # Основной бот (из корня проекта) docker compose logs -f bot # Сервисы загрузчиков (из соответствующих папок) cd youtube-downloader && docker compose logs -f cd ../instagram-downloader && docker compose logs -f cd ../vk-downloader && docker compose logs -f ``` ## Использование 1. Найдите вашего бота в Telegram по username 2. Отправьте команду `/start` 3. Отправьте ссылку на видео (YouTube, Instagram или VK) 4. Дождитесь скачивания и получите файл ### Работа в группах Добавьте бота в группу и дайте ему права администратора (нужно право на удаление сообщений). После этого бот будет автоматически находить ссылки на видео в сообщениях участников, скачивать их и отправлять прямо в группу, заменяя исходное сообщение со ссылкой. ### Команды - `/start` — начало работы с ботом - `/stat` — статистика: количество пользователей и скачанных видео ## Структура проекта ``` videoDownloadBot/ ├── bot.py # Код основного Telegram бота ├── requirements.txt # Python зависимости бота ├── Dockerfile # Образ для бота ├── docker-compose.yml # Оркестратор всех сервисов ├── .env.example # Пример конфигурации ├── youtube-downloader/ # Сервис для YouTube │ ├── app.py # Flask API сервис │ ├── requirements.txt # Python зависимости │ ├── Dockerfile # Образ для YouTube сервиса │ └── docker-compose.yml # Конфигурация YouTube сервиса ├── instagram-downloader/ # Сервис для Instagram │ ├── app.py # Flask API сервис │ ├── requirements.txt # Python зависимости │ ├── Dockerfile # Образ для Instagram сервиса │ ├── docker-compose.yml # Конфигурация Instagram сервиса │ ├── instagram_cookies.txt # Cookies для Instagram (создать вручную) │ ├── get_instagram_cookies.sh # Скрипт для получения cookies │ ├── update_instagram_cookies.sh # Скрипт для обновления cookies │ ├── INSTAGRAM_COOKIES_INSTRUCTIONS.md # Инструкции по cookies │ └── README.md # Документация сервиса ├── vk-downloader/ # Сервис для VK │ ├── app.py # Flask API сервис │ ├── requirements.txt # Python зависимости │ ├── Dockerfile # Образ для VK сервиса │ └── docker-compose.yml # Конфигурация VK сервиса └── README.md # Этот файл ``` ## Порты сервисов - **Основной бот**: не требует внешних портов (работает через Telegram API) - **YouTube Downloader**: порт 5557 - **Instagram Downloader**: порт 5556 - **VK Downloader**: порт 5555 ## 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 build && docker compose up -d # Пересобрать и перезапустить каждый сервис загрузчика отдельно cd youtube-downloader && docker compose build && docker compose up -d cd ../instagram-downloader && docker compose build && docker compose up -d cd ../vk-downloader && docker compose build && docker compose up -d ``` ## Остановка ```bash # Остановить основной бот (из корня проекта) docker compose down # Остановить каждый сервис загрузчика отдельно cd youtube-downloader && docker compose down cd ../instagram-downloader && docker compose down cd ../vk-downloader && docker compose down ``` ## Развертывание на продакшене ### Вариант 1: Все на одном хосте (с VPN) 1. Настройте VPN для доступа к YouTube и Instagram 2. Запустите каждый сервис отдельно в своей папке 3. В `.env` в корне проекта укажите: `http://localhost:5557`, `http://localhost:5556`, `http://localhost:5555` ### Вариант 2: Раздельное развертывание (рекомендуется) **Хост 1 (с VPN):** - Основной бот - YouTube сервис - Instagram сервис - В `.env` в корне: `YOUTUBE_DOWNLOADER_URL=http://localhost:5557`, `INSTAGRAM_DOWNLOADER_URL=http://localhost:5556`, `VK_DOWNLOADER_URL=http://:5555` **Хост 2 (без VPN):** - VK сервис - В `.env` corebot на хосте 1: IP этого хоста **Преимущества:** - VK работает быстрее без VPN - Меньше нагрузка на VPN канал - Возможность масштабирования сервисов отдельно ## Troubleshooting ### Бот не отвечает - Проверьте логи: `docker compose logs bot` - Убедитесь, что токен правильный в `.env` - Проверьте, что все сервисы запущены и доступны ### YouTube/Instagram/VK не работает - Проверьте, что соответствующий сервис запущен: `docker compose ps` - Проверьте URL в `.env` corebot - Проверьте логи сервиса: `docker compose logs -f` - Для Instagram: проверьте наличие и валидность `instagram-downloader/instagram_cookies.txt` ### База данных не сохраняется - Проверьте права на папку `data/` в корне проекта - Убедитесь, что volume смонтирован в `docker-compose.yml` ## Лицензия MIT ## Поддержка При возникновении проблем создайте issue в репозитории.