Как я сделал Telegram-бота для скачивания ВК-Клипов
-
Дело было вечером, делать было нечего. Сидел, играл в Oblivion Remastered, и в голову ударила мысль:
«А можно ли сделать бота, который скачивает ВК-клипы удаляет водный знак VK Clips и сразу отправляет их в Телеграм?»Ответ: да, можно. И даже проще, чем я думал.
Ссылка на бота - https://t.me/vkclipssavebot
️ Что использовал?
- Python (хотел JS, но захотелось чего-то новенького)
- yt-dlp (скачивание видео)
- python-telegram-bot (общение с Телеграмом)
- dotenv (хранение токена)
- nest_asyncio (чтобы асинхронность не сломалась)
Пример кода: команда /start
Вот как выглядит простейший обработчик команды
/start
:async def start(update: Update, context: ContextTypes.DEFAULT_TYPE): await update.message.reply_text( "Привет! Отправь ссылку на ВК-клип, и я скачу его для тебя 🎬" )
Что делает этот код?
- Когда пользователь пишет
/start
— бот отвечает приветственным сообщением. - Всё. Никаких секретов.
Запуск бота
А вот как запускается сам бот:
async def main(): app = ApplicationBuilder().token("YOUR_BOT_TOKEN").build() app.add_handler(CommandHandler("start", start)) await app.run_polling()
Главное:
- Укажите токен из
@BotFather
. - Добавьте обработчики команд.
- Запустите через
asyncio.run(main())
.
Обработка ссылок
Если бот получает ссылку на ВК-клип, он:
- Показывает кнопки с выбором разрешения (360p, 480p, 720p).
- Скачивает видео через
yt-dlp
. - Проверяет размер (лимит Телеграма — 50 МБ для обычных ботов).
- Отправляет видео обратно пользователю.
Пример кода для кнопок:
keyboard = [ [InlineKeyboardButton(f"{res}p", callback_data=f"res_{res}") for res in ["360", "480", "720"]] ] await update.message.reply_text("Выберите разрешение:", reply_markup=InlineKeyboardMarkup(keyboard))
🧵 Асинхронность и многопользовательность
Бот умеет работать с несколькими пользователями одновременно. Для этого я использовал
Semaphore
:semaphore = asyncio.Semaphore(5) # До 5 загрузок одновременно async def button_handler(update: Update, context: ContextTypes.DEFAULT_TYPE): async with semaphore: # Логика загрузки и отправки видео
Зачем это нужно?
Чтобы бот не зависал, когда несколько человек лезут к нему с запросами.
Что дальше?
- Хочу обойти лимит Телеграма на 50 МБ (есть идеи, но это потом).
- Добавить поддержку других платформ (например, YouTube Shorts).
- Научить бота удалять водяные знаки (пока не разобрался, но над этим работаю).
Попробуйте сами!
Если кому-то интересно — пишите, поделюсь лайфхаками. А пока:
https://t.me/vkclipssavebot — качает ВК-клипы, пока ты играешь в Oblivion
P.S. Код не покажу — секрет фирмы
Но если хотите повторить — начните с
python-telegram-bot
иyt-dlp
. Всё работает))