* Ultroid 2025 Co-authored-by: New-dev0 <New-dev0@users.noreply.github.com> Co-authored-by: Amit Sharma <buddhhu@users.noreply.github.com> Co-authored-by: TechiError <techierror@users.noreply.github.com> Co-authored-by: Aditya <me@xditya.me> Co-authored-by: Arnab Paryali <Arnabxd@users.noreply.github.com> Co-authored-by: hellboi_atul <hellboi-atul@users.noreply.github.com> Co-authored-by: sppidy <sppidy@users.noreply.github.com>
223 lines
6.7 KiB
Python
223 lines
6.7 KiB
Python
# 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,
|
|
)
|
|
|
|
|
|
@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()
|