teleloader_bot
Описание
Telegram‑бот для скачивания видео/аудио/субтитров с YouTube
Языки
- Python87,1%
- PowerShell7,7%
- Shell3,5%
- Dockerfile1,7%
TeleLoader Bot
Мощный и безопасный Telegram‑бот для скачивания видео/аудио/субтитров с YouTube и YouTube Shorts — с выбором качества, переводами (ru/en), рейт‑лимитером, облачным бэкапом (S3) и готовой Docker‑упаковкой. Основан на v20, , , .
✨ Возможности
- Принимает ссылки YouTube/Shorts → присылает видео (1080p/720p/480p), аудио (M4A/MP3) или субтитры (SRT).
- Inline‑клавиатура выбора качества/режима.
- Рейт‑лимитер и параллелизм (без перегрузки железа).
- Эфемерный кэш токенов для callback‑кнопок (устраняет
).Button_data_invalid - Фолбэк при больших файлах: загрузка в S3 и отдача ссылки.
- i18n (ru/en), /settings, /privacy, /stats (только для администратора).
- Готовые Dockerfile и docker-compose.yml с предустановленным
.ffmpeg
🚀 Быстрый старт
Вариант 1 — Docker (рекомендовано)
-
Скопируйте переменные окружения:
-
Откройте
и укажите токен бота от @BotFather:.env -
Запустите:
-
Напишите боту
в Telegram./start
В контейнере
уже установлен, ничего дополнительно ставить не нужно.ffmpeg
Вариант 2 — Локальный запуск
Windows
Linux/macOS
Требуется установленный
(или укажите путь вffmpegчерез.env).FFMPEG_LOCATION
⚙️ Переменные окружения (.env)
| Ключ | Назначение |
|---|---|
| Токен бота от @BotFather. Обязателен. |
| Telegram ID администратора для команды . Необязателен. |
| Порог отправки файлов в чат (байты), по умолчанию (≈ 50 MB). |
| Папка для временных файлов, по умолчанию . |
| URL БД SQLAlchemy. По умолчанию . |
| Имя S3‑бакета (если хотите отдавать крупные файлы ссылкой). |
| Ключ доступа AWS IAM. |
| Секрет AWS IAM. |
| Регион S3 (например, ). |
| для запуска через webhook, иначе polling. |
| Публичный HTTPS URL вебхука. |
| Адрес прослушивания (по умолчанию ). |
| Порт вебхука (по умолчанию ). |
| Путь к (папка или бинарник). Если не задан — ищется в . |
Пример минимального ``:
🧠 Команды бота
— приветствие, краткая инструкция./start— все возможности бота./help— язык, качество по умолчанию, режим «как документ»./settings— политика данных (что и как хранится)./privacy— статистика (только для/stats).ADMIN_USER_ID
Юзер‑флоу: отправляете ссылку → бот показывает кнопки → выбираете → получаете файл (или ссылку S3, если размер превышает ).
🏗 Архитектура и дерево проекта
Слои:
- Transport/UI: Telegram (
v20)python-telegram-bot - App:
(хэндлеры, i18n, рейт‑лимит, конкурентность)app/bot.py - Services:
(yt‑dlp),downloader.py(ffmpeg),transcode.py(размер/S3)storage.py - Persistence:
(SQLAlchemy, SQLite по умолчанию)models.py - Config:
(+dotenv)config.py - UI helpers:
,keyboards.pytexts.py - Glue: run.py
Дерево:
.
├─ run.py
├─ requirements.txt
├─ Dockerfile
├─ docker-compose.yml
├─ LICENSE
├─ README.md
├─ .gitignore
├─ .env.example
├─ scripts/
│ ├─ install_ffmpeg.ps1
│ └─ install_ffmpeg.sh
└─ app/
├─ __init__.py
├─ bot.py
├─ cache.py
├─ config.py
├─ downloader.py
├─ ffmpeg_guard.py
├─ keyboards.py
├─ models.py
├─ security.py
├─ storage.py
├─ texts.py
└─ transcode.py
Схема БД:
- user_settings(user_id PK, lang, default_quality, send_as_document)
- downloads(id PK, url, quality, filepath, size, created_at)
🧩 Технические детали
скачивает раздельные поток/аудио и соединяет черезyt-dlp→ безffmpegбудут ошибки merge.ffmpeg- Для длинных URL в callback‑кнопках используется эфемерный токен (22 символа) + кэш в памяти (TTL), чтобы не превышать лимит
на64 bytes.callback_data - Параллельные скачивания ограничены
.asyncio.Semaphore - Рейт‑лимитер (token‑bucket) защищает от спама.
- Очистка временных файлов — после каждой операции.
🐳 Docker
Файлы:
— базовый образ Python +Dockerfile(черезffmpeg).apt-get— быстрый запуск с примонтированнымиdocker-compose.ymlиtmp/.cache.sqlite
Запуск:
Остановка:
Логи:
🌐 Webhook‑режим (опционально)
-
В
включите:.env -
Прокиньте 443→8080 через обратный прокси (nginx/caddy/traefik) с валидным TLS.
-
Перезапустите сервис.
По умолчанию используется polling — он надёжнее для локальной разработки и простого деплоя.
☁️ S3 (большие файлы)
Заполните и в . Если итоговый файл превышает , бот попробует загрузить его в S3 и пришлёт HTTPS‑ссылку.
🔐 Безопасность
- Секреты только в ``/переменных окружения. Никогда не коммитьте токены.
- Рекомендовано периодически ротировать токен в @BotFather.
- URL валидируются (только YouTube/Shorts).
- Ограничение частоты и параллелизма защищают от DoS‑подобной нагрузки.
- В ответах пользователю минимум технических деталей при ошибках (без утечек).
🧪 Тестирование и отладка
- Локально:
и общайтесь с ботом в Telegram.python run.py - Проверьте:
,/start,/help,/settings,/privacy(для ADMIN_USER_ID), не‑YouTube ссылку (ожидаем отказ), частые запросы (должен сработать рейт‑лимит)./stats
🩺 Устранение неполадок
- `` — слишком длинный
. В этом проекте решено через краткие токены и кэш.callback_data - `` — установите
(см. скрипты вffmpeg) или укажитеscripts/вFFMPEG_LOCATION..env - `` — установите зависимости в активное venv:
.python -m pip install -r requirements.txt - **Смешение API **
— используйте** vs **и Python 3.12/3.11. На 3.13 рекомендуем ставить свежие колёса (python-telegram-bot==20.5сpip) или временно использовать 3.12.--no-cache-dir
📦 Совместимость
- Рекомендованный Python: 3.12 (поддерживается 3.11).
- Python 3.13: возможны нюансы при установке некоторых зависимостей; если столкнётесь — используйте Docker или 3.12.
🗺 План развития
- Очередь задач + прогресс‑индикаторы.
- История загрузок для пользователя.
- Автодетект музыки/подкастов, нормализация аудио.
- Доп. источники (TikTok/Reels) — при соблюдении правил платформ.
📄 Лицензия
MIT — см. файл .
🙋 Поддержка
Создавайте Issue в репозитории — приложите логи запуска, версию Python, ОС и шаги воспроизведения.