Fix bot polling, downloads, and file delivery

This commit is contained in:
vrubel 2026-01-28 14:45:56 +03:00
commit 8a21cbe18a
16 changed files with 1712 additions and 0 deletions

117
README.md Normal file
View file

@ -0,0 +1,117 @@
# YouTube → MP3 Telegram Service
Сервис для скачивания аудио из YouTube видео через Telegram ботов.
## Описание
Сервис состоит из двух Telegram ботов:
1. **User-bot** — принимает ссылки на YouTube видео и возвращает MP3 файлы
2. **Admin-bot** — получает уведомления о всех скачанных файлах с метаданными
## Требования
- Docker и Docker Compose
- Ubuntu 24.04 (или другая Linux система)
- Токены Telegram ботов
## Установка и запуск
1. Скопируйте `.env.example` в `.env`:
```bash
cp .env.example .env
```
2. Отредактируйте `.env` и укажите токены ваших ботов:
```env
IS_PROD=false
TG_USER_BOT_TOKEN_TEST=your_test_user_bot_token
TG_ADMIN_BOT_TOKEN_TEST=your_test_admin_bot_token
TG_USER_BOT_TOKEN_PROD=your_prod_user_bot_token
TG_ADMIN_BOT_TOKEN_PROD=your_prod_admin_bot_token
```
3. Запустите сервис:
```bash
docker compose up -d --build
```
4. Просмотр логов:
```bash
docker compose logs -f
```
5. Остановка сервиса:
```bash
docker compose down
```
## Использование
### User-bot
Отправьте боту ссылку на YouTube видео:
- `https://www.youtube.com/watch?v=...`
- `https://youtu.be/...`
Бот обработает запрос и отправит вам MP3 файл с названием, идентичным названию видео.
### Admin-bot
1. Напишите admin-bot команду `/start` для регистрации в качестве администратора
2. Вы будете получать уведомления о всех скачанных файлах:
- Название файла
- Username пользователя (или user_id)
- Исходная ссылка на видео
- Сам MP3 файл
## Особенности
- **Очередь задач**: Все запросы обрабатываются последовательно (FIFO)
- **Безопасные имена файлов**: Автоматическая очистка запрещённых символов
- **Обработка ошибок**: Информативные сообщения об ошибках
- **Логирование**: Подробные логи всех операций
- **Временные файлы**: Автоматическое удаление после отправки
## Структура проекта
```
.
├── app/
│ ├── __init__.py
│ ├── main.py # Главный файл запуска
│ ├── config.py # Конфигурация
│ ├── user_bot.py # User-bot
│ ├── admin_bot.py # Admin-bot
│ ├── queue_manager.py # Менеджер очереди
│ ├── youtube_downloader.py # Скачивание и конвертация
│ └── admin_manager.py # Управление администраторами
├── docker-compose.yml
├── Dockerfile
├── requirements.txt
├── .env.example
└── README.md
```
## Переменные окружения
- `IS_PROD` — режим работы (`true`/`false`)
- `TG_USER_BOT_TOKEN_PROD` — токен user-bot для продакшена
- `TG_ADMIN_BOT_TOKEN_PROD` — токен admin-bot для продакшена
- `TG_USER_BOT_TOKEN_TEST` — токен user-bot для теста
- `TG_ADMIN_BOT_TOKEN_TEST` — токен admin-bot для теста
- `ADMIN_CHAT_ID` — (опционально) ID чата для отправки уведомлений
- `WORKDIR` — рабочая директория для временных файлов (по умолчанию `/data`)
- `LOG_LEVEL` — уровень логирования (по умолчанию `INFO`)
## Логи
Логи доступны через:
```bash
docker compose logs -f
```
Или для конкретного сервиса:
```bash
docker compose logs -f youtube-mp3-service
```