mirror of https://github.com/Ruslan-Isaev/modules
Update youtube-loader.py
parent
9bba6ba512
commit
076389ee7d
|
@ -1,13 +1,22 @@
|
|||
version = (1, 0, 0)
|
||||
__version__ = (1, 1, 0)
|
||||
|
||||
# meta developer: @RUIS_VlP
|
||||
# meta developer: @RUIS_VlP, @RoKrz
|
||||
# requires: yt_dlp
|
||||
|
||||
import yt_dlp
|
||||
import uuid
|
||||
import os
|
||||
import re
|
||||
from .. import loader, utils
|
||||
|
||||
|
||||
def extract_youtube_link(text):
|
||||
if not text:
|
||||
return None
|
||||
match = re.search(r"(https?://)?(www\.)?(youtube\.com|youtu\.be)/[^\s]+", text)
|
||||
return match.group(0) if match else None
|
||||
|
||||
|
||||
async def download_video(url):
|
||||
output_dir = utils.get_base_dir()
|
||||
random_uuid = str(uuid.uuid4())
|
||||
|
@ -20,39 +29,88 @@ async def download_video(url):
|
|||
|
||||
with yt_dlp.YoutubeDL(ydl_opts) as ydl:
|
||||
info_dict = ydl.extract_info(url, download=True)
|
||||
video_ext = info_dict.get('ext', None) #расширение файла
|
||||
|
||||
video_ext = info_dict.get('ext', None)
|
||||
file_path = os.path.join(output_dir, f"{random_uuid}.{video_ext}")
|
||||
|
||||
title = info_dict.get('title', None)
|
||||
|
||||
return file_path, title
|
||||
|
||||
|
||||
def convert_markdown_to_html(template: str, link: str) -> str:
|
||||
return re.sub(r'\[([^\]]+)\]\(([^)]+)\)', r'<a href="\2">\1</a>', template).replace("{link}", link)
|
||||
|
||||
|
||||
@loader.tds
|
||||
class YouTube_DLDMod(loader.Module):
|
||||
"""Помогает скачивать видео с YouTube"""
|
||||
|
||||
strings = {
|
||||
"name": "YouTube-DLD",
|
||||
"no_link": "❌ <b>Пожалуйста, укажите ссылку на YouTube либо ответьте на сообщение с ней.</b>",
|
||||
"default_downloading": "📥 <b>Начинаю загрузку видео.</b>\n\nℹ️ <code>Это может занять до 5 минут, в зависимости от длины и качества видео.</code>",
|
||||
"default_error": "❌ <b>Ошибка!</b>\n\n<code>{}</code>",
|
||||
"default_response": "🎥 Вот [ваше видео]({link})!\n\n<code>{title}</code>",
|
||||
}
|
||||
|
||||
def __init__(self):
|
||||
self.config = loader.ModuleConfig(
|
||||
loader.ConfigValue(
|
||||
"show_link",
|
||||
True,
|
||||
"Показывать ссылку в сообщении?",
|
||||
validator=loader.validators.Boolean(),
|
||||
),
|
||||
loader.ConfigValue(
|
||||
"downloading_text",
|
||||
self.strings["default_downloading"],
|
||||
"Текст во время загрузки"
|
||||
),
|
||||
loader.ConfigValue(
|
||||
"error_text",
|
||||
self.strings["default_error"],
|
||||
"Текст ошибки. (используй {} для ошибки)"
|
||||
),
|
||||
loader.ConfigValue(
|
||||
"response_text",
|
||||
self.strings["default_response"],
|
||||
"Ответ после загрузки. (используй {link} для ссылки и {title} для названия видео)"
|
||||
),
|
||||
)
|
||||
|
||||
@loader.command()
|
||||
async def dlvideo(self, message):
|
||||
"""<link> - скачивает видео с ютуба"""
|
||||
"""<ссылка> или ответ на сообщение со ссылкой — скачивает видео с YouTube"""
|
||||
|
||||
args = utils.get_args_raw(message)
|
||||
if not args:
|
||||
await utils.answer(message, "❌ <b>Вы не указали ссылку</b>")
|
||||
reply = await message.get_reply_message()
|
||||
|
||||
link = extract_youtube_link(args) if args else None
|
||||
if not link and reply:
|
||||
link = extract_youtube_link(reply.raw_text)
|
||||
|
||||
if not link:
|
||||
await utils.answer(message, self.strings["no_link"])
|
||||
return
|
||||
link = args
|
||||
await utils.answer(message, "📥 <b>Начинаю загрузку видео.</b>\n\nℹ️ <code>Обычно приходится ждать ≈5 минут. Все зависит от длины и качества видео. А так же от вашего интернета.</code>")
|
||||
|
||||
await utils.answer(message, self.config["downloading_text"])
|
||||
|
||||
try:
|
||||
video, title = await download_video(link)
|
||||
print(video)
|
||||
if title:
|
||||
await utils.answer_file(message, video, caption=f"🎥 Вот ваше видео!\n\n<code>{title}</code>")
|
||||
|
||||
if self.config["show_link"]:
|
||||
caption_template = self.config["response_text"]
|
||||
caption = convert_markdown_to_html(caption_template, link)
|
||||
caption = caption.replace("{title}", title or "")
|
||||
else:
|
||||
await utils.answer_file(message, video, caption=f"🎥 Вот ваше видео!")
|
||||
caption = title or "Готово!"
|
||||
|
||||
await utils.answer_file(
|
||||
message,
|
||||
video,
|
||||
caption=caption,
|
||||
parse_mode="HTML"
|
||||
)
|
||||
|
||||
try:
|
||||
await message.delete()
|
||||
except:
|
||||
|
@ -62,9 +120,9 @@ class YouTube_DLDMod(loader.Module):
|
|||
except:
|
||||
pass
|
||||
except Exception as e:
|
||||
await utils.answer(message, f"❌ <b>Ошибка!</b>\n\n<code>{e}</code>")
|
||||
error_msg = self.config["error_text"].format(e)
|
||||
await utils.answer(message, error_msg)
|
||||
try:
|
||||
os.remove(video)
|
||||
except:
|
||||
pass
|
||||
return
|
||||
|
|
Loading…
Reference in New Issue