Ultroid v0.0.7 Fixes 24/05

ChangeLog - https://t.me/TheUltroid/44

Co-authored-by: Anonymous <69723581+New-dev0@users.noreply.github.com>
Co-authored-by: Amit Sharma <48654350+buddhhu@users.noreply.github.com>
Co-authored-by: 1Danish-00 <danish@ultroid.tech>
This commit is contained in:
Danish
2021-05-24 20:09:49 +05:30
committed by GitHub
parent e01a5844cb
commit 6cc2e1907c
26 changed files with 563 additions and 198 deletions

View File

@@ -16,11 +16,13 @@
"env": {
"API_ID": {
"description": "You api id, from my.telegram.org or @ScrapperRoBot.",
"value": ""
"value": "",
"required": false
},
"API_HASH": {
"description": "You api hash, from my.telegram.org or @ScrapperRoBot.",
"value": ""
"value": "",
"required": false
},
"SESSION": {
"description": "Your session string. Can be added now, or after deploy. (The bot will NOT work without a session string!!)",

View File

@@ -69,13 +69,18 @@ async def update(eve):
if Var.HEROKU_API:
import heroku3
heroku = heroku3.from_key(Var.HEROKU_API)
heroku_app = None
heroku_applications = heroku.apps()
try:
heroku = heroku3.from_key(Var.HEROKU_API)
heroku_app = None
heroku_applications = heroku.apps()
except BaseException:
return await eve.edit(
"`Invalid Heroku credentials for updating userbot dyno.`"
)
for app in heroku_applications:
if app.name == Var.HEROKU_APP_NAME:
heroku_app = app
if heroku_app is None:
if not heroku_app:
await eve.edit("`Invalid Heroku credentials for updating userbot dyno.`")
repo.__del__()
return
@@ -99,18 +104,6 @@ async def update(eve):
repo.__del__()
return
await eve.edit("`Successfully Updated!\nRestarting, please wait...`")
elif Var.HEROKU_API is None:
try:
ups_rem.pull(ac_br)
except GitCommandError:
repo.git.reset("--hard", "FETCH_HEAD")
await updateme_requirements()
await eve.edit(
"`Successfully Updated!\nBot is restarting... Wait for a second!`"
)
os.system("git pull"), os.system(
"pip3.9 install -U -r requirements.txt"
), os.execl(sys.executable, sys.executable, "-m", "pyUltroid")
else:
try:
ups_rem.pull(ac_br)

View File

@@ -30,7 +30,7 @@ except ModuleNotFoundError:
start_time = time.time()
ultroid_version = "v0.0.7"
ultroid_version = "v0.0.7.1"
OWNER_NAME = ultroid_bot.me.first_name
OWNER_ID = ultroid_bot.me.id

View File

@@ -45,13 +45,6 @@ async def ult(ult):
except BaseException:
await eor(ult, "Error 🤔 occured.")
else:
# if BOT_MODE:
# await ultroid_bot.send_message(
# ult.chat_id,
# f"Bot of {ultroid_bot.me.first_name}",
# buttons=[Button.inline(text="Open Help", data="open")],
# )
# return
try:
results = await ultroid_bot.inline_query(tgbot, "ultd")
except BotMethodInvalidError:

View File

@@ -155,9 +155,10 @@ async def when_ultd_added_to_chat(event):
async def leave_ch_at(event):
cht = event.data_match.group(1).decode("UTF-8")
ch_id, client = cht.split("|")
name = (await event.get_chat()).title
if client == "bot":
name = (await asst.get_entity(int(ch_id))).title
await asst.delete_dialog(int(ch_id))
elif client == "user":
name = (await ultroid_bot.get_entity(int(ch_id))).title
await ultroid_bot.delete_dialog(int(ch_id))
await event.edit(f"Left `{name}`")

View File

@@ -38,7 +38,7 @@ import heroku3
import requests
from git import Repo
from pyUltroid import __version__ as UltVer
from telethon import __version__
from telethon import __version__, events
from telethon.errors.rpcerrorlist import ChatSendMediaForbiddenError
from . import *
@@ -98,10 +98,14 @@ async def lol(ult):
await eor(ult, als, link_preview=False)
@ultroid_cmd(
pattern="ping$",
)
@ultroid_bot.on(events.NewMessage(pattern=f"{HNDLR}ping"))
async def _(event):
if event.fwd_from:
return
if not event.sender_id == OWNER_ID:
if not is_sudo(event.sender_id):
if udB.get(OWNER_ID):
return
start = dt.now()
x = await eor(event, "`Pong !`")
end = dt.now()
@@ -145,10 +149,13 @@ async def shutdownbot(ult):
await shutdown(ult)
@ultroid_cmd(
pattern="logs",
)
async def get_logs(event):
@ultroid_bot.on(events.NewMessage(pattern=f"{HNDLR}logs"))
async def _(event):
if event.fwd_from:
return
if not event.sender_id == OWNER_ID:
if not is_sudo(event.sender_id):
return
try:
opt = event.text.split(" ", maxsplit=1)[1]
except IndexError:

View File

@@ -78,6 +78,12 @@ async def _(e):
stdout=asyncio.subprocess.PIPE,
stderr=asyncio.subprocess.PIPE,
)
if proce.returncode is None:
proce = await asyncio.create_subprocess_shell(
f'ffmpeg -hide_banner -loglevel quiet -progress {progress} -i """{file.name}""" -preset ultrafast -vcodec libx265 -crf {crf} """{out}""" -y',
stdout=asyncio.subprocess.PIPE,
stderr=asyncio.subprocess.PIPE,
)
while proce.returncode != 0:
await asyncio.sleep(3)
with open(progress, "r+") as fil:

View File

@@ -13,6 +13,12 @@
• `{i}eval <cmds>`
Evaluate python commands on telegram.
Shortcuts:
client = bot = event.client
e = event
p = print
reply = await event.get_reply_message()
chat = event.chat_id
• `{i}sysinfo`
Shows System Info.
@@ -163,15 +169,15 @@ async def _(event):
async def aexec(code, event):
e = message = event
client = event.client
exec(
f"async def __aexec(e, client): "
+ "\n message = event = e"
+ "\n reply = await event.get_reply_message()"
+ "\n chat = e.chat_id"
+ "".join(f"\n {l}" for l in code.split("\n")),
)
return await locals()["__aexec"](e, e.client)
return await locals()["__aexec"](event, event.client)
HELP.update({f"{__name__.split('.')[1]}": f"{__doc__.format(i=HNDLR)}"})

View File

@@ -35,14 +35,14 @@ async def evalJs(
os.system(f"node ./src/ecmaHelper/eval.d.js")
if os.path.exists("./src/ecmaHelper/evalJs.result.d.txt"):
await ultroid_bot.send_file(
event.chat.id,
event.chat_id,
"./src/ecmaHelper/evalJs.result.d.txt",
force_document=True,
caption=f"**☞ evalJS\n\n• Command:**\n`{command}` \n\n**• TimeTaken:**\n`{time.time() - startTime:.2f}s` \n\n**• Result:**\n`[Info]: Uploaded File For Better Visualisation Of Indents.`",
)
else:
await ultroid_bot.send_file(
event.chat.id,
event.chat_id,
"./src/ecmaHelper/evalJs.result.d.txt",
force_document=True,
caption=f"**☞ evalJS\n\n• Command:**\n`{command}` \n\n**• TimeTaken:**\n`{time.time() - startTime:.2f}` \n\n**• Result:**\n`[Warning]: Unexpected Error Occured !`",

View File

@@ -67,21 +67,28 @@ async def _(event):
except IndexError:
REASON = "#TBMassBanned"
else:
arg = event.text.split(" ", maxsplit=2)
try:
REASON = "#TBMassBanned"
arg = event.text.split()
if len(arg) == 2:
FBAN = arg[1]
REASON = arg[2]
except IndexError:
try:
FBAN = arg[1]
except BaseException:
return await msg.edit("No user was designated.")
REASON = "#TBMassBanned"
elif len(arg) > 2:
FBAN = arg[1]
REASON = event.text.split(maxsplit=2)[-1]
else:
return await msg.edit("No user was designated.")
if FBAN.startswith("@"):
usr = FBAN
else:
try:
usr = int(FBAN)
except BaseException:
return await msg.edit("Give username or id.")
try:
uid = int(FBAN)
except ValueError:
x = await ultroid(GetFullUserRequest(FBAN))
uid = x.user.id
x = await ultroid_bot.get_entity(usr)
uid = x.id
except BaseException:
return await msg.edit("Incorrect user was designated.")
if str(uid) in DEVLIST:
return await msg.edit("The user is my Dev and cannot be FBanned!")
@@ -90,7 +97,6 @@ async def _(event):
chat = int(udB.get("FBAN_GROUP_ID"))
else:
chat = await event.get_chat()
fedList = []
if not len(fedList):
for a in range(3):

View File

@@ -50,7 +50,9 @@ from telethon.tl.types import ChatAdminRights
from . import *
@ultroid_cmd(pattern="gpromote ?(.*)")
@ultroid_cmd(
pattern="gpromote ?(.*)",
)
async def _(e):
if not e.out and not is_fullsudo(e.sender_id):
return await eod(e, "`This Command Is Sudo Restricted.`")
@@ -225,7 +227,9 @@ async def _(e):
return await eor(ev, f"Promoted {name.first_name} in Total : {c} {key} chats.")
@ultroid_cmd(pattern="gdemote ?(.*)")
@ultroid_cmd(
pattern="gdemote ?(.*)",
)
async def _(e):
if not e.out and not is_fullsudo(e.sender_id):
return await eod(e, "`This Command Is Sudo Restricted.`")
@@ -401,21 +405,12 @@ async def _(e):
)
async def _(e):
xx = await eor(e, "`UnGbanning...`")
if e.is_private:
userid = (await e.get_chat()).id
elif e.reply_to_msg_id:
if e.reply_to_msg_id:
userid = (await e.get_reply_message()).sender_id
elif e.pattern_match.group(1):
if (e.pattern_match.group(1)).isdigit():
try:
userid = (await e.client.get_entity(int(e.pattern_match.group(1)))).id
except ValueError as err:
return await eod(xx, f"{str(err)}", time=5)
else:
try:
userid = (await e.client.get_entity(str(e.pattern_match.group(1)))).id
except ValueError as err:
return await eod(xx, f"{str(err)}", time=5)
userid = await get_user_id(e.pattern_match.group(1))
elif e.is_private:
userid = (await e.get_chat()).id
else:
return await eod(xx, "`Reply to some msg or add their id.`", time=5)
name = (await e.client.get_entity(userid)).first_name
@@ -444,13 +439,7 @@ async def _(e):
return await eor(e, "`This Command Is Sudo Restricted.`")
xx = await eor(e, "`Gbanning...`")
reason = ""
if e.is_private:
userid = (await e.get_chat()).id
try:
reason = e.text.split(" ", maxsplit=1)[1]
except IndexError:
reason = ""
elif e.reply_to_msg_id:
if e.reply_to_msg_id:
userid = (await e.get_reply_message()).sender_id
try:
reason = e.text.split(" ", maxsplit=1)[1]
@@ -458,20 +447,17 @@ async def _(e):
reason = ""
elif e.pattern_match.group(1):
usr = e.text.split(" ", maxsplit=2)[1]
if (e.pattern_match.group(1)).isdigit():
try:
userid = (await e.client.get_entity(int(usr))).id
except ValueError as err:
return await eod(xx, f"{str(err)}", time=5)
else:
try:
userid = (await e.client.get_entity(str(usr))).id
except ValueError as err:
return await eod(xx, f"{str(err)}", time=5)
userid = await get_user_id(usr)
try:
reason = e.text.split(" ", maxsplit=2)[2]
except IndexError:
reason = ""
elif e.is_private:
userid = (await e.get_chat()).id
try:
reason = e.text.split(" ", maxsplit=1)[1]
except IndexError:
reason = ""
else:
return await eod(xx, "`Reply to some msg or add their id.`", tome=5)
name = (await e.client.get_entity(userid)).first_name
@@ -556,21 +542,12 @@ async def gucast(event):
)
async def gkick(e):
xx = await eor(e, "`Gkicking...`")
if e.is_private:
userid = (await e.get_chat()).id
elif e.reply_to_msg_id:
if e.reply_to_msg_id:
userid = (await e.get_reply_message()).sender_id
elif e.pattern_match.group(1):
if (e.pattern_match.group(1)).isdigit():
try:
userid = (await e.client.get_entity(int(e.pattern_match.group(1)))).id
except ValueError as err:
return await eod(xx, f"{str(err)}", time=5)
else:
try:
userid = (await e.client.get_entity(str(e.pattern_match.group(1)))).id
except ValueError as err:
return await eod(xx, f"{str(err)}", time=5)
userid = await get_user_id(e.pattern_match.group(1))
elif e.is_private:
userid = (await e.get_chat()).id
else:
return await eod(xx, "`Reply to some msg or add their id.`", time=5)
name = (await e.client.get_entity(userid)).first_name
@@ -596,21 +573,12 @@ async def _(e):
if not e.out and not is_fullsudo(e.sender_id):
return await eor(e, "`This Command Is Sudo Restricted.`")
xx = await eor(e, "`Gmuting...`")
if e.is_private:
userid = (await e.get_chat()).id
elif e.reply_to_msg_id:
if e.reply_to_msg_id:
userid = (await e.get_reply_message()).sender_id
elif e.pattern_match.group(1):
if (e.pattern_match.group(1)).isdigit():
try:
userid = (await e.client.get_entity(int(e.pattern_match.group(1)))).id
except ValueError as err:
return await eod(xx, f"{str(err)}", time=5)
else:
try:
userid = (await e.client.get_entity(str(e.pattern_match.group(1)))).id
except ValueError as err:
return await eod(xx, f"{str(err)}", time=5)
userid = await get_user_id(e.pattern_match.group(1))
elif e.is_private:
userid = (await e.get_chat()).id
else:
return await eod(xx, "`Reply to some msg or add their id.`", tome=5)
name = (await e.client.get_entity(userid)).first_name
@@ -637,21 +605,12 @@ async def _(e):
)
async def _(e):
xx = await eor(e, "`UnGmuting...`")
if e.is_private:
userid = (await e.get_chat()).id
elif e.reply_to_msg_id:
if e.reply_to_msg_id:
userid = (await e.get_reply_message()).sender_id
elif e.pattern_match.group(1):
if (e.pattern_match.group(1)).isdigit():
try:
userid = (await e.client.get_entity(int(e.pattern_match.group(1)))).id
except ValueError as err:
return await eod(xx, f"{str(err)}", time=5)
else:
try:
userid = (await e.client.get_entity(str(e.pattern_match.group(1)))).id
except ValueError as err:
return await eod(xx, f"{str(err)}", time=5)
userid = await get_user_id(e.pattern_match.group(1))
elif e.is_private:
userid = (await e.get_chat()).id
else:
return await eod(xx, "`Reply to some msg or add their id.`", time=5)
name = (await e.client.get_entity(userid)).first_name
@@ -692,7 +651,9 @@ async def _(e):
pass
@ultroid_cmd(pattern="listgban")
@ultroid_cmd(
pattern="listgban",
)
async def list_gengbanned(event):
users = gbanned_user()
x = await eor(event, get_string("com_1"))
@@ -725,7 +686,9 @@ async def list_gengbanned(event):
await x.edit(gbanned_users)
@ultroid_cmd(pattern="gstat ?(.*)")
@ultroid_cmd(
pattern="gstat ?(.*)",
)
async def gstat_(e):
xx = await eor(e, get_string("com_1"))
if e.is_private:

