телеграм бот что скидывает видосы в телегу по ссылке
Find a file
2025-12-12 11:25:25 +03:00
instagram-downloader добавлен скрипт отправки сообщений 2025-12-12 11:25:25 +03:00
vk-downloader вк вынесен в отдельный сервис 2025-12-10 16:14:26 +03:00
yapfiles-downloader подключил япфайл 2025-12-12 10:32:06 +03:00
youtube-downloader Рефакторинг: микросервисная архитектура 2025-12-11 01:07:04 +03:00
.dockerignore Рефакторинг: микросервисная архитектура 2025-12-11 01:07:04 +03:00
.env.example подключил япфайл 2025-12-12 10:32:06 +03:00
.gitignore Исключить папки downloads/ из git 2025-12-11 01:07:23 +03:00
ARCHITECTURE.md Рефакторинг: микросервисная архитектура 2025-12-11 01:07:04 +03:00
bot.py добавлена локализация и команда /support 2025-12-12 11:11:51 +03:00
broadcast.py добавлен скрипт отправки сообщений 2025-12-12 11:25:25 +03:00
docker-compose.yml подключил япфайл 2025-12-12 10:32:06 +03:00
Dockerfile Рефакторинг: микросервисная архитектура 2025-12-11 01:07:04 +03:00
get_cookies.sh инста и ютуб работают, вк пока нет 2025-12-10 14:46:09 +03:00
get_cookies_local.sh инста и ютуб работают, вк пока нет 2025-12-10 14:46:09 +03:00
README.md Рефакторинг: микросервисная архитектура 2025-12-11 01:07:04 +03:00
requirements.txt Рефакторинг: микросервисная архитектура 2025-12-11 01:07:04 +03:00

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)
  • Для Instagram: файл с cookies (см. раздел Instagram ниже)

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

1. Клонирование репозитория

git clone <repository_url>
cd videoDownloadBot

2. Настройка переменных окружения

Скопируйте .env.example в .env в корне проекта и заполните:

cp .env.example .env
nano .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://<ip>:5557)
  • INSTAGRAM_DOWNLOADER_URL — URL Instagram сервиса (для docker-compose: http://instagram-downloader:5000, для продакшена: http://<ip>:5556)
  • VK_DOWNLOADER_URL — URL VK сервиса (для docker-compose: http://vk-downloader:5000, для продакшена: http://<ip>:5555)

3. Настройка Instagram (опционально)

Если планируете скачивать видео с Instagram:

  1. Экспортируйте cookies из браузера (см. instagram-downloader/INSTAGRAM_COOKIES_INSTRUCTIONS.md)
  2. Сохраните файл как instagram_cookies.txt в папке instagram-downloader/
  3. Формат: Netscape cookies file

Быстрое получение cookies через скрипт:

cd instagram-downloader
./get_instagram_cookies.sh

Или обновление существующих cookies:

cd instagram-downloader
./update_instagram_cookies.sh

Примечание: Без cookies Instagram может блокировать запросы. При первом запуске обновите cookies вручную.

4. Запуск сервисов

Важно: Каждый сервис запускается отдельно на своем хосте (или на одном хосте, но отдельными командами).

Запуск основного бота

# Из корня проекта
docker compose up -d

Это запустит только основной Telegram бот.

Запуск сервисов загрузчиков

Каждый сервис запускается отдельно в своей папке:

# Запуск 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 адреса сервисов:

YOUTUBE_DOWNLOADER_URL=http://localhost:5557
INSTAGRAM_DOWNLOADER_URL=http://localhost:5556
VK_DOWNLOADER_URL=http://<ip_хоста_2>:5555

5. Проверка статуса

Проверить статус сервисов:

# Основной бот (из корня проекта)
docker compose ps

# Сервисы загрузчиков (из соответствующих папок)
cd youtube-downloader && docker compose ps
cd ../instagram-downloader && docker compose ps
cd ../vk-downloader && docker compose ps

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

# Основной бот (из корня проекта)
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 - скачивание видео (возвращает бинарные данные)

Пример запроса:

POST /download/stream
Content-Type: application/json

{
  "url": "https://youtube.com/watch?v=..."
}

Обновление

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

Остановка

# Остановить основной бот (из корня проекта)
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://<ip_хоста_2>: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 в репозитории.