This commit is contained in:
2024-06-17 10:53:33 +03:00
commit a1da810c2d
22 changed files with 1253 additions and 0 deletions

71
downyoutube(OLD).py Normal file
View File

@@ -0,0 +1,71 @@
#!/usr/bin/python
# -*- coding: utf-8 -*-
import logging
import os
from aiogram import Bot, Dispatcher, types
from aiogram.utils import executor
from pytube import YouTube, request
import youtube_dl
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_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',
'cookies': COOKIES_FILE,
}
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:
await bot.send_video(message.chat.id, video, caption="Вот ваше видео с YouTube")
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)