Очередной Telegram бот для скачивания видео (который внезапно оказался нужным)

Мне надоело смотреть сериалы, где за одну серию ещё 20 занимает реклама. А я люблю, гоняя эллипсоид в зале, включить сериал - и убить двух зайцев. Решений в сети уже достаточно, но эти “подпишись на левый канал” каждую неделю - тоже надоели. И я решил сделать своего бота.

Очередной Telegram бот для скачивания видео (который внезапно оказался нужным)

Спрос, который я не ожидал

Первую версию я запустил ещё в декабре, не рассчитывая ни на что.

Но сразу сделал настройки бота по золотым стандартам: заголовок, описание, поддержка двух языков, и конечно же у меня были логи для отладки процессов.

И я стал обращать внимание, что кроме меня ботом начали пользоваться и другие люди, 1-3 в день. Видимо органический поиск начал тут же давать свои плоды.

К концу декабря уже была сотня пользователей.

Кому хочется попробовать, бот из статьи: @bad_video_bot
Ни рекламы, ни подписок. Делал для себя.

Вторую сотню я набрал за первую половину января.
Рассказал о боте в своём недо-тг-канале, и разместил статью о моём эксперименте про youtube зеркало.

Теперь спортивный интерес, до скольки смогу разрастись пока всё не взорвётся.

Прогресс-бар

Фишка, которая мне нравится самому - это прогресс бар. Для больших видео, сразу видно сколько скачалось и сколько времени ещё примерно осталось. Обновляется это “на лету”, поэтому видно даже если вы ушли в общую ленту чатов. Это снижает тревожность пользователя.

4 часовой ролик скачивается за 5 минут, 1.5Гб.

Первая глупость

Развернул всё это на своём VPS в Москве, где приходилось почти постоянно подключать прокси. Но вечером youtube уходил в отказ, просто намертво. Поэтому буквально на днях бот переехал на новое место жительства, и показывает стабильную работу.

За 2 месяца - 3 версии

Т.к. всё начиналось “для себя”, делал бота я в свободное время, и на коленке. Но перфекционист внутри меня бушевал, и искал как улучшить всё это дело.

В конечном итоге сейчас у меня модульная архитектура:
videoAnalyzer - анализ видео через yt-dlp
videoDownloader - скачивание с отслеживанием прогресса
videoConverter - конвертация в формат, совместимый с Telegram (при необходимости)
taskQueue — система очередей
cache — кеширование метаданных и file_id для мгновенной отправки уже скачанных кем-либо видео.
errorHandler — централизованная обработка ошибок

Каждый модуль отвечает за одну задачу. Это упростило разработку и отладку.

Технические решения

1. Кеширование

Telegram возвращает file_id для каждого отправленного файла. Если хранить этот ID, можно отправить тот же файл мгновенно, без повторного скачивания. Пользователь видит молнию ⚡ рядом с качеством - значит файл уже в кеше и отправится мгновенно.

Если есть молния возле качества - видимо получите моментально. Его уже скачали до вас.
Если есть молния возле качества - видимо получите моментально. Его уже скачали до вас.

Выбор аудио-дорожки

Если у видео есть несколько языков, предлагаю на выбор Русский или Английский. Другие языки пока игнорирую.

Очередь задач с восстановлением

Бот сохраняет очередь. Если бот упал, при перезапуске он восстановит все задачи из очереди. Пользователь не потеряет свой запрос.

Прогресс-индикация

Пользователь видит, что происходит: "Анализ видео...", "Скачивание...", "Конвертация...", "Отправка...". Это снижает тревожность и количество вопросов "почему так долго, может зависло?".

Обработка rate limits

Telegram API имеет ограничения на количество запросов. Бот автоматически обрабатывает ошибки 429 (rate limit) и ждёт нужное время перед повторной попыткой.

Результаты

За месяц без рекламы и продвижения:

  • 200 пользователей
  • Тысячи скачанных видео
  • Стабильная работа

Пользователи приходят по органике и сарафану. Видимо, отсутствие рекламы и насильной подписки на левые каналы - это уже конкурентное преимущество.

Что дальше?

Планирую добавить:

  • Возможность сразу ставить очередь ссылок на скачивание, чтобы закинул, а спустя время у тебя пачка результата.
  • Разобраться, как добраться до ограничения файла в 4Гб, а не 2Гб.
  • Улучшить понимание размеров видео из ВК и РТ - где они явно не указаны. Сейчас расчет делается примерно на основе характеристик видео, но бывает, что расчеты делаются ошибочно и можно было бы дать качество лучше, или наоборот даже 720p весит больше 2Гб и в итоге ждал зря.

Технологический стек

  • Node.js — основной runtime
  • Grammy — библиотека для Telegram Bot API
  • yt-dlp — скачивание видео с различных платформ
  • ffmpeg — конвертация в совместимый формат (MP4 + H.264 + AAC)
  • Локальный Telegram Bot API сервер — для обхода ограничений при работе с большими файлами
  • Сервер ближе к YT/TG оказался самым стабильным вариантом

Забавное поведение

У меня фиксируются блокировки бота. Интересно же, что привело к блоку.

1 место: запускают бота, получают приветственное сообщение, блокируют. Это боты?

2 место: присылают ссылки на непонятные ресурсы. Естественно бот тоже ничего не качает. Чаще всего оказывается, что непонятный ресурс тянет видео с ютуба…

3 место: присылают ссылки на 8 часовые видео, а бот предлагает в итоге только аудио-дорожку скачать.

Такие мелочи неожиданно дают больше понимания людей, чем любая аналитика 🙂

Начать дискуссию