- Python 98.9%
- Dockerfile 0.7%
- Shell 0.2%
- Makefile 0.2%
| src/teledl | ||
| tests | ||
| .env.example | ||
| .gitignore | ||
| docker-compose.yml | ||
| docker-entrypoint.sh | ||
| Dockerfile | ||
| Makefile | ||
| PROJECT.md | ||
| pyproject.toml | ||
| README.md | ||
| TODO.md | ||
teledl
Telegram-бот: кидаешь ссылку на видео — бот отвечает «скачиваю...», потом «загружаю...» и присылает файл. Качает через yt-dlp.
В группе качает только если бота упомянули: ссылка и @бот в одном сообщении, либо реплай на сообщение со ссылкой и @бот. Голую ссылку без упоминания бот не трогает. В личке качает только хозяин, упоминать не нужно. Если боту пишет кто-то другой в личку, ему приходит «запрос не авторизован», а хозяину — chat_id этого человека. Когда бота добавляют в группу, хозяин тоже получает отчёт.
Подробности — в PROJECT.md.
Что нужно заранее
- Бот у BotFather, токен в
BOT_TOKEN. - Свой числовой id в
OWNER_CHAT_ID. Узнать можно у @userinfobot или аналога. - В группе достаточно упоминания: privacy mode можно не трогать. Чтобы бот ещё видел и логировал весь чат, выключи privacy (
BotFather→/setprivacy→ Disable) или дай боту права читать сообщения. - Локально — Python 3.12+ и
ffmpeg(без него часть сайтов отдаст файл, который Telegram не примет как видео).
Запуск локально
python3 -m venv .venv
source .venv/bin/activate
pip install -e ".[dev]"
cp .env.example .env
# заполни BOT_TOKEN и OWNER_CHAT_ID
python -m teledl
Тесты:
pytest
Запуск в Docker
Образ собирается и уходит в registry так (нужен docker login git.elfov.net):
make push
На сервере достаточно docker-compose.yml и .env:
cp .env.example .env
# заполни BOT_TOKEN и OWNER_CHAT_ID
docker login git.elfov.net
docker compose pull
docker compose up -d
Временные файлы пишутся в volume teledl_data (DOWNLOAD_DIR=/data).
Переменные окружения
| Переменная | Обязательная | По умолчанию | Смысл |
|---|---|---|---|
BOT_TOKEN |
да | — | токен BotFather |
OWNER_CHAT_ID |
да | — | id хозяина |
DOWNLOAD_DIR |
нет | ./tmp |
каталог временных файлов |
MAX_FILE_MB |
нет | 50 |
лимит отправки в Telegram |
YTDLP_FORMAT |
нет | mp4 / best | формат yt-dlp |
DOWNLOAD_TIMEOUT_SEC |
нет | 300 |
таймаут одной загрузки |
Обычный Bot API принимает файлы до 50 МБ. Бот просит у yt-dlp формат меньше этого лимита; если такого нет — отвечает «невозможно».