No description
  • Python 98.9%
  • Dockerfile 0.7%
  • Shell 0.2%
  • Makefile 0.2%
Find a file
2026-08-19 12:40:06 +02:00
src/teledl erros 2026-08-19 12:40:06 +02:00
tests signal handle 2026-08-19 10:00:36 +02:00
.env.example init 2026-08-19 09:19:57 +02:00
.gitignore init 2026-08-19 09:19:57 +02:00
docker-compose.yml fix name 2026-08-19 09:39:13 +02:00
docker-entrypoint.sh init 2026-08-19 09:19:57 +02:00
Dockerfile init 2026-08-19 09:19:57 +02:00
Makefile make push 2026-08-19 09:46:40 +02:00
PROJECT.md a 2026-08-19 09:37:17 +02:00
pyproject.toml init 2026-08-19 09:19:57 +02:00
README.md make push 2026-08-19 09:46:40 +02:00
TODO.md make push 2026-08-19 09:46:40 +02:00

teledl

Telegram-бот: кидаешь ссылку на видео — бот отвечает «скачиваю...», потом «загружаю...» и присылает файл. Качает через yt-dlp.

В группе качает только если бота упомянули: ссылка и @бот в одном сообщении, либо реплай на сообщение со ссылкой и @бот. Голую ссылку без упоминания бот не трогает. В личке качает только хозяин, упоминать не нужно. Если боту пишет кто-то другой в личку, ему приходит «запрос не авторизован», а хозяину — chat_id этого человека. Когда бота добавляют в группу, хозяин тоже получает отчёт.

Подробности — в PROJECT.md.

Что нужно заранее

  1. Бот у BotFather, токен в BOT_TOKEN.
  2. Свой числовой id в OWNER_CHAT_ID. Узнать можно у @userinfobot или аналога.
  3. В группе достаточно упоминания: privacy mode можно не трогать. Чтобы бот ещё видел и логировал весь чат, выключи privacy (BotFather → /setprivacy → Disable) или дай боту права читать сообщения.
  4. Локально — 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 формат меньше этого лимита; если такого нет — отвечает «невозможно».