demoss / src /engine /__init__.py
nothere990's picture
update
f993cdc
#!/usr/bin/env python3
# coding: utf-8
# ytdlbot - __init__.py.py
from urllib.parse import urlparse
from typing import Any, Callable
from engine.generic import YoutubeDownload
from engine.direct import DirectDownload
from engine.pixeldrain import pixeldrain_download
from engine.instagram import InstagramDownload
from engine.krakenfiles import krakenfiles_download
def youtube_entrance(client, bot_message, url):
youtube = YoutubeDownload(client, bot_message, url)
youtube.start()
def direct_entrance(client, bot_message, url):
dl = DirectDownload(client, bot_message, url)
dl.start()
# --- Handler for the Instagram class, to make the interface consistent ---
def instagram_handler(client: Any, bot_message: Any, url: str) -> None:
"""A wrapper to handle the InstagramDownload class."""
downloader = InstagramDownload(client, bot_message, url)
downloader.start()
DOWNLOADER_MAP: dict[str, Callable[[Any, Any, str], Any]] = {
"pixeldrain.com": pixeldrain_download,
"krakenfiles.com": krakenfiles_download,
"instagram.com": instagram_handler,
}
def special_download_entrance(client: Any, bot_message: Any, url: str) -> Any:
try:
hostname = urlparse(url).hostname
if not hostname:
raise ValueError(f"Could not parse a valid hostname from URL: {url}")
except (ValueError, TypeError) as e:
raise ValueError(f"Invalid URL format: {url}") from e
# Handle the special case for YouTube URLs first.
if hostname.endswith("youtube.com") or hostname == "youtu.be":
raise ValueError("ERROR: For YouTube links, just send the link directly.")
# Iterate through the map to find a matching handler.
for domain_suffix, handler_function in DOWNLOADER_MAP.items():
if hostname.endswith(domain_suffix):
return handler_function(client, bot_message, url)
raise ValueError(f"Invalid URL: No specific downloader found for {hostname}")