Недавно писал про Качалку — бесплатную программу, которая скачивает видео с YouTube, TikTok, Instagram и VK. Друзья спросили: «а можно без установки, прямо в телеге?» Теперь можно: @kachalka_videobot. Без рекламы, без «подпишитесь на 5 каналов спонсоров». Расскажу, на какие грабли наступил.
Стена №1: 50 МБ
Обычный бот через api.telegram.org может отправить файл максимум 50 МБ. Для минутного TikTok хватает, для 10-минутного ролика с YouTube в 1080p — нет.
Первое решение — подбирать качество: сервер перебирает 1080 → 720 → 480 → 360 и берёт самое чёткое, что влезает в 47 МБ. Не влезает ничего — бот присылает ссылку на скачивание.
Работает, но хотелось честных 1080p.
Решение: свой сервер Bot API
У Telegram есть открытый telegram-bot-api. Если запустить его у себя с флагом --local, лимит на отправку становится 2000 МБ, а файл можно отдать прямо с диска, без загрузки по сети.
Собирается из исходников за 10–15 минут. Дальше:
Нужны
api_idиapi_hashс my.telegram.org.Бот делает
logOutу облачного API (вернуться назад можно только через 10 минут).Бот теперь стучится на
http://127.0.0.1:8081вместо api.telegram.org.
Грабли с ключами. my.telegram.org у меня не открывался: с VPN — «Sorry, too many tries», без VPN — сайт заблокирован у провайдера. Помогла вот эта статья на Хабре: прописать в hosts рабочий адрес my.telegram.org и зайти без VPN. Спасибо автору — без неё бот так и сидел бы на 50 МБ.
Грабли с путями. После переключения ни одно видео не ушло: «Telegram не принял файл». Оказалось, локальный сервер принимает файл с диска только как file:///путь/к/файлу. Голый /путь он считает ссылкой и молча ломается. Мой поддельный Telegram для тестов принимал что угодно, поэтому баг всплыл только в бою. В Python лечится одной строкой: Path(...).as_uri().
Итог: в личке видео до ~1,9 ГБ в оригинальном качестве. В группах по-прежнему держу до 47 МБ, чтобы не заваливать чат.
Бонус: повторы мгновенно
Telegram выдаёт каждому отправленному файлу file_id. Я храню пары «ссылка → file_id», и если ту же ссылку кидает второй человек, бот ничего не качает, а пересылает уже готовое за долю секунды. Популярные TikTok'и улетают мгновенно.
Стена №2: спамеры
Бесплатный бот и один сервер — идеальная мишень. Защита в несколько слоёв:
в боте: 3 ссылки разом, потом не чаще одной в 20 секунд; 25 в час, 100 и 3 ГБ в сутки на человека; очередь чата — 3, всего — 15;
флуд: больше 20 сообщений в минуту — бот перестаёт отвечать на 10 минут, потом на час, потом на сутки. Таким людям он пишет, что они отправлены в Азкабан;
на сервере: с одного адреса не больше 3 загрузок разом, общая очередь 25, дальше честное «сервер занят»; прямые эфиры и ссылки на внутренние адреса не качаем, одна загрузка не дольше 30 минут;
снаружи: бесплатное правило Rate limiting в Cloudflare: 40 запросов за 10 секунд с IP — блок;
изоляция: бот и качалка работают под разными пользователями systemd в «клетке»: качалка не видит токен бота, бот не видит чужие файлы.
Ещё приятная мелочь — очередь, которую видно: «Ты в очереди: впереди 2, это примерно полминуты». Люди спокойно ждут, когда понимают, сколько.
Как вообще качается YouTube осенью 2026
Частый вопрос в комментариях к прошлой статье. Коротко: yt-dlp + deno, yt-dlp обновляется сам несколько раз в день с проверкой и откатом, а YouTube идёт через сервер с «чистым» IPv4 — с адресов датацентров он требует войти в аккаунт. Без кук. IPv6 нашего второго сервера YouTube забанил целой подсетью, так что yt-dlp ходит только по IPv4 через SOCKS4. Иногда «not a bot» всё равно прилетает — это гонка вооружений.
Что ещё умеет бот
кнопка «Только звук — MP3» под каждым видео;
работает в группах: Shorts и TikTok качает сам, остальное — по просьбе;
встроенный режим: пишешь в любом чате
@kachalka_videobot ссылка— и видео отправляется прямо туда;фото и карусели из Instagram и TikTok — альбомом.
Попробовать: @kachalka_videobot. Программа для компьютера и исходники — github.com/kozliq/kachalka, сайт — kachalka.flownote.cc.
Если поделитесь, как боретесь со спамом в своих ботах, — буду рад почитать в комментариях.
