From 6cc2e1907cf058b9a7f93fb9976e669e5cf7d6bc Mon Sep 17 00:00:00 2001 From: Danish Date: Mon, 24 May 2021 20:09:49 +0530 Subject: [PATCH] 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 --- app.json | 6 +- assistant/othervars.py | 25 ++- plugins/__init__.py | 2 +- plugins/_help.py | 7 - plugins/_userlogs.py | 3 +- plugins/bot.py | 23 ++- plugins/compressor.py | 6 + plugins/devtools.py | 12 +- plugins/evaljs.py | 4 +- plugins/fedutils.py | 34 ++-- plugins/globaltools.py | 109 +++++-------- plugins/greetings.py | 2 +- plugins/logo.py | 13 +- plugins/profile.py | 42 ++--- plugins/redis.py | 4 +- plugins/resize.py | 2 +- plugins/stickertools.py | 6 +- plugins/sudo.py | 34 ++-- plugins/tools.py | 11 +- plugins/updater.py | 11 +- plugins/utilities.py | 5 +- plugins/youtube.py | 2 +- requirements.txt | 2 +- resources/extras/local-requirements.txt | 2 + strings/strings/fa.yml | 197 ++++++++++++++++++++++++ strings/strings/my.yml | 197 ++++++++++++++++++++++++ 26 files changed, 563 insertions(+), 198 deletions(-) create mode 100644 strings/strings/fa.yml create mode 100644 strings/strings/my.yml diff --git a/app.json b/app.json index 0a3b0a7..f4cee6c 100644 --- a/app.json +++ b/app.json @@ -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!!)", diff --git a/assistant/othervars.py b/assistant/othervars.py index ebeacf4..05b6959 100644 --- a/assistant/othervars.py +++ b/assistant/othervars.py @@ -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) diff --git a/plugins/__init__.py b/plugins/__init__.py index c916626..30fc0cb 100644 --- a/plugins/__init__.py +++ b/plugins/__init__.py @@ -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 diff --git a/plugins/_help.py b/plugins/_help.py index e1cbb35..8dd88d6 100644 --- a/plugins/_help.py +++ b/plugins/_help.py @@ -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: diff --git a/plugins/_userlogs.py b/plugins/_userlogs.py index b161577..0f377bc 100644 --- a/plugins/_userlogs.py +++ b/plugins/_userlogs.py @@ -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}`") diff --git a/plugins/bot.py b/plugins/bot.py index 4225f7a..2607fb9 100644 --- a/plugins/bot.py +++ b/plugins/bot.py @@ -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: diff --git a/plugins/compressor.py b/plugins/compressor.py index 1438e13..c5e603f 100644 --- a/plugins/compressor.py +++ b/plugins/compressor.py @@ -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: diff --git a/plugins/devtools.py b/plugins/devtools.py index d9cc1de..d6dd25a 100644 --- a/plugins/devtools.py +++ b/plugins/devtools.py @@ -13,6 +13,12 @@ • `{i}eval ` 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)}"}) diff --git a/plugins/evaljs.py b/plugins/evaljs.py index b953c45..fe427f3 100644 --- a/plugins/evaljs.py +++ b/plugins/evaljs.py @@ -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 !`", diff --git a/plugins/fedutils.py b/plugins/fedutils.py index b824dd0..f4ef728 100644 --- a/plugins/fedutils.py +++ b/plugins/fedutils.py @@ -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): diff --git a/plugins/globaltools.py b/plugins/globaltools.py index ad54e78..514d4c7 100644 --- a/plugins/globaltools.py +++ b/plugins/globaltools.py @@ -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: diff --git a/plugins/greetings.py b/plugins/greetings.py index 8158b38..82c59ea 100644 --- a/plugins/greetings.py +++ b/plugins/greetings.py @@ -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`") diff --git a/plugins/logo.py b/plugins/logo.py index cc59009..9ef888b 100644 --- a/plugins/logo.py +++ b/plugins/logo.py @@ -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: diff --git a/plugins/profile.py b/plugins/profile.py index 1cf3b47..26806c3 100644 --- a/plugins/profile.py +++ b/plugins/profile.py @@ -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": diff --git a/plugins/redis.py b/plugins/redis.py index 29d0980..efdd5f2 100644 --- a/plugins/redis.py +++ b/plugins/redis.py @@ -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`") diff --git a/plugins/resize.py b/plugins/resize.py index a775ccc..cc98dbb 100644 --- a/plugins/resize.py +++ b/plugins/resize.py @@ -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) diff --git a/plugins/stickertools.py b/plugins/stickertools.py index 3e5f2d9..c3b60ad 100644 --- a/plugins/stickertools.py +++ b/plugins/stickertools.py @@ -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 diff --git a/plugins/sudo.py b/plugins/sudo.py index ecd9db3..b5c40d1 100644 --- a/plugins/sudo.py +++ b/plugins/sudo.py @@ -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() diff --git a/plugins/tools.py b/plugins/tools.py index f95d934..a5def64 100644 --- a/plugins/tools.py +++ b/plugins/tools.py @@ -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() diff --git a/plugins/updater.py b/plugins/updater.py index e755bb2..3d591c0 100644 --- a/plugins/updater.py +++ b/plugins/updater.py @@ -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'[ChangeLogs]', @@ -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"), diff --git a/plugins/utilities.py b/plugins/utilities.py index 5fdeb38..6d06f3d 100644 --- a/plugins/utilities.py +++ b/plugins/utilities.py @@ -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" diff --git a/plugins/youtube.py b/plugins/youtube.py index a310960..2041cb3 100644 --- a/plugins/youtube.py +++ b/plugins/youtube.py @@ -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. """ diff --git a/requirements.txt b/requirements.txt index f6fbcad..252a84d 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1 +1 @@ -py-Ultroid==2021.5.22 +py-Ultroid==2021.5.24 diff --git a/resources/extras/local-requirements.txt b/resources/extras/local-requirements.txt index 5054dca..89f77cb 100644 --- a/resources/extras/local-requirements.txt +++ b/resources/extras/local-requirements.txt @@ -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 diff --git a/strings/strings/fa.yml b/strings/strings/fa.yml new file mode 100644 index 0000000..25b1b9e --- /dev/null +++ b/strings/strings/fa.yml @@ -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: "سلام {}. از طریق گزینه ها گشت و گذار کن" diff --git a/strings/strings/my.yml b/strings/strings/my.yml new file mode 100644 index 0000000..32edf50 --- /dev/null +++ b/strings/strings/my.yml @@ -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 +Pʟᴜɢɪɴ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"