View File

@@ -165,7 +165,7 @@ async def setgb(event):
await eor(x, "`Goodbye note saved`")
elif r and r.text:
add_goodbye(event.chat_id, r.message, None)
await eor(x, "`Goddbye note saved`")
await eor(x, "`Goodbye note saved`")
else:
await eod(x, "`Reply to message which u want to set as goodbye`")

View File

@@ -15,6 +15,7 @@
"""
import glob
import os
import random
import time
@@ -38,6 +39,8 @@ async def logo_gen(event):
if hasattr(temp.media, "document"):
if "font" in temp.file.mime_type:
font_ = await temp.download_media()
elif (".ttf" in temp.file.name) or (".otf" in temp.file.name):
font_ = await temp.download_media()
elif "pic" in mediainfo(temp.media):
bg_ = await temp.download_media()
else:
@@ -60,14 +63,12 @@ async def logo_gen(event):
id_ = random.choice(pics)
bg_ = await id_.download_media()
if not font_:
fpath_ = "resources/fonts/"
f = random.choice(os.listdir(fpath_))
font_ = fpath_ + f
# next level logic, ignore
if len(name) < 8:
fpath_ = glob.glob("resources/fonts/*")
font_ = random.choice(fpath_)
if len(name) <= 8:
fnt_size = 150
strke = 10
elif len(name) > 10:
elif len(name) >= 9:
fnt_size = 50
strke = 5
else:

View File

@@ -46,6 +46,8 @@ TMP_DOWNLOAD_DIRECTORY = "resources/downloads/"
pattern="setbio ?(.*)",
)
async def _(ult):
if not ult.out and not is_fullsudo(ult.sender_id):
return await eod(ult, "`This Command Is Sudo Restricted.`")
ok = await eor(ult, "...")
set = ult.pattern_match.group(1)
try:
@@ -64,6 +66,8 @@ async def _(ult):
pattern="setname ?((.|//)*)",
)
async def _(ult):
if not ult.out and not is_fullsudo(ult.sender_id):
return await eod(ult, "`This Command Is Sudo Restricted.`")
ok = await eor(ult, "...")
names = ult.pattern_match.group(1)
first_name = names
@@ -91,32 +95,28 @@ async def _(ult):
pattern="setpic$",
)
async def _(ult):
ok = await eor(ult, "...")
if not ult.out and not is_fullsudo(ult.sender_id):
return await eod(ult, "`This Command Is Sudo Restricted.`")
if not ult.is_reply:
return await eod(ult, "`Reply to a Media..`")
reply_message = await ult.get_reply_message()
await ok.edit("`Downloading that picture...`")
if not os.path.isdir(TMP_DOWNLOAD_DIRECTORY):
os.makedirs(TMP_DOWNLOAD_DIRECTORY)
photo = None
ok = await eor(ult, "...")
replfile = await reply_message.download_media()
file = await ultroid_bot.upload_file(replfile)
mediain = mediainfo(reply_message.media)
try:
photo = await ultroid_bot.download_media(reply_message, TMP_DOWNLOAD_DIRECTORY)
if "pic" in mediain:
await ultroid_bot(UploadProfilePhotoRequest(file))
elif "gif" or "video" in mediain:
await ultroid_bot(UploadProfilePhotoRequest(video=file))
else:
return await ok.edit("`Invalid MEDIA Type !`")
await ok.edit("`My Profile Photo has Successfully Changed !`")
except Exception as ex:
await ok.edit("Error occured.\n`{}`".format(str(ex)))
else:
if photo:
await ok.edit("`Uploading it to my profile...`")
file = await ultroid_bot.upload_file(photo)
try:
await ultroid_bot(UploadProfilePhotoRequest(file))
except Exception as ex:
await ok.edit("Error occured.\n`{}`".format(str(ex)))
else:
await ok.edit("`My profile picture has been changed !`")
os.remove(replfile)
await asyncio.sleep(10)
await ok.delete()
try:
os.remove(photo)
except Exception as ex:
LOGS.exception(ex)
# delete profile pic(s)
@@ -126,6 +126,8 @@ async def _(ult):
pattern="delpfp ?(.*)",
)
async def remove_profilepic(delpfp):
if not delpfp.out and not is_fullsudo(delpfp.sender_id):
return await eod(delpfp, "`This Command Is Sudo Restricted.`")
ok = await eor(delpfp, "...")
group = delpfp.text[8:]
if group == "all":

View File

@@ -61,7 +61,9 @@ async def _(ult):
ok = await eor(ult, "`Deleting data from Redis ...`")
try:
key = ult.pattern_match.group(1)
udB.delete(key)
k = udB.delete(key)
if k == 0:
return await ok.edit("`No Such Key.`")
await ok.edit(f"`Successfully deleted key {key}`")
except BaseException:
await ok.edit("`Something Went Wrong`")

View File

@@ -33,7 +33,7 @@ async def size(e):
img = await ultroid_bot.download_media(r.media)
im = Image.open(img)
x, y = im.size
await k.edit(f"Dimension Of This Image Is\n`{x} : {y}`")
await k.edit(f"Dimension Of This Image Is\n`{x} x {y}`")
os.remove(img)

View File

@@ -149,7 +149,6 @@ async def hehe(args):
user.username = user.first_name
message = await args.get_reply_message()
photo = None
emojibypass = False
is_anim = False
emoji = None
if message and message.media:
@@ -166,7 +165,6 @@ async def hehe(args):
in message.media.document.attributes
):
emoji = message.media.document.attributes[1].alt
emojibypass = True
elif "video" in message.media.document.mime_type.split("/"):
await xx.edit(f"`{random.choice(KANGING_STR)}`")
xy = await message.download_media()
@@ -186,7 +184,6 @@ async def hehe(args):
if isinstance(attribute, DocumentAttributeSticker):
emoji = attribute.alt
emojibypass = True
is_anim = True
photo = 1
else:
@@ -198,8 +195,7 @@ async def hehe(args):
if photo:
splat = args.text.split()
if not emojibypass:
emoji = "🔰"
emoji = "🏵"
pack = 1
if len(splat) == 3:
pack = splat[2] # User sent ultroid_both

View File

@@ -28,16 +28,11 @@ from . import *
pattern="addsudo ?(.*)",
)
async def _(ult):
if not ult.out and not is_fullsudo(ult.sender_id):
return await eod(ult, "`This Command is Sudo Restricted!..`")
inputs = ult.pattern_match.group(1)
if Var.BOT_MODE:
try:
if ult.sender_id != int(Redis(OWNER_ID)):
return await eod(ult, "`Sudo users can't add new sudos!`", time=10)
except BaseException:
pass
else:
if ult.sender_id != ultroid_bot.uid:
return await eod(ult, "`Sudo users can't add new sudos!`", time=10)
if BOT_MODE and ult.sender_id != int(Redis(OWNER_ID)):
return await eod(ult, "`Sudo users can't add new sudos!`", time=10)
ok = await eor(ult, "`Updating SUDO Users List ...`")
if ult.reply_to_msg_id:
replied_to = await ult.get_reply_message()
@@ -88,20 +83,15 @@ async def _(ult):
pattern="delsudo ?(.*)",
)
async def _(ult):
if not ult.out and not is_fullsudo(ult.sender_id):
return await eod(ult, "`This Command is Sudo Restricted!..`")
inputs = ult.pattern_match.group(1)
if Var.BOT_MODE:
try:
if ult.sender_id != int(Redis(OWNER_ID)):
return await eod(
ult,
"You are sudo user, You cant add other sudo user.",
time=5,
)
except BaseException:
pass
else:
if ult.sender_id != ultroid_bot.uid:
return await eor(ult, "You are sudo user, You cant add other sudo user.")
if BOT_MODE and ult.sender_id != int(Redis(OWNER_ID)):
return await eod(
ult,
"You are sudo user, You cant add other sudo user.",
time=5,
)
ok = await eor(ult, "`Updating SUDO Users List ...`")
if ult.reply_to_msg_id:
replied_to = await ult.get_reply_message()

View File

@@ -39,7 +39,6 @@ from asyncio.exceptions import TimeoutError
from pathlib import Path
import cv2
import emoji
from googletrans import Translator
from hachoir.metadata import extractMetadata
from hachoir.parser import createParser
@@ -72,8 +71,6 @@ async def _(event):
lan = input or "en"
else:
return await eod(xx, f"`{hndlr}tr LanguageCode` as reply to a message", time=5)
text = emoji.demojize(text.strip())
lan = lan.strip()
translator = Translator()
try:
tt = translator.translate(text, dest=lan)
@@ -218,18 +215,14 @@ async def _(e):
)
taime = time.time()
foile = await uploader("circle.mp4", "circle.mp4", taime, z, "Uᴘʟᴀᴅɪɴɢ...")
f = "circle.mp4"
metadata = extractMetadata(createParser(f))
metadata = extractMetadata(createParser("circle.mp4"))
duration = metadata.get("duration").seconds
height = metadata.get("height")
width = metadata.get("width")
attributes = [video(duration=duration, w=width, h=height, round_message=True)]
attributes = [video(duration=duration, w=320, h=320, round_message=True)]
await e.client.send_file(
e.chat_id,
foile,
thumb=thumb,
reply_to=a,
video_note=True,
attributes=attributes,
)
await z.delete()

View File

@@ -16,6 +16,11 @@ from telethon.tl.functions.channels import ExportMessageLinkRequest as GetLink
from . import *
ULTPIC = "resources/extras/inline.jpg"
CL = udB.get("INLINE_PIC")
if CL:
ULTPIC = CL
@ultroid_cmd(pattern="update$")
async def _(e):
@@ -24,12 +29,12 @@ async def _(e):
if m:
x = await ultroid_bot.asst.send_file(
int(udB.get("LOG_CHANNEL")),
"resources/extras/inline.jpg",
ULTPIC,
caption="• **Update Available** •",
force_document=False,
buttons=Button.inline("Changelogs", data="changes"),
)
Link = (await ultroid_bot(GetLink(x.peer_id.channel_id, x.id))).link
Link = (await ultroid_bot(GetLink(x.chat_id, x.id))).link
await eor(
e,
f'<strong><a href="{Link}">[ChangeLogs]</a></strong>',
@@ -51,7 +56,7 @@ async def updava(event):
await event.delete()
await ultroid_bot.asst.send_file(
int(udB.get("LOG_CHANNEL")),
"resources/extras/inline.jpg",
ULTPIC,
caption="• **Update Available** •",
force_document=False,
buttons=Button.inline("Changelogs", data="changes"),

View File

@@ -188,7 +188,10 @@ async def stats(
unread_mentions += dialog.unread_mentions_count
unread += dialog.unread_count
stop_time = time.time() - start_time
ct = (await ultroid_bot(GetBlockedRequest(1, 0))).count
try:
ct = (await ultroid_bot(GetBlockedRequest(1, 0))).count
except AttributeError:
ct = 0
full_name = inline_mention(await ultroid_bot.get_me())
response = f"🔸 **Stats for {full_name}** \n\n"
response += f"**Private Chats:** {private_chats} \n"

View File

@@ -10,7 +10,7 @@
• `{i}ytsa <(youtube) search query>`
Search and download audio from youtube.
• `{i}ytsv <(youtube) link>`
• `{i}ytsv <(youtube) search query>`
Search and download video from youtube.
"""

