Spaces:
Running
Running
| # Ultroid - UserBot | |
| # Copyright (C) 2021-2025 TeamUltroid | |
| # | |
| # This file is a part of < https://github.com/TeamUltroid/Ultroid/ > | |
| # PLease read the GNU Affero General Public License in | |
| # <https://www.github.com/TeamUltroid/Ultroid/blob/main/LICENSE/>. | |
| from . import get_help | |
| __doc__ = get_help("help_downloadupload") | |
| import asyncio | |
| import glob | |
| import os | |
| import time | |
| from datetime import datetime as dt | |
| from aiohttp.client_exceptions import InvalidURL | |
| from telethon.errors.rpcerrorlist import MessageNotModifiedError | |
| from pyUltroid.fns.helper import time_formatter | |
| from pyUltroid.fns.tools import get_chat_and_msgid, set_attributes | |
| from . import ( | |
| LOGS, | |
| ULTConfig, | |
| downloader, | |
| eor, | |
| fast_download, | |
| get_all_files, | |
| get_string, | |
| progress, | |
| time_formatter, | |
| ultroid_cmd, | |
| ) | |
| async def down(event): | |
| matched = event.pattern_match.group(1).strip() | |
| msg = await event.eor(get_string("udl_4")) | |
| if not matched: | |
| return await eor(msg, get_string("udl_5"), time=5) | |
| try: | |
| splited = matched.split(" | ") | |
| link = splited[0] | |
| filename = splited[1] | |
| except IndexError: | |
| filename = None | |
| s_time = time.time() | |
| try: | |
| filename, d = await fast_download( | |
| link, | |
| filename, | |
| progress_callback=lambda d, t: asyncio.get_event_loop().create_task( | |
| progress( | |
| d, | |
| t, | |
| msg, | |
| s_time, | |
| f"Downloading from {link}", | |
| ) | |
| ), | |
| ) | |
| except InvalidURL: | |
| return await msg.eor("`Invalid URL provided :(`", time=5) | |
| await msg.eor(f"`{filename}` `downloaded in {time_formatter(d*1000)}.`") | |
| async def download(event): | |
| match = event.pattern_match.group(1).strip() | |
| if match and "t.me/" in match: | |
| chat, msg = get_chat_and_msgid(match) | |
| if not (chat and msg): | |
| return await event.eor(get_string("gms_1")) | |
| match = "" | |
| ok = await event.client.get_messages(chat, ids=msg) | |
| elif event.reply_to_msg_id: | |
| ok = await event.get_reply_message() | |
| else: | |
| return await event.eor(get_string("cvt_3"), time=8) | |
| xx = await event.eor(get_string("com_1")) | |
| if not (ok and ok.media): | |
| return await xx.eor(get_string("udl_1"), time=5) | |
| s = dt.now() | |
| k = time.time() | |
| if hasattr(ok.media, "document"): | |
| file = ok.media.document | |
| mime_type = file.mime_type | |
| filename = match or ok.file.name | |
| if not filename: | |
| if "audio" in mime_type: | |
| filename = "audio_" + dt.now().isoformat("_", "seconds") + ".ogg" | |
| elif "video" in mime_type: | |
| filename = "video_" + dt.now().isoformat("_", "seconds") + ".mp4" | |
| try: | |
| result = await downloader( | |
| f"resources/downloads/{filename}", | |
| file, | |
| xx, | |
| k, | |
| f"Downloading {filename}...", | |
| ) | |
| except MessageNotModifiedError as err: | |
| return await xx.edit(str(err)) | |
| file_name = result.name | |
| else: | |
| d = "resources/downloads/" | |
| file_name = await event.client.download_media( | |
| ok, | |
| d, | |
| progress_callback=lambda d, t: asyncio.get_event_loop().create_task( | |
| progress( | |
| d, | |
| t, | |
| xx, | |
| k, | |
| get_string("com_5"), | |
| ), | |
| ), | |
| ) | |
| e = dt.now() | |
| t = time_formatter(((e - s).seconds) * 1000) | |
| await xx.eor(get_string("udl_2").format(file_name, t)) | |
| async def _(event): | |
| msg = await event.eor(get_string("com_1")) | |
| match = event.pattern_match.group(1) | |
| if match: | |
| match = match.strip() | |
| if not event.out and match == ".env": | |
| return await event.reply("`You can't do this...`") | |
| stream, force_doc, delete, thumb = ( | |
| False, | |
| True, | |
| False, | |
| ULTConfig.thumb, | |
| ) | |
| if "--stream" in match: | |
| stream = True | |
| force_doc = False | |
| if "--delete" in match: | |
| delete = True | |
| if "--no-thumb" in match: | |
| thumb = None | |
| arguments = ["--stream", "--delete", "--no-thumb"] | |
| if any(item in match for item in arguments): | |
| match = ( | |
| match.replace("--stream", "") | |
| .replace("--delete", "") | |
| .replace("--no-thumb", "") | |
| .strip() | |
| ) | |
| if match.endswith("/"): | |
| match += "*" | |
| results = glob.glob(match) | |
| if not results and os.path.exists(match): | |
| results = [match] | |
| if not results: | |
| try: | |
| await event.reply(file=match) | |
| return await event.try_delete() | |
| except Exception as er: | |
| LOGS.exception(er) | |
| return await msg.eor(get_string("ls1")) | |
| for result in results: | |
| if os.path.isdir(result): | |
| c, s = 0, 0 | |
| for files in get_all_files(result): | |
| attributes = None | |
| if stream: | |
| try: | |
| attributes = await set_attributes(files) | |
| except KeyError as er: | |
| LOGS.exception(er) | |
| try: | |
| file, _ = await event.client.fast_uploader( | |
| files, show_progress=True, event=msg, to_delete=delete | |
| ) | |
| await event.client.send_file( | |
| event.chat_id, | |
| file, | |
| supports_streaming=stream, | |
| force_document=force_doc, | |
| thumb=thumb, | |
| attributes=attributes, | |
| caption=f"`Uploaded` `{files}` `in {time_formatter(_*1000)}`", | |
| reply_to=event.reply_to_msg_id or event, | |
| ) | |
| s += 1 | |
| except (ValueError, IsADirectoryError): | |
| c += 1 | |
| break | |
| attributes = None | |
| if stream: | |
| try: | |
| attributes = await set_attributes(result) | |
| except KeyError as er: | |
| LOGS.exception(er) | |
| file, _ = await event.client.fast_uploader( | |
| result, show_progress=True, event=msg, to_delete=delete | |
| ) | |
| await event.client.send_file( | |
| event.chat_id, | |
| file, | |
| supports_streaming=stream, | |
| force_document=force_doc, | |
| thumb=thumb, | |
| attributes=attributes, | |
| caption=f"`Uploaded` `{result}` `in {time_formatter(_*1000)}`", | |
| ) | |
| await msg.try_delete() | |