телеграм бот что скидывает видосы в телегу по ссылке
Find a file
vrubelroman 772e9fd5b4
All checks were successful
CI/CD Pipeline / build-and-deploy (push) Successful in 1m47s
chore: remove obsolete per-folder scripts, add cookies-cron reference, update docs
- Remove get_cookies.sh (targets a container without yt-dlp, already
  broken), get_cookies_local.sh, start_all.sh/stop_all.sh — these
  implement the old per-service-compose startup that now conflicts
  with the unified root docker-compose.yml.
- Add cookies-cron/ — a reference copy of the scripts actually running
  via cron on the separate browser-equipped machine, with setup
  requirements and instructions for standing up a new cron host.
- Update README.md/ARCHITECTURE.md to describe the current unified
  docker-compose + CI/CD deploy flow and host-mounted cookies instead
  of the old per-folder workflow.
2026-06-30 22:16:40 +00:00
.forgejo/workflows ci: add Forgejo Actions CI/CD pipeline for build, push and prod deploy 2026-06-30 19:44:05 +00:00
cookies-cron chore: remove obsolete per-folder scripts, add cookies-cron reference, update docs 2026-06-30 22:16:40 +00:00
instagram-downloader chore: remove obsolete per-folder scripts, add cookies-cron reference, update docs 2026-06-30 22:16:40 +00:00
tiktok-downloader Fix YouTube 500 error (n-challenge) and Telegram callback_data overflow 2026-04-30 17:21:10 +03:00
vk-downloader fix: prevent VK downloader from blocking queue 2026-05-25 16:46:35 +00:00
yapfiles-downloader Fix YouTube 500 error (n-challenge) and Telegram callback_data overflow 2026-04-30 17:21:10 +03:00
youtube-downloader chore: remove obsolete per-folder scripts, add cookies-cron reference, update docs 2026-06-30 22:16:40 +00:00
.dockerignore Рефакторинг: микросервисная архитектура 2025-12-11 01:07:04 +03:00
.env.example fix: отправка видео как документ (без сжатия Telegram) и исправление format_id для точного выбора качества 2026-04-30 01:36:43 +03:00
.gitignore Исключить папки downloads/ из git 2025-12-11 01:07:23 +03:00
admin_bot.py feat(admin_bot): prepend service-message header to broadcasts 2026-06-30 20:48:57 +00:00
ARCHITECTURE.md chore: remove obsolete per-folder scripts, add cookies-cron reference, update docs 2026-06-30 22:16:40 +00:00
bot.py fix(bot): retry admin video upload on transient httpx transport errors 2026-06-30 20:31:37 +00:00
broadcast.py Обновлено подтверждение перед отправкой сообщения: добавлена обработка исключений для ввода пользователя, чтобы избежать ошибок при некорректном вводе. 2025-12-12 11:34:20 +03:00
docker-compose.prod.yml fix(cookies): mount youtube/instagram cookies from host instead of baking into image 2026-06-30 22:02:14 +00:00
docker-compose.yml fix(cookies): mount youtube/instagram cookies from host instead of baking into image 2026-06-30 22:02:14 +00:00
Dockerfile add admin bot 2025-12-20 22:17:20 +03:00
README.md chore: remove obsolete per-folder scripts, add cookies-cron reference, update docs 2026-06-30 22:16:40 +00:00
requirements.txt Рефакторинг: микросервисная архитектура 2025-12-11 01:07:04 +03:00

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)
  • Для 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
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/
cd instagram-downloader
./get_instagram_cookies.sh

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

Все 7 сервисов (бот, admin-бот, 5 загрузчиков) собираются и запускаются одной командой из корня проекта — единый docker-compose.yml уже содержит build-контексты для всех подпапок:

docker compose up -d --build

Перезапустить/пересобрать только один сервис (например, при правке youtube-downloader/app.py):

docker compose up -d --build youtube-downloader

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

# Проверка всех сервисов
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 позволяет отправить сообщение всем пользователям бота:

# Простое сообщение
./broadcast.py -y "Текст сообщения"

# С HTML-разметкой
./broadcast.py -y --html '<b>Важно!</b> Новая функция добавлена.'

# Из файла
./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 - скачивание видео (возвращает бинарные данные)
POST /download/stream
Content-Type: application/json

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

Cookies на проде (YouTube/Instagram)

В проде youtube_cookies.txt/instagram_cookies.txt монтируются в контейнеры с хоста (docker-compose.prod.yml), а не запекаются в образ — это позволяет обновлять их без пересборки/передеплоя. yt-dlp/app.py читают файл с диска при каждом запросе — рестарт контейнера не требуется.

Куки получает по крону (раз в 20 минут) отдельная машина с графическим окружением и реальным залогиненным браузером (на самом проде это сделать нельзя — там нет GUI/браузера), и разливает результат по scp сразу на прод и на тестовый стенд. Скрипты для этого, требования к cron-машине и инструкция по развёртыванию на новой машине — в cookies-cron/. Это копия того, что реально крутится на cron-машине; youtube-downloader/get_youtube_cookies.sh и instagram-downloader/get_instagram_cookies.sh в подпапках сервисов — более старые версии тех же скриптов, с тех пор разошедшиеся.

Обновление

Деплой на прод выполняется автоматически через Forgejo CI/CD (.forgejo/workflows/deploy.yml) при пуше в main: сборка всех 7 образов → push в registry → docker save/ssh/docker load на прод-хост (registry не доступен с внешнего VPS напрямую) → docker compose up -d --remove-orphans.

Для ручного локального обновления:

git pull
docker compose up -d --build

Локализация

Бот автоматически определяет язык пользователя из настроек Telegram:

  • Если язык начинается с ru — интерфейс на русском
  • Иначе — интерфейс на английском

Язык сохраняется в базе данных для каждого пользователя.

Troubleshooting

Бот не отвечает

  • Проверьте логи: docker compose logs bot
  • Убедитесь, что токен правильный в .env
  • Проверьте, что все сервисы запущены и доступны

Сервис не работает

  • Проверьте логи сервиса: docker compose logs -f <service>-downloader
  • Проверьте URL в .env
  • Для Instagram: проверьте валидность cookies

База данных не сохраняется

  • Проверьте права на папку data/
  • Убедитесь, что volume смонтирован в docker-compose.yml

Лицензия

MIT

Поддержка

При возникновении проблем создайте issue в репозитории или свяжитесь с автором: @rvrubel