View File

@@ -1 +1 @@
py-Ultroid==2021.5.22
py-Ultroid==2021.5.24

View File

@@ -18,6 +18,7 @@ PyPDF2
psutil
pytz
requests>=2.18.4
screen
scikit-image
selenium
speedtest-cli==2.1.3
@@ -40,3 +41,4 @@ pyyaml
hachoir
aria2p
gdown
qrcode

197
strings/strings/fa.yml Normal file
View File

@@ -0,0 +1,197 @@
name: Persian
natively: Farsi
authors:
- rez4ie
# commons
com_1: "`یکم صبر کن...`"
com_2: "`دارم میگردم...`"
# help
help_1: "`{}` اصن همچین دستوری ندارم من"
help_2: "ربات جواب نداد \n دستور `{}restart` رو بفرست."
help_3: "`لطفا حالت inline mode را برای ربات دستیارت از طریق ` @Botfather روشنش کن."
# autopic
autopic_1: "یه متن بهم بده تا جستجو کنم اسکل"
autopic_2: "چیزی برای `{}` پیدا نکردم"
autopic_3: "یافتم `{}`!\nاز الان ببعد عکس پروفایلت اتوماتیکه... !"
# inline
inline_1: "[Uʟᴛʀɪᴅ Sᴘᴘʀᴛ](t.me/ultroidsupport)\n\n
**منوی کمکی برای {}.\n\n
افزونه ها ~ {}**"
inline_2: "[Uʟᴛʀɪᴅ Sᴘᴘʀᴛ](t.me/ultroidsupport)\n\n
**منوی کمکی برای {}.\n\n
افزونه های کمکی ~ {}**"
inline_3: "[Uʟᴛʀɪᴅ Sᴘᴘʀᴛ](t.me/ultroidsupport)\n\n
**منوی کمکی برای {}.\n\n
افزونه های کمکی ~ {}\n\n
دستور **`.setredis ADDONS True`** رو برای فعال کردن افزونه های کمکی بفرست.**"
inline_4: "** ربات {}\n\nفهرست اصلی\n\nافزونه ها ~ {}\nافزونه های کمکی ~ {}\nتمام دستورات ~ {}**"
inline_5: "**فهرستو بستی**"
# tagnotif
tagnot_1: "{} شما در {}\n\n```{}``` تگ شدید\n\n[📨 Message 📨]({})"
tagnot_2: "{} شما در {} تگ شدید\n\n [📨 Message 📨]({})"
# whisper
wspr_1: "@{} پیام مخفی برای شما.\nاین پیام را بعد از خواندن پاک کنید.\nدر غیر اینصورت پیام بعدی بروزرسانی نخواهد شد."
wspr_2: "پیام"
# afk
afk_1: "`الان انلاینم\n\n
واسه ~ {} یه مدتی نبودم`"
afk_2: "#حالت_آفلاین\n
اکانتتو از حالت آفلاین بکش بیرون.\n
رفته بودم برای `{}`"
afk_3: "`الان نمیتونم پیام بدم.\n
آخرین بازدید {} قبل.`\n\n
**دلیل:** `{}`"
afk_4: "`الان نمیتونم پیام بدم.\n\n
آخرین بازدید {} قبل.`"
afk_5: "`من آفلاین شدم :D`\n\n
**دلیل:** `{}`"
afk_6: "دارم آفلاین میشم"
afk_7: "الان آفلاینم به دلیل {}"
afk_8: "الان آفلاینم"
# bot
alive_1: "**ربات کمکی آلتروید...**\n\n
**{}**\n\n
┏━━━━━━━━━━━━━━━━━━━━━\n
┣ **مالک** - `{}`\n
┣ **ورژن** - `{}`\n
┣ **Py-Ultroid** - `{}`\n
┣ **مدت بیداری** - `{}`\n
┣ **ورژن پایتون** - `{}`\n
┣ **ورژن تله تون** - `{}`\n
┣ **شاخه** - `{}`\n
┗━━━━━━━━━━━━━━━━━━━━━"
تاریخچه: "**Heroku** تاریخچه ربات.\n [اینجا] هم پیستش کردم({})!"
پینگ: "**پونگ !!** `{}میلی ثانیه`\n**مدت بیداری ربات** - `{}`"
استفاده: "**⚙️ استفاده از سیستم ⚙️**:\n\n
-> **استفاده سیستم برای** `{}`:\n
• **{}ساعت** **{}دقیقه** |** `[{}%]`\n
-> **مقدار زمان باقیمانده برای سیستم در این ماه**:\n
• **{}ساعت** **{}دقیقه |** `[{}%]`\n\n
**فضای کلی هارد دیسک**: `{}`\n
**استفاده شده**: `{}`\n
**آزاد**: `{}`\n\n
**📊 استفاده داده 📊\n
**آپلود**: `{}`\n
**دانلود**: `{}`\n\n
**پردازنده**: `{}%`\n
**حافضه موقت**: `{}%`\n
**هارد دیسک**: `{}%`"
shutdown: "خدافظ {}.\n`در حال خاموش شدن...`"
# broadcast
bd_1: "`دارم به دیتابیس اضافش میکنم...`"
bd_2: "`دارم تمام کانالای ادمین رو به دیتابیس اضافه میکنم...`"
bd_3: "**و تمام.**\nچت هایی که هنوز تو دیتابیس بودن: {}\nاونایی که تازه اضافه شدن: {}"
bd_4: "کانال اضافه شد!"
bd_5: "`به دیتابیس اضافه شد!`"
bd_6: "`این کانال همین الانشم ذخیره شده!`"
# carbon
carbon_1: "صبر کن..."
carbon_2: "تبدیل به کد شده توسط [{}](tg://user?id={})"
# chats
chats_1: "`صبر کن...`"
chats_2: "`نمیتونم این چت رو پاک کنم`"
chats_3: "`من که مدیر نیستم`"
chats_4: "#حذف شد\n{} رو حذف کردم"
chats_5: "گروه [{}]({}) ساخته شد رئیس!"
chats_6: "به ما @TeamUltroid بپیوندید"
# converter
cvt_1: "به یه عکس/ویدیو/گیف یا سند ریپلای کن."
cvt_2: "اسم و پسوند فایلو بهم بده"
cvt_3: "`صبر کن...`"
cvt_4: "به یه رسانه(عکس/ویدیو/گیف) ریپلای کن"
# core
core_1: "ماژول یافت شد"
core_2: "{}.py از دستور .paste استفاده کن تا توی neko و raw پیستش کنم.."
core_3: "دوباره بگردم..؟"
core_4: "ماژول {} وجود نداره"
core_5: "{}.py از دستور .paste استفاده کن تا توی neko و raw پیستش کنم.."
core_6: "ماژول {}.py رو پیدا نکردم"
core_7: "همچین ماژولی ندارم"
core_8: "هیچ ماژولی با این اسم نیست\n {}.py"
core_9: "`اسم افزونه یی که میخوای از حافظم بکشم بیرونو بگو`"
core_10: "**افزونه** `{}` **رو انداختم بیرون.**"
core_11: "**نمیتونم افزونه های رسمی رباتو بندازم بیرون**"
core_12: "**افزونه یی با این نام وجود نداره**\n `{}`"
core_13: "`نام افزونه یی که میخوای حذف کنی رو بفرست`"
core_14: "**افزونه ی** `{}` **رو با موفقیت پاک کردم.**"
core_15: "**نمیشه افزونه های رسمی رو پاک کرد**"
core_16: "`اسم افزونه یی که میخوای بارگذاری بشه رو بنویس`"
core_17: "`{}` **بارگذاری شد**"
core_18: "**نمیشه** `{}` *رو بارگذاری کرد* **بخاطر خطای زیر.**\n`{}`"
# fedutils
sf_1: "در حال بن فدرالی"
sf_2: "`کاربرو مشخص کن`"
sf_3: "تو نمیتونی ایشونو بن کنی شاسکول خفه شو!"
sf_4: "`یا رز جواب نمیده یا افزونه خراب شده`"
sf_5: "از دستورات فدرالی فقط هر 5 دقیقه یکبار میتونی استفاده کنی"
sf_6: "5 دقیقه صبر کن"
sf_7: "نتونستم لیست مدیرای فدرالی رو پیدا کنم. در حال تلاش مجدد ({}/3)..."
sf_8: "خاطا"
sf_9: "لیست مدیرای فدرالو پیدا نکردم."
sf_10: "در حال بن فدرالی در فدرال(های) {}."
sf_11: "آیدی مشخص شده برای بن فدرالی درست نیست."
sf_12: "{} شامل نیستند."
sf_13: "خطا در اخراج فایل ادمین فدرالی.\n{}"
sf_14: "ابربن فدرالی تمام شد.\nتمام فدرال ها - {}.\nآنهایی که شامل نیستند - {}.\n فدرال های {} مبتلا شدند.\n#TB"
sf_15: "درحال آنبن فدرالی عظیم..."
sf_16: "ابرآنبن فدرالی تمام شد .\nتعداد فدرال ها - {}.\nآنهایی که شامل نیستند - {}.\n فدرال های {} مبتلا شدند.\n#TB"
sf_17: "`آیدی طرفو بهم بده یا به مسیجش ریپلای بده تا وضعیت فدرالی شو چک کنم`"
sf_18: "لیست فدرال هایی که {} توش بن شده.\n\nبا استفاده از آلتروید جمع آوری شد."
sf_19: "**خاطا**\n @MissRose_Bot `رو آنبلاک کن` `بعد دوباره تلاش کن!"
sf_20: "`در حال استخراج معلومات...`"
sf_21: "\n\nمعلومات فدرالی استخراج شده توسط آلتروید"
# gdrive
gdrive_1: "`تو همین الانشم تایید کردی گوگل درایوتو`"
gdrive_2: "برو [اینجا](https://console.developers.google.com/flows/enableapi?apiid=drive) and get your `GDRIVE_CLIENT_ID` and `GDRIVE_CLIENT_SECRET`\n\n
GDRIVE_CLIENT_ID و GDRIVE_CLIENT_SECRET رو بصورت.\n`GDRIVE_CLIENT_ID GDRIVE_CLIENT_SECRET` (جدا شده توسط فاصله) بفرست."
gdrive_3: "`Client Id اشتباهه`"
gdrive_4: "`یه چیزی درست نیست! دستور `/auth` رو دوباره بفرست.\nاگه دوباره نشد بیا تو این گروه گزارشش کن `@TheUltroid"
gdrive_5: "`هورا!\nالان میتونی از دستورات مربوط به گوگل درایو آلتروید استافاده کنی`"
gdrive_6: "`برو به `{}` و دستور ``/auth رو بفرست.`"
gdrive_7: "**فایل با موفقیت به گوگل درایو آپلود شد :**\n\n[{}]({})"
# pmpermit
pmperm_1: "لطفا صبر کن تا بهت جواب بدم وگرنه به عنوان هرزنامه ریپورت میشی!!"
pmperm_2: "تو داشتی تو پی ویم اسپم میکردی منم خوشم نمیاد.\nبلاک و ریپورتت کردم."
pmperm_3: "یا به پیام یکی ریپلای کن یا این دستورو تو پی وی یکی بفرست"
# updater
upd_1: "`صبر کن...`"
upd_2: "`اوه شت، بروزرسانی متوقف شد بدلایل مختلف`\n\n**LOGTRACE:**\n"
upd_3: "**بروز رسانی جدید در دسترسه [[{}]]({}/درخت/{}):\n\nتغییرات ورژن جدید**\n\n{}"
upd_4: "`لیست تغییرات خیلی بزرگه خودت فایلو ببین`"
upd_5: "دکمه زیر رو برای بروزرسانی بزن"
upd_6: "دکمه زیر رو برای بروزرسانی بزن"
upd_7: "\n`رباتت` **کاملا بروز شد** `با` **[[{}]]({}/درخت/{})**\n"
# upload download
udl_1: "`به فایل یا رسانه یی که میخوای دانلود کنم ریپلای کن`"
udl_2: "با موفقیت دانلودش کردم\nآدرس » \n`{}`\nزمان در بر گرفته » `{}`"
udl_3: "`مسیر فایلو بم بده`"
# words
wrd_1: "**کلمه** - `{}`\n\n**معنی** - \n"
wrd_2: "**کلمه** - `{}`\n\n**مترادف** - \n"
wrd_3: "**کلمه** - `{}`\n\n**متضاد** - \n"
# ---------------------------------------------------#
# assisant
ast_1: "رابط برنامه نویسی که مد نظرته رو انتخاب کن"
ast_2: "**رابط کاربری remove.bg**\nرابط برنامه نویسی که از remove.bg دریافت کردی رو بفرست.\n\nاز دستور /cancel برای لغو کردن استافاده کن"
ast_3: "سلام {}. از طریق گزینه ها گشت و گذار کن"

