Полнофункциональный Telegram-бот для скачивания видео и аудио с популярных платформ.
Разработано DenisNekrasov.dev
- 📺 Поддержка множества платформ: YouTube, TikTok, Instagram, Twitter, Facebook, Reddit, Vimeo, Dailymotion, Twitch, Bilibili, VKontakte
- 🎵 Форматы: Видео (MP4, WebM) и аудио (MP3, M4A)
- ⚡ Асинхронная обработка: Фоновые загрузки через Celery
- 🛡️ Защита от спама: Rate limiting с Redis
- 📊 Мониторинг: Prometheus метрики и админ-панель
- 🔧 Масштабируемость: Kubernetes-ready с HPA
- 🐳 Контейнеризация: Docker и docker-compose
- 🔄 CI/CD: GitHub Actions с автоматическим деплоем
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
│ Telegram Bot │ │ FastAPI App │ │ Celery Worker │
│ (aiogram) │◄──►│ (Webhook) │◄──►│ (yt-dlp) │
└─────────────────┘ └─────────────────┘ └─────────────────┘
│ │ │
▼ ▼ ▼
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
│ Redis │ │ PostgreSQL │ │ File Storage │
│ (Rate Limit) │ │ (Metadata) │ │ (Temp Files) │
└─────────────────┘ └─────────────────┘ └─────────────────┘
- Backend: Python 3.11+, FastAPI, aiogram 3.x
- База данных: PostgreSQL, SQLAlchemy, Alembic
- Кэш: Redis
- Фоновые задачи: Celery
- Загрузка видео: yt-dlp
- Мониторинг: Prometheus, Flower
- Контейнеризация: Docker, Kubernetes
- CI/CD: GitHub Actions
- Python 3.11+
- PostgreSQL 15+
- Redis 7+
- Docker & Docker Compose
- Kubernetes (для продакшена)
git clone https://github.com/RoXyGeNOFF/SaveVideoBot.git
cd SaveVideoBot# Установить зависимости CLI
make cli-install
# Или вручную
pip install -r requirements-cli.txt
chmod +x savevideobot.py svb# Инициализация конфигурации
./svb config-init
# Или вручную
cp env.example .envОтредактируйте .env файл:
# Telegram Bot Configuration
BOT_TOKEN=your_telegram_bot_token_here
ADMIN_ID=123456789,987654321
# Database Configuration
POSTGRES_URL=postgresql://user:password@localhost:5432/botdb
# Redis Configuration
REDIS_URL=redis://localhost:6379/0
# Bot Mode (webhook or polling)
BOT_MODE=polling# Разработка (с CLI)
./svb dev
# Продакшен (с CLI)
./svb prod
# Или традиционно
docker-compose -f docker-compose.dev.yml up --build
docker-compose up --build# Установка зависимостей
pip install -r requirements.txt
# Запуск PostgreSQL и Redis
docker-compose -f docker-compose.dev.yml up db redis -d
# Применение миграций
alembic upgrade head
# Запуск бота
python -m app.bot
# Запуск Celery worker
celery -A app.celery_app worker --loglevel=info
# Запуск FastAPI
python -m app.main# Продакшен
docker build -t savevideobot .
# Разработка
docker build -f Dockerfile.dev -t savevideobot:dev .- app: Основное приложение (FastAPI + Bot)
- celery_worker: Celery worker для фоновых задач
- celery_beat: Celery beat для периодических задач
- flower: Мониторинг Celery
- db: PostgreSQL база данных
- redis: Redis кэш
- nginx: Reverse proxy (опционально)
# Создание namespace
kubectl apply -f k8s/namespace.yaml
# Настройка секретов
kubectl create secret generic savevideobot-secrets \
--from-literal=BOT_TOKEN=your_bot_token \
--from-literal=ADMIN_ID=123456789 \
--from-literal=POSTGRES_PASSWORD=your_password \
--from-literal=WEBHOOK_SECRET=your_webhook_secret \
--namespace=savevideobot
# Применение манифестов
kubectl apply -f k8s/configmap.yaml
kubectl apply -f k8s/redis-postgres.yaml
kubectl apply -f k8s/deployment.yaml
kubectl apply -f k8s/service.yaml
kubectl apply -f k8s/ingress.yaml
kubectl apply -f k8s/hpa.yaml
kubectl apply -f k8s/monitoring.yaml# Установка Helm chart
helm install savevideobot ./helm/savevideobot
# Обновление
helm upgrade savevideobot ./helm/savevideobot
# Удаление
helm uninstall savevideobot| Переменная | Описание | По умолчанию |
|---|---|---|
BOT_TOKEN |
Токен Telegram бота | - |
ADMIN_ID |
ID администратора | - |
POSTGRES_URL |
URL PostgreSQL | - |
REDIS_URL |
URL Redis | - |
BOT_MODE |
Режим бота (webhook/polling) | webhook |
WEBHOOK_URL |
URL для webhook | - |
RATE_LIMIT_REQUESTS |
Лимит запросов в минуту | 10 |
MAX_FILE_SIZE |
Максимальный размер файла (байты) | 500MB |
DOWNLOAD_TIMEOUT |
Таймаут загрузки (секунды) | 300 |
- YouTube (youtube.com, youtu.be)
- TikTok (tiktok.com)
- Instagram (instagram.com)
- Twitter/X (twitter.com, x.com)
- Facebook (facebook.com, fb.watch)
- Reddit (reddit.com)
- Vimeo (vimeo.com)
- Dailymotion (dailymotion.com)
- Twitch (twitch.tv)
- Bilibili (bilibili.com)
- VKontakte (vk.com)
savevideobot_download_requests_total- Общее количество запросовsavevideobot_download_duration_seconds- Время загрузкиsavevideobot_file_size_bytes- Размер файловsavevideobot_active_downloads- Активные загрузкиsavevideobot_rate_limit_hits_total- Срабатывания rate limit
SaveVideoBot включает мощный CLI для управления всеми аспектами системы:
# Основные команды
./svb dev # Запуск разработки
./svb prod # Запуск продакшена
./svb status # Статус системы
./svb logs # Просмотр логов
# Сервисы
./svb bot # Запуск бота
./svb api # Запуск API
./svb worker # Запуск Celery worker
# База данных
./svb migrate # Миграции БД
./svb db-reset # Сброс БД
# Kubernetes
./svb k8s-deploy # Деплой в K8s
./svb k8s-status # Статус K8s
# Полная справка
./svb helpПодробная документация CLI: CLI_USAGE.md
/health- Проверка здоровья/metrics- Prometheus метрики/api/stats- Статистика бота/api/requests- Список запросов/flower- Мониторинг Celery
Используйте команду /admin в Telegram для доступа к админ-панели:
- 📢 Рассылка сообщений - Отправка сообщений всем пользователям
- 📊 Статистика системы
- 👥 Топ пользователи
- 📺 Топ платформы
- 📋 Последние запросы
- 🔧 Системная информация
- 👥 Управление пользователями
/admin- Открыть админ-панель/broadcast- Рассылка сообщений/block_user <user_id>- Заблокировать пользователя/unblock_user <user_id>- Разблокировать пользователя/user_info <user_id>- Информация о пользователе/reset_user <user_id>- Сбросить лимиты пользователя
Проект включает полный CI/CD pipeline:
- Тестирование: pytest, flake8, black, isort
- Сборка: Docker образ
- Безопасность: Trivy сканирование
- Деплой: Автоматический деплой в staging/production
- Уведомления: Slack уведомления
.github/workflows/ci.yml- Основной CI/CD pipeline.github/workflows/cd.yml- Continuous Deployment
# Запуск всех тестов
pytest
# С покрытием кода
pytest --cov=app --cov-report=html
# Конкретный тест
pytest tests/test_video_downloader.py::TestVideoDownloader::test_detect_platform_youtube
# Линтинг
flake8 app/
black --check app/
isort --check-only app/POST /webhook
Content-Type: application/json
{
"update_id": 123456789,
"message": {
"message_id": 1,
"from": {
"id": 123456789,
"username": "user"
},
"text": "https://www.youtube.com/watch?v=dQw4w9WgXcQ"
}
}# Статистика
GET /api/stats
# Запросы пользователя
GET /api/users/{user_id}/requests
# Сброс лимитов
POST /api/users/{user_id}/reset-limits
# Поддерживаемые платформы
GET /api/platforms- Rate limiting для защиты от спама
- Валидация URL
- Ограничение размера файлов
- Автоматическая очистка временных файлов
- HTTPS для webhook
- Secrets management в Kubernetes
- Административные права с проверкой ID
- Текстовая рассылка - Отправка текстовых сообщений всем пользователям
- Фото с подписью - Отправка изображений с текстовой подписью
- Прогресс в реальном времени - Отображение статистики отправки
- Анти-флуд защита - Задержка между отправками
- Обработка ошибок - Пропуск заблокированных пользователей
- Откройте админ-панель (
/adminили кнопка "🛠 Административные инструменты") - Выберите "📢 Отправить сообщение всем пользователям"
- Введите текст или отправьте фото с подписью
- Дождитесь завершения рассылки
- Блокировка -
/block_user <user_id> - Разблокировка -
/unblock_user <user_id> - Информация -
/user_info <user_id> - Статистика - Просмотр количества активных/заблокированных пользователей
# Увеличение количества реплик
kubectl scale deployment savevideobot-app --replicas=5
# Автоматическое масштабирование (HPA)
kubectl apply -f k8s/hpa.yaml# Проверка подов
kubectl get pods -n savevideobot
# Логи приложения
kubectl logs -f deployment/savevideobot-app -n savevideobot
# Метрики
curl http://localhost:9090/metrics- Обновите
SUPPORTED_PLATFORMSвapp/config.py:
SUPPORTED_PLATFORMS = {
"newplatform.com": "NewPlatform",
# ... остальные платформы
}- Протестируйте с yt-dlp:
yt-dlp --list-formats "https://newplatform.com/video"- Добавьте тесты в
tests/test_video_downloader.py
savevideobot/
├── app/ # Основное приложение
│ ├── handlers/ # Обработчики команд
│ ├── services/ # Бизнес-логика
│ ├── utils/ # Утилиты
│ ├── bot.py # Telegram бот
│ ├── main.py # FastAPI приложение
│ └── celery_app.py # Celery конфигурация
├── k8s/ # Kubernetes манифесты
├── tests/ # Тесты
├── alembic/ # Миграции БД
├── docker-compose.yml # Docker Compose
├── Dockerfile # Docker образ
└── README.md # Документация
# Логи приложения
docker-compose logs app
# Логи Celery worker
docker-compose logs celery_worker
# Логи базы данных
docker-compose logs db- Бот не отвечает: Проверьте
BOT_TOKENи режим работы - Ошибки загрузки: Проверьте доступность yt-dlp и интернет
- Проблемы с БД: Проверьте подключение к PostgreSQL
- Rate limiting: Увеличьте лимиты или сбросьте кэш Redis
MIT License - см. файл LICENSE
- Fork репозитория
- Создайте feature branch (
git checkout -b feature/amazing-feature) - Commit изменения (
git commit -m 'Add amazing feature') - Push в branch (
git push origin feature/amazing-feature) - Откройте Pull Request
- 📧 Email: [email protected]
- 💬 Telegram: @RoXyGeNOFF
- 🐛 Issues: GitHub Issues
- yt-dlp - За загрузку видео
- aiogram - За Telegram Bot API
- FastAPI - За веб-фреймворк
- Celery - За фоновые задачи
⭐ Если проект вам понравился, поставьте звезду!