videoDownloadTGbot/README.md

222 lines
8.5 KiB
Markdown
Raw Normal View History

# 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 <repository_url>
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 '<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` - скачивание видео (возвращает бинарные данные)
```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 <service>-downloader && docker compose logs -f`
- Проверьте URL в `.env`
- Для Instagram: проверьте валидность cookies
### База данных не сохраняется
- Проверьте права на папку `data/`
- Убедитесь, что volume смонтирован в `docker-compose.yml`
## Лицензия
MIT
## Поддержка
При возникновении проблем создайте issue в репозитории или свяжитесь с автором: @rvrubel