197
strings/strings/my.yml Normal file
View File

@@ -0,0 +1,197 @@
name: Malaysia
natively: Bahasa Malaysia
authors:
- yuno74
# commons
com_1: "`memproses...`"
com_2: "`mencari...`"
# help
help_1: "`{}` bukan plugin yang sah!"
help_2: "Bot tidak bertindak balas terhadap pertanyaan sebaris.\nDicadangkan untuk menggunakan `{}restart`"
help_3: "`Sila hidupkan mod sebaris untuk bot anda dari` @Botfather."
# autopic
autopic_1: "Beri saya Teks .."
autopic_2: "Tiada keputusan dijumpai `{}`"
autopic_3: "Mendapat Koleksi `{}` yang berkaitan dengan carian anda! \nMulai Autopic!"
# inline
inline_1: "[Uʟᴛʀɪᴅ Sᴘᴘʀᴛ](t.me/ultroidsupport)\n\n
**Hᴇʟᴘ Mᴇɴ Oғ {}.\n\n
ɢɪɴs ~ {}**"
inline_2: "[Uʟᴛʀɪᴅ Sᴘᴘʀᴛ](t.me/ultroidsupport)\n\n
**Hᴇʟᴘ Mᴇɴ Oғ {}.\n\n
Aᴅᴅɴs ~ {}**"
inline_3: "[Uʟᴛʀɪᴅ Sᴘᴘʀᴛ](t.me/ultroidsupport)\n\n
**Hᴇʟᴘ Mᴇɴ Oғ {}.\n\n
Aᴅᴅɴs ~ {}\n\n
Buat **`.setredis ADDONS kepada True`** dan memulakan semula untuk dapatkan addon.**"
inline_4: "** Bᴛ kepada {}\n\nMᴇɴ Utama\n\nPʟɢɪɴ ~ {}\nAᴅᴅɴ ~ {}\nJumlah Perintah ~ {}**"
inline_5: "**Mᴇɴ Telah ditutup**"
# tagnotif
tagnot_1: "{} telah tag Anda di {}\n\n```{}```\n\n[📨 Mesej 📨]({})"
tagnot_2: "{} telah tag Anda di {}\n\n [📨 Mesej 📨]({})"
# whisper
wspr_1: "@{} mesej rahsia untuk Anda.\nPadam mesej Anda selepas dibaca.\natau mesej seterusnya tidak akan dikemaskini"
wspr_2: "Mesej dipadam"
# afk
afk_1: "`Tidak lagi Afk\n\n
Tidak ada untuk ~ {}`"
afk_2: "#AFK\n
Set mod AFK kepada **tidak aktif**\n
Tidak ada untuk `{}`"
afk_3: "`Saya sedang AFK.\n
Terakhir dilihat {} lepas.`\n\n
**Sebab:** `{}`"
afk_4: "`Saya sedang AFK.\n\n
Terakhir dilihat {} lepas.`"
afk_5: "`Saya akan pergi AFK.`\n\n
**Sebab:** `{}`"
afk_6: "Saya akan pergi AFK."
afk_7: "Sedang AFK dengan sebab {}"
afk_8: "Sedang AFK."
# bot
alive_1: "**Userbot Ultroid...**\n\n
**{}**\n\n
┏━━━━━━━━━━━━━━━━━━━━━\n
┣ **Pemilik** - `{}`\n
┣ **Versi** - `{}`\n
┣ **Py-Ultroid** - `{}`\n
┣ **Masa hidup** - `{}`\n
┣ **Python** - `{}`\n
┣ **Telethon** - `{}`\n
┣ **Cawangan** - `{}`\n
┗━━━━━━━━━━━━━━━━━━━━━"
log: "**Heroku** Log Ultroid. \nTerap [di sini] ({}) juga!"
ping: "**Pong !!** `{}ms`\n**Masa hidup** - `{}`"
usage: "**⚙️ Penggunaan Dyno ⚙️**:\n\n
-> **Penggunaan Dyno untuk** `{}`:\n
• **{}J** **{}m** |** `[{}%]`\n
-> **Baki kuota jam Dyno bulan ini**:\n
• **{}J** **{}m |** `[{}%]`\n\n
**Jumlah Ruang Simpanan**: `{}`\n
**Digunakan**: `{}`\n
**Tidak Digunakan**: `{}`\n\n
**📊 Penggunaan Data 📊\n
**muat naik**: `{}`\n
**muat turun**: `{}`\n\n
**CPU**: `{}%`\n
**RAM**: `{}%`\n
**Storan**: `{}%`"
shutdown: "Selamat tinggal {}.\n`mematikan bot...`"
# broadcast
bd_1: "`Ditambah ke db...`"
bd_2: "`Cuba menambah semua channel admin ke db...`"
bd_3: "**Selesai.**\nChat sudah ada di database: {}\nNewly Added: {}"
bd_4: "Channel ditambah!"
bd_5: "`Ditambah ke database!`"
bd_6: "`Channel sudah berada di database`"
# carbon
carbon_1: "Memproses..."
carbon_2: "Carbonised oleh [{}](tg://user?id={})"
# chats
chats_1: "`Memproses...`"
chats_2: "`Tidak boleh memadam chat ini`"
chats_3: "`Saya bukan admin`"
chats_4: "#Dipadam\nDipadam {}"
chats_5: "Anda punya [{}]({}) Group telah dibuat!"
chats_6: "Sertai @TeamUltroid"
# converter
cvt_1: "membalas kepada mana-mana media/Document."
cvt_2: "Beri Nama dan extension fail"
cvt_3: "`Memproses...`"
cvt_4: "membalas kepada mana-mana media"
# core
core_1: "Modul Dijumpai"
core_2: "{}.py guna .paste untuk menampal di neko dan raw.."
core_3: "Cari Lagi..?"
core_4: "Modul {} dijumpai"
core_5: "{}.py guna .paste untuk menampal di neko dan raw.."
core_6: "Modul {}.py tak dijumpai"
core_7: "Modul sepertinya tiada"
core_8: "Tiada modul bernama {}.py"
core_9: "`Bagi nama plugin yang Anda ingin matikan`"
core_10: "**Dimatikan** `{}` **Telah berjaya.**"
core_11: "**Anda tidak boleh mematikan Oғғɪɪᴀʟ Pʟɢɪɴ**"
core_12: "**Tiada Pʟɢɪɴ bernama** `{}`"
core_13: "`Beri nama plugin yang ingin anda nyahpasang`"
core_14: "**menyahpasang** `{}` **Telah berjaya.**"
core_15: "**Anda tidak boleh nyahpasang Oғғɪɪᴀʟ Pʟɢɪɴs**"
core_16: "`Bagi nama plugin yang anda ingin hidupkan`"
core_17: "**Berjaya di hidupkan** `{}`"
core_18: "**Tidak boleh hidupkan** `{}` **kerana kesalahan berikut.**\n`{}`"
# fedutils
sf_1: "Memulakan Mass-FedBan..."
sf_2: "`Tiada user yang ditetapkan!`"
sf_3: "Anda tidak boleh ban dev saya, noob!!"
sf_4: "`Sepertinya rose tidak bertindak balas, atau plugin tidak berfungsi`"
sf_5: "Anda hanya boleh menggunakan perintah Fed 5 minit sekali"
sf_6: "Cuba lagi 5 minit kemudian."
sf_7: "Tidak dapat kumpul FedAdminList. Mencuba semula ({}/3)..."
sf_8: "Ralat"
sf_9: "Tidak dapat kumpul FedAdminList."
sf_10: "FBaning dalam {} feds."
sf_11: "ID Kumpulan FBan yang dinyatakan tidak betul."
sf_12: "{} Dikecualikan."
sf_13: "Ralat semasa membuang fail FedAdmin.\n{}"
sf_14: "SuperFBan Selesai. \nJumlah Feds - {}. \nTidak termasuk - {}. \n {} Fed terjejas.\n#TB"
sf_15: "Memulakan Mass-UnFedBan..."
sf_16: "SuperUnFBan Selesai. \nJumlah Feds - {}. \nTidak termasuk - {}. \n {} Fed terjejas.\n#TB"
sf_17: "`Beri saya id seseorang, atau balas mesej seseorang untuk memeriksa fedstatnya.`"
sf_18: "Senarai feds {} telah dilarang masuk. \n\nDikumpulkan menggunakan Ultroid."
sf_19: "**Ralat**\n `Buka sekatan` @MissRose_Bot `and try again!"
sf_20: "`Mengambil maklumat...`"
sf_21: "\n\nFedInfo diekstrak oleh Ultroid"
# gdrive
gdrive_1: "`Anda telah memberi kebenaran kepada Google Drive`"
gdrive_2: "Pergi [Sini](https://console.developers.google.com/flows/enableapi?apiid=drive) dan dapatkan anda punya `GDRIVE_CLIENT_ID` beserta `GDRIVE_CLIENT_SECRET`\n\n
hantar anda punya GDRIVE_CLIENT_ID beserta GDRIVE_CLIENT_SECRET mengikut ini.\n`GDRIVE_CLIENT_ID GDRIVE_CLIENT_SECRET` dipisahkan dengan ruang."
gdrive_3: "`Salah Client Id`"
gdrive_4: "`Ada yang tidak kena! Hantar`/auth` lagi sekali.\nJika sama hubungi `@TheUltroid"
gdrive_5: "`Berjaya!\nAnda sudah bersedia untuk menggunakan Google Drive dengan Ultroid Userbot.`"
gdrive_6: "`Pergi ke `{}` dan hantar ``/auth.`"
gdrive_7: "**Fail berjaya dimuat naik ke G-Drive :**\n\n[{}]({})"
# pmpermit
pmperm_1: "Tunggu saya balas atau anda akan disekat dan dilaporkan sebagai spam!!"
pmperm_2: "Anda telah menghantar spam kepada mesej Master saya, dan saya tidak menyukainya. \nAnda telah Disekat dan dilaporkan sebagai SPAM, sehingga diberitahu kemudian."
pmperm_3: "Balas mesej seseorang atau cuba perintah ini secara peribadi."
# updater
upd_1: "`Memeriksa kemas kini, sila tunggu ....`"
upd_2: "`Oops.. Updater tidak dapat diteruskan kerana terdapat beberapa masalah.`\n\n**LOGTRACE:**\n"
upd_3: "**Kemaskini baru tersedia untuk [[{}]]({}/tree/{}):\n\nYang Baru**\n\n{}"
upd_4: "`Changelog terlalu besar, lihat fail untuk melihatnya.`"
upd_5: "Klik butang di bawah untuk mengemas kini."
upd_6: "Klik butang di bawah untuk mengemas kini."
upd_7: "\n`Bot Anda` **di versi terkini** `dengan` **[[{}]]({}/tree/{})**\n"
# upload download
udl_1: "`Balas fail / media yang ingin anda muat turun ...`"
udl_2: "Muat turun Berjaya...\nKepada\n`{}`\nin `{}`"
udl_3: "`Berikan spesifik tempat ke fail`"
# words
wrd_1: "**Perkataan** - `{}`\n\n**Makna** - \n"
wrd_2: "**Perkataan** - `{}`\n\n**Sinonim** - \n"
wrd_3: "**Perkataan** - `{}`\n\n**Antonim** - \n"
# ---------------------------------------------------#
# assisant
ast_1: "Pilih API mana yang ingin anda tetapkan."
ast_2: "**remove.bg API**\nMasukkan API key anda dari remove.bg.\n\nGuna /cancel untuk menghentikan operasi."
ast_3: "Hi {}. Sila semak pilihan"