#!/usr/bin/python # -*- coding: utf-8 -*- import logging import os from aiogram import Bot, Dispatcher, types from aiogram.utils import executor import yt_dlp as youtube_dl # Ваш токен от BotFather API_TOKEN = '564432189:AAEF5uBBZZ3VLUl-njjwzDRlqF4HCA9ceGo' # Путь к файлу cookies.txt COOKIES_FILE = 'cookies.txt' # Настройка логирования с записью в файл logging.basicConfig( level=logging.INFO, format='%(asctime)s - %(name)s - %(levelname)s - %(message)s', handlers=[ logging.FileHandler('bot_down_tube_logs.log'), logging.StreamHandler() ] ) logger = logging.getLogger(__name__) # Инициализация бота и диспетчера bot = Bot(token=API_TOKEN) dp = Dispatcher(bot) # Обработчик команды /start @dp.message_handler(commands=['start']) async def send_welcome(message: types.Message): await message.reply("Привет! Я бот для скачивания видео с YouTube. Отправьте команду /download чтобы начать.") # Обработчик команды /download @dp.message_handler(commands=['download']) async def prompt_for_link(message: types.Message): await message.reply("Пожалуйста, отправьте ссылку на видео или Shorts с YouTube.") # Обработчик получения ссылки на YouTube @dp.message_handler() async def download_youtube_video(message: types.Message): link = message.text try: ydl_opts = { 'outtmpl': '%(title)s.%(ext)s', 'format': 'bestvideo+bestaudio/best', 'merge_output_format': 'mp4', } with youtube_dl.YoutubeDL(ydl_opts) as ydl: info_dict = ydl.extract_info(link, download=True) video_file = ydl.prepare_filename(info_dict) await message.reply("Видео скачивается, пожалуйста подождите...") with open(video_file, 'rb') as video: caption = info_dict['title'] # Добавляем название видео к подписи await bot.send_video(message.chat.id, video, caption=caption) os.remove(video_file) except Exception as e: logger.error(f"Ошибка при скачивании видео: {e}") await message.reply("Произошла ошибка при скачивании видео. Пожалуйста, попробуйте ещё раз.") if __name__ == '__main__': logger.info('Start polling.') executor.start_polling(dp, skip_updates=True)