Files
BOTGroupNetwork/downyoutube.py
2024-06-17 10:53:33 +03:00

69 lines
2.6 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/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)