Очередной Telegram бот для скачивания видео (который внезапно оказался нужным)
Мне надоело смотреть сериалы, где за одну серию ещё 20 занимает реклама. А я люблю, гоняя эллипсоид в зале, включить сериал - и убить двух зайцев. Решений в сети уже достаточно, но эти “подпишись на левый канал” каждую неделю - тоже надоели. И я решил сделать своего бота.
Спрос, который я не ожидал
Первую версию я запустил ещё в декабре, не рассчитывая ни на что.
Но сразу сделал настройки бота по золотым стандартам: заголовок, описание, поддержка двух языков, и конечно же у меня были логи для отладки процессов.
И я стал обращать внимание, что кроме меня ботом начали пользоваться и другие люди, 1-3 в день. Видимо органический поиск начал тут же давать свои плоды.
К концу декабря уже была сотня пользователей.
Кому хочется попробовать, бот из статьи: @bad_video_bot
Ни рекламы, ни подписок. Делал для себя.
Вторую сотню я набрал за первую половину января.
Рассказал о боте в своём недо-тг-канале, и разместил статью о моём эксперименте про youtube зеркало.
Теперь спортивный интерес, до скольки смогу разрастись пока всё не взорвётся.
Прогресс-бар
Фишка, которая мне нравится самому - это прогресс бар. Для больших видео, сразу видно сколько скачалось и сколько времени ещё примерно осталось. Обновляется это “на лету”, поэтому видно даже если вы ушли в общую ленту чатов. Это снижает тревожность пользователя.
Первая глупость
Развернул всё это на своём 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 часовые видео, а бот предлагает в итоге только аудио-дорожку скачать.
Такие мелочи неожиданно дают больше понимания людей, чем любая аналитика 🙂