| |
| |
| |
| |
| |
| |
|
|
| 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, |
| ) |
|
|
|
|
| @ultroid_cmd( |
| pattern="download( (.*)|$)", |
| ) |
| 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)}.`") |
|
|
|
|
| @ultroid_cmd( |
| pattern="dl( (.*)|$)", |
| ) |
| 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)) |
|
|
|
|
| @ultroid_cmd( |
| pattern="ul( (.*)|$)", |
| ) |
| 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() |
|
|