diff --git a/.env.sample b/.env.sample
index ab344aa2f6..3aab7ceb3c 100644
--- a/.env.sample
+++ b/.env.sample
@@ -1,12 +1,8 @@
# Don't use quotes( " and ' )
-# e.g : HNDLR=.
-# Leave ENV as it is.
-ENV=True
API_ID=
-API_HASH=abcdefgh
+API_HASH=
SESSION=
-HNDLR=
BOT_USERNAME=
BOT_TOKEN=
LOG_CHANNEL=
@@ -14,6 +10,3 @@ REDIS_URI=
REDIS_PASSWORD=
HEROKU_API=
HEROKU_APP_NAME=
-SUDO=True
-MSG_FRWD=True
-I_DEV=False
\ No newline at end of file
diff --git a/Dockerfile b/Dockerfile
index 930d70f3dd..10e6ddf86e 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -3,8 +3,8 @@
# This file is a part of < https://github.com/TeamUltroid/Ultroid/ >
# PLease read the GNU Affero General Public License in .
-FROM python:3.9.2-slim-buster
-COPY resources/startup/deploy.sh .
-RUN chmod +x deploy.sh && sh deploy.sh
+FROM ultroidteam/ultroid:0.0.3
+RUN git clone https://github.com/TeamUltroid/Ultroid.git /root/TeamUltroid/
WORKDIR /root/TeamUltroid/
+RUN pip install -r requirements.txt
CMD ["bash", "resources/startup/startup.sh"]
diff --git a/LICENSE b/LICENSE
index 29ebfa545f..f288702d2f 100644
--- a/LICENSE
+++ b/LICENSE
@@ -1,5 +1,5 @@
- GNU AFFERO GENERAL PUBLIC LICENSE
- Version 3, 19 November 2007
+ GNU GENERAL PUBLIC LICENSE
+ Version 3, 29 June 2007
Copyright (C) 2007 Free Software Foundation, Inc.
Everyone is permitted to copy and distribute verbatim copies
@@ -7,15 +7,17 @@
Preamble
- The GNU Affero General Public License is a free, copyleft license for
-software and other kinds of works, specifically designed to ensure
-cooperation with the community in the case of network server software.
+ The GNU General Public License is a free, copyleft license for
+software and other kinds of works.
The licenses for most software and other practical works are designed
to take away your freedom to share and change the works. By contrast,
-our General Public Licenses are intended to guarantee your freedom to
+the GNU General Public License is intended to guarantee your freedom to
share and change all versions of a program--to make sure it remains free
-software for all its users.
+software for all its users. We, the Free Software Foundation, use the
+GNU General Public License for most of our software; it applies also to
+any other work released this way by its authors. You can apply it to
+your programs, too.
When we speak of free software, we are referring to freedom, not
price. Our General Public Licenses are designed to make sure that you
@@ -24,34 +26,44 @@ them if you wish), that you receive source code or can get it if you
want it, that you can change the software or use pieces of it in new
free programs, and that you know you can do these things.
- Developers that use our General Public Licenses protect your rights
-with two steps: (1) assert copyright on the software, and (2) offer
-you this License which gives you legal permission to copy, distribute
-and/or modify the software.
-
- A secondary benefit of defending all users' freedom is that
-improvements made in alternate versions of the program, if they
-receive widespread use, become available for other developers to
-incorporate. Many developers of free software are heartened and
-encouraged by the resulting cooperation. However, in the case of
-software used on network servers, this result may fail to come about.
-The GNU General Public License permits making a modified version and
-letting the public access it on a server without ever releasing its
-source code to the public.
-
- The GNU Affero General Public License is designed specifically to
-ensure that, in such cases, the modified source code becomes available
-to the community. It requires the operator of a network server to
-provide the source code of the modified version running there to the
-users of that server. Therefore, public use of a modified version, on
-a publicly accessible server, gives the public access to the source
-code of the modified version.
-
- An older license, called the Affero General Public License and
-published by Affero, was designed to accomplish similar goals. This is
-a different license, not a version of the Affero GPL, but Affero has
-released a new version of the Affero GPL which permits relicensing under
-this license.
+ To protect your rights, we need to prevent others from denying you
+these rights or asking you to surrender the rights. Therefore, you have
+certain responsibilities if you distribute copies of the software, or if
+you modify it: responsibilities to respect the freedom of others.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must pass on to the recipients the same
+freedoms that you received. You must make sure that they, too, receive
+or can get the source code. And you must show them these terms so they
+know their rights.
+
+ Developers that use the GNU GPL protect your rights with two steps:
+(1) assert copyright on the software, and (2) offer you this License
+giving you legal permission to copy, distribute and/or modify it.
+
+ For the developers' and authors' protection, the GPL clearly explains
+that there is no warranty for this free software. For both users' and
+authors' sake, the GPL requires that modified versions be marked as
+changed, so that their problems will not be attributed erroneously to
+authors of previous versions.
+
+ Some devices are designed to deny users access to install or run
+modified versions of the software inside them, although the manufacturer
+can do so. This is fundamentally incompatible with the aim of
+protecting users' freedom to change the software. The systematic
+pattern of such abuse occurs in the area of products for individuals to
+use, which is precisely where it is most unacceptable. Therefore, we
+have designed this version of the GPL to prohibit the practice for those
+products. If such problems arise substantially in other domains, we
+stand ready to extend this provision to those domains in future versions
+of the GPL, as needed to protect the freedom of users.
+
+ Finally, every program is threatened constantly by software patents.
+States should not allow patents to restrict development and use of
+software on general-purpose computers, but in those that do, we wish to
+avoid the special danger that patents applied to a free program could
+make it effectively proprietary. To prevent this, the GPL assures that
+patents cannot be used to render the program non-free.
The precise terms and conditions for copying, distribution and
modification follow.
@@ -60,7 +72,7 @@ modification follow.
0. Definitions.
- "This License" refers to version 3 of the GNU Affero General Public License.
+ "This License" refers to version 3 of the GNU General Public License.
"Copyright" also means copyright-like laws that apply to other kinds of
works, such as semiconductor masks.
@@ -537,45 +549,35 @@ to collect a royalty for further conveying from those to whom you convey
the Program, the only way you could satisfy both those terms and this
License would be to refrain entirely from conveying the Program.
- 13. Remote Network Interaction; Use with the GNU General Public License.
-
- Notwithstanding any other provision of this License, if you modify the
-Program, your modified version must prominently offer all users
-interacting with it remotely through a computer network (if your version
-supports such interaction) an opportunity to receive the Corresponding
-Source of your version by providing access to the Corresponding Source
-from a network server at no charge, through some standard or customary
-means of facilitating copying of software. This Corresponding Source
-shall include the Corresponding Source for any work covered by version 3
-of the GNU General Public License that is incorporated pursuant to the
-following paragraph.
+ 13. Use with the GNU Affero General Public License.
Notwithstanding any other provision of this License, you have
permission to link or combine any covered work with a work licensed
-under version 3 of the GNU General Public License into a single
+under version 3 of the GNU Affero General Public License into a single
combined work, and to convey the resulting work. The terms of this
License will continue to apply to the part which is the covered work,
-but the work with which it is combined will remain governed by version
-3 of the GNU General Public License.
+but the special requirements of the GNU Affero General Public License,
+section 13, concerning interaction through a network will apply to the
+combination as such.
14. Revised Versions of this License.
The Free Software Foundation may publish revised and/or new versions of
-the GNU Affero General Public License from time to time. Such new versions
-will be similar in spirit to the present version, but may differ in detail to
+the GNU General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.
Each version is given a distinguishing version number. If the
-Program specifies that a certain numbered version of the GNU Affero General
+Program specifies that a certain numbered version of the GNU General
Public License "or any later version" applies to it, you have the
option of following the terms and conditions either of that numbered
version or of any later version published by the Free Software
Foundation. If the Program does not specify a version number of the
-GNU Affero General Public License, you may choose any version ever published
+GNU General Public License, you may choose any version ever published
by the Free Software Foundation.
If the Program specifies that a proxy can decide which future
-versions of the GNU Affero General Public License can be used, that proxy's
+versions of the GNU General Public License can be used, that proxy's
public statement of acceptance of a version permanently authorizes you
to choose that version for the Program.
@@ -633,29 +635,40 @@ the "copyright" line and a pointer to where the full notice is found.
Copyright (C)
This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU Affero General Public License as published
- by the Free Software Foundation, either version 3 of the License, or
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU Affero General Public License for more details.
+ GNU General Public License for more details.
- You should have received a copy of the GNU Affero General Public License
+ You should have received a copy of the GNU General Public License
along with this program. If not, see .
Also add information on how to contact you by electronic and paper mail.
- If your software can interact with users remotely through a computer
-network, you should also make sure that it provides a way for users to
-get its source. For example, if your program is a web application, its
-interface could display a "Source" link that leads users to an archive
-of the code. There are many ways you could offer source, and different
-solutions will be better for different programs; see section 13 for the
-specific requirements.
+ If the program does terminal interaction, make it output a short
+notice like this when it starts in an interactive mode:
+
+ Copyright (C)
+ This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License. Of course, your program's commands
+might be different; for a GUI interface, you would use an "about box".
You should also get your employer (if you work as a programmer) or school,
if any, to sign a "copyright disclaimer" for the program, if necessary.
-For more information on this, and how to apply and follow the GNU AGPL, see
-.
\ No newline at end of file
+For more information on this, and how to apply and follow the GNU GPL, see
+.
+
+ The GNU General Public License does not permit incorporating your program
+into proprietary programs. If your program is a subroutine library, you
+may consider it more useful to permit linking proprietary applications with
+the library. If this is what you want to do, use the GNU Lesser General
+Public License instead of this License. But first, please read
+.
diff --git a/assistant/__init__.py b/assistant/__init__.py
index 41dbcf4dfe..919cdcfa7b 100644
--- a/assistant/__init__.py
+++ b/assistant/__init__.py
@@ -7,8 +7,11 @@
from pyUltroid import *
from pyUltroid.dB.database import Var
+from pyUltroid.functions.all import *
from telethon import Button, custom
+from strings import get_languages, get_string
+
OWNER_NAME = ultroid_bot.me.first_name
OWNER_ID = ultroid_bot.me.id
diff --git a/assistant/api_setter.py b/assistant/api_setter.py
index cb118660bc..cb746e42ec 100644
--- a/assistant/api_setter.py
+++ b/assistant/api_setter.py
@@ -14,7 +14,7 @@
@owner
async def apiset(event):
await event.edit(
- "Choose which API you want to set.",
+ get_string("ast_1"),
buttons=[
[Button.inline("Remove.bg", data="rmbg")],
[custom.Button.inline("« Back", data="setter")],
@@ -33,9 +33,7 @@ async def rmbgapi(event):
var = "RMBG_API"
name = "Remove.bg API Key"
async with event.client.conversation(pru) as conv:
- await conv.send_message(
- "**remove.bg API**\nEnter your API key from remove.bg.\n\nUse /cancel to terminate the operation."
- )
+ await conv.send_message(get_string("ast_2"))
response = conv.wait_event(events.NewMessage(chats=pru))
response = await response
themssg = response.message.message
diff --git a/assistant/customvars.py b/assistant/customvars.py
index 1f07056142..03401a719d 100644
--- a/assistant/customvars.py
+++ b/assistant/customvars.py
@@ -7,7 +7,8 @@
import os
-from telegraph import Telegraph, upload_file
+from telegraph import Telegraph
+from telegraph import upload_file as upl
from . import *
@@ -76,11 +77,15 @@ async def media(event):
except BaseException:
pass
media = await event.client.download_media(response, "alvpc")
- if not (response.text).startswith("/") and not response.text == "":
+ if (
+ not (response.text).startswith("/")
+ and not response.text == ""
+ and not response.media
+ ):
url = response.text
else:
try:
- x = upload_file(media)
+ x = upl(media)
url = f"https://telegra.ph/{x[0]}"
os.remove(media)
except BaseException:
@@ -105,10 +110,18 @@ async def alvcs(event):
await event.edit(
"Customise your PMPERMIT Settings -",
buttons=[
- [Button.inline("Pᴍ Tᴇxᴛ", data="pmtxt")],
- [Button.inline("Pᴍ Mᴇᴅɪᴀ", data="pmmed")],
- [Button.inline("PMLOGGER", data="pml")],
- [Button.inline("Dᴇʟᴇᴛᴇ Pᴍ Mᴇᴅɪᴀ", data="delpmmed")],
+ [
+ Button.inline("Pᴍ Tᴇxᴛ", data="pmtxt"),
+ Button.inline("Pᴍ Mᴇᴅɪᴀ", data="pmmed"),
+ ],
+ [
+ Button.inline("Aᴜᴛᴏ Aᴘᴘʀᴏᴠᴇ", data="apauto"),
+ Button.inline("PMLOGGER", data="pml"),
+ ],
+ [
+ Button.inline("Sᴇᴛ Wᴀʀɴs", data="swarn"),
+ Button.inline("Dᴇʟᴇᴛᴇ Pᴍ Mᴇᴅɪᴀ", data="delpmmed"),
+ ],
[Button.inline("« Bᴀᴄᴋ", data="pmset")],
],
)
@@ -139,6 +152,32 @@ async def name(event):
)
+@callback("swarn")
+@owner
+async def name(event):
+ m = range(1, 10)
+ tultd = [Button.inline(f"{x}", data=f"wrns_{x}") for x in m]
+ lst = list(zip(tultd[::3], tultd[1::3], tultd[2::3]))
+ lst.append([Button.inline("« Bᴀᴄᴋ", data="pmcstm")])
+ await event.edit(
+ "Select the number of warnings for a user before getting blocked in PMs.",
+ buttons=lst,
+ )
+
+
+@callback(re.compile(b"wrns_(.*)"))
+@owner
+async def set_wrns(event):
+ value = int(event.data_match.group(1).decode("UTF-8"))
+ dn = udB.set("PMWARNS", value)
+ if dn:
+ await event.edit(
+ f"PM Warns Set to {value}.\nNew users will have {value} chances in PMs before getting banned."
+ )
+ else:
+ await event.edit(f"Something went wrong, please check your {hndlr}logs!")
+
+
@callback("pmmed")
@owner
async def media(event):
@@ -157,12 +196,18 @@ async def media(event):
return await conv.send_message("Operation cancelled!!")
except BaseException:
pass
+ media = await event.client.download_media(response, "alvpcc")
+ if (
+ not (response.text).startswith("/")
+ and not response.text == ""
+ and not response.media
+ ):
media = await event.client.download_media(response, "pmpcc")
if not (response.text).startswith("/") and not response.text == "":
url = response.text
else:
try:
- x = upload_file(media)
+ x = upl(media)
url = f"https://telegra.ph/{x[0]}"
os.remove(media)
except BaseException:
@@ -181,6 +226,37 @@ async def dell(event):
return await event.edit("Something went wrong...")
+@callback("apauto")
+@owner
+async def apauto(event):
+ await event.edit(
+ "This'll auto approve on outgoing messages",
+ buttons=[
+ [Button.inline("Aᴜᴛᴏ Aᴘᴘʀᴏᴠᴇ ON", data="apon")],
+ [Button.inline("Aᴜᴛᴏ Aᴘᴘʀᴏᴠᴇ OFF", data="apof")],
+ [Button.inline("« Bᴀᴄᴋ", data="pmcstm")],
+ ],
+ )
+
+
+@callback("apon")
+@owner
+async def apon(event):
+ var = "AUTOAPPROVE"
+ await setit(event, var, "True")
+ await event.edit(f"Done!! AUTOAPPROVE Started!!")
+
+
+@callback("apof")
+@owner
+async def apof(event):
+ try:
+ udB.delete("AUTOAPPROVE")
+ return await event.edit("Done! AUTOAPPROVE Stopped!!")
+ except BaseException:
+ return await event.edit("Something went wrong...")
+
+
@callback("pml")
@owner
async def alvcs(event):
diff --git a/assistant/inlinestuff.py b/assistant/inlinestuff.py
index 9bad9bc177..eb24388196 100644
--- a/assistant/inlinestuff.py
+++ b/assistant/inlinestuff.py
@@ -12,7 +12,9 @@
import play_scraper
import requests
from bs4 import BeautifulSoup
-from search_engine_parser import GoogleSearch, YahooSearch
+from pyUltroid.functions.parser import GoogleSearch, YahooSearch
+from rextester_py import rexec_aio
+from rextester_py.rextester_aio import UnknownLanguage
from telethon import Button
from telethon.tl.types import InputWebDocument as wb
@@ -21,6 +23,74 @@
gugirl = "https://telegra.ph/file/0df54ae4541abca96aa11.jpg"
yeah = "https://telegra.ph/file/e3c67885e16a194937516.jpg"
ps = "https://telegra.ph/file/de0b8d9c858c62fae3b6e.jpg"
+ultpic = "https://telegra.ph/file/4136aa1650bc9d4109cc5.jpg"
+
+
+@in_pattern("fl2lnk ?(.*)")
+@in_owner
+async def _(e):
+ file_path = e.pattern_match.group(1)
+ file_name = file_path.split("/")[-1]
+ bitton = [
+ [
+ Button.inline("anonfiles", data=f"flanonfiles//{file_path}"),
+ Button.inline("transfer", data=f"fltransfer//{file_path}"),
+ ],
+ [
+ Button.inline("bayfiles", data=f"flbayfiles//{file_path}"),
+ Button.inline("x0", data=f"flx0//{file_path}"),
+ ],
+ [
+ Button.inline("file.io", data=f"flfile.io//{file_path}"),
+ Button.inline("siasky", data=f"flsiasky//{file_path}"),
+ ],
+ ]
+ try:
+ lnk = e.builder.article(
+ title="fl2lnk",
+ text=f"**File:**\n{file_name}",
+ buttons=bitton,
+ )
+ except:
+ lnk = e.builder.article(
+ title="fl2lnk",
+ text="File not found",
+ )
+ await e.answer([lnk])
+
+
+@callback(
+ re.compile(
+ "fl(.*)",
+ ),
+)
+@owner
+async def _(e):
+ t = (e.data).decode("UTF-8")
+ data = t[2:]
+ host = data.split("//")[0]
+ file = data.split("//")[1]
+ file_name = file.split("/")[-1]
+ await e.edit(f"Uploading `{file_name}` on {host}")
+ await dloader(e, host, file)
+
+
+@in_pattern("repo")
+@in_owner
+async def repo(e):
+ res = [
+ await e.builder.article(
+ title="Ultroid Userbot",
+ description="Userbot | Telethon",
+ thumb=wb(ultpic, 0, "image/jpeg", []),
+ text="• **ULTROID USERBOT** •",
+ buttons=[
+ [Button.url("Repo", url="https://github.com/TeamUltroid/Ultroid")],
+ [Button.url("Support", url="t.me/UltroidSupport")],
+ ],
+ )
+ ]
+ await e.answer(res)
@in_pattern("go")
@@ -38,13 +108,14 @@ async def gsearch(q_event):
await q_event.answer([kkkk])
searcher = []
page = re.findall(r"page=\d+", match)
+ cache = False
try:
page = page[0]
page = page.replace("page=", "")
match = match.replace("page=" + page[0], "")
except IndexError:
page = 1
- search_args = (str(match), int(page))
+ search_args = (str(match), int(page), bool(cache))
gsearch = GoogleSearch()
gresults = await gsearch.async_search(*search_args)
msg = ""
@@ -79,6 +150,44 @@ async def gsearch(q_event):
await q_event.answer(searcher)
+@in_pattern("rex")
+@in_owner
+async def rextester(event):
+ builder = event.builder
+ try:
+ omk = event.text.split(" ", maxsplit=1)[1]
+ if omk is not None:
+ if "|" in omk:
+ lang, code = omk.split("|")
+ else:
+ lang = "python 3"
+ code = omk
+ output = await rexec_aio(lang, code)
+ stats = output.stats
+ if output.errors is not None:
+ outputt = output.errors
+ resultm = builder.article(
+ title="Code",
+ description=f"Language-`{lang}` & Code-`{code}`",
+ text=f"Language:\n`{lang}`\n\nCode:\n`{code}`\n\nErrors:\n`{outputt}`\n\nStats:\n`{stats}`",
+ )
+ else: # By @ProgrammingError
+ outputt = output.results
+ resultm = builder.article(
+ title="Code", # By @ProgrammingError
+ description=f"Language-`{lang}` & Code-`{code}`",
+ text=f"Language:\n`{lang}`\n\nCode:\n`{code}`\n\nResult:\n`{outputt}`\n\nStats:\n`{stats}`",
+ )
+ await event.answer([resultm])
+ except UnknownLanguage:
+ resultm = builder.article(
+ title="Error", # By @ProgrammingError
+ description="Invalid language choosen",
+ text="The list of valid languages are\n\nc#, vb.net, f#, java, python, c (gcc), \nc++ (gcc), php, pascal, objective-c, haskell, \nruby, perl, lua, nasm, sql server, javascript, lisp, prolog, go, scala, \nscheme, node.js, python 3, octave, c (clang), \nc++ (clang), c++ (vc++), c (vc), d, r, tcl, mysql, postgresql, oracle, swift, \nbash, ada, erlang, elixir, ocaml, \nkotlin, brainfuck, fortran\n\n\n Format to use Rextester is `@Yourassistantusername rex langcode|code`",
+ )
+ await event.answer([resultm])
+
+
@in_pattern("yahoo")
@in_owner
async def gsearch(q_event):
@@ -96,13 +205,14 @@ async def gsearch(q_event):
await q_event.answer([kkkk])
searcher = []
page = re.findall(r"page=\d+", match)
+ cache = False
try:
page = page[0]
page = page.replace("page=", "")
match = match.replace("page=" + page[0], "")
except IndexError:
page = 1
- search_args = (str(match), int(page))
+ search_args = (str(match), int(page), bool(cache))
gsearch = YahooSearch()
gresults = await gsearch.async_search(*search_args)
msg = ""
diff --git a/assistant/localization.py b/assistant/localization.py
new file mode 100644
index 0000000000..cad971c688
--- /dev/null
+++ b/assistant/localization.py
@@ -0,0 +1,38 @@
+# Ultroid - UserBot
+# Copyright (C) 2020 TeamUltroid
+#
+# This file is a part of < https://github.com/TeamUltroid/Ultroid/ >
+# PLease read the GNU Affero General Public License in
+# .
+
+import re
+
+from . import *
+
+
+@callback("lang")
+@owner
+async def setlang(event):
+ languages = get_languages()
+ tultd = [
+ Button.inline(
+ f"{languages[ult]['natively']} [{ult.lower()}]", data=f"set_{ult}"
+ )
+ for ult in languages
+ ]
+ buttons = list(zip(tultd[::2], tultd[1::2]))
+ if len(tultd) % 2 == 1:
+ buttons.append((tultd[-1],))
+ buttons.append([Button.inline("« Back", data="mainmenu")])
+ await event.edit("List Of Available Languages.", buttons=buttons)
+
+
+@callback(re.compile(b"set_(.*)"))
+@owner
+async def settt(event):
+ lang = event.data_match.group(1).decode("UTF-8")
+ languages = get_languages()
+ udB.set("language", f"{lang}")
+ await event.edit(
+ f"Your language has been set to {languages[lang]['natively']} [{lang}]."
+ )
diff --git a/assistant/othervars.py b/assistant/othervars.py
index ae00e7aa1e..8dac28d002 100644
--- a/assistant/othervars.py
+++ b/assistant/othervars.py
@@ -7,7 +7,108 @@
from . import *
-# main menuu for setting other vars
+TOKEN_FILE = "resources/auths/auth_token.txt"
+
+
+@callback("authorise")
+@owner
+async def _(e):
+ if not e.is_private:
+ return
+ if not udB.get("GDRIVE_CLIENT_ID"):
+ return await e.edit(
+ "Client ID and Secret is Empty.\nFill it First.",
+ buttons=Button.inline("Back", data="gdrive"),
+ )
+ storage = await create_token_file(TOKEN_FILE, e)
+ authorize(TOKEN_FILE, storage)
+ f = open(TOKEN_FILE, "r")
+ token_file_data = f.read()
+ udB.set("GDRIVE_TOKEN", token_file_data)
+ await e.reply(
+ "`Success!\nYou are all set to use Google Drive with Ultroid Userbot.`",
+ buttons=Button.inline("Main Menu", data="setter"),
+ )
+
+
+@callback("folderid")
+@owner
+async def _(e):
+ if not e.is_private:
+ return
+ await e.edit(
+ "Send your FOLDER ID\n\n"
+ + "For FOLDER ID:\n"
+ + "1. Open Google Drive App.\n"
+ + "2. Create Folder.\n"
+ + "3. Make that folder public.\n"
+ + "4. Copy link of that folder."
+ + "5. Send all characters which is after id= ."
+ )
+ async with ultroid_bot.asst.conversation(e.sender_id) as conv:
+ reply = conv.wait_event(events.NewMessage(from_users=e.sender_id))
+ repl = await reply
+ udB.set("GDRIVE_FOLDER_ID", repl.text)
+ await repl.reply(
+ "Success Now You Can Authorise.",
+ buttons=Button.inline("« Back", data="gdrive"),
+ )
+
+
+@callback("clientsec")
+@owner
+async def _(e):
+ if not e.is_private:
+ return
+ await e.edit("Send your CLIENT SECRET")
+ async with ultroid_bot.asst.conversation(e.sender_id) as conv:
+ reply = conv.wait_event(events.NewMessage(from_users=e.sender_id))
+ repl = await reply
+ udB.set("GDRIVE_CLIENT_SECRET", repl.text)
+ await repl.reply(
+ "Success!\nNow You Can Authorise or add FOLDER ID.",
+ buttons=Button.inline("« Back", data="gdrive"),
+ )
+
+
+@callback("clientid")
+@owner
+async def _(e):
+ if not e.is_private:
+ return
+ await e.edit("Send your CLIENT ID ending with .com")
+ async with ultroid_bot.asst.conversation(e.sender_id) as conv:
+ reply = conv.wait_event(events.NewMessage(from_users=e.sender_id))
+ repl = await reply
+ if not repl.text.endswith(".com"):
+ return await repl.reply("`Wrong CLIENT ID`")
+ udB.set("GDRIVE_CLIENT_ID", repl.text)
+ await repl.reply(
+ "Success now set CLIENT SECRET",
+ buttons=Button.inline("« Back", data="gdrive"),
+ )
+
+
+@callback("gdrive")
+@owner
+async def _(e):
+ if not e.is_private:
+ return
+ await e.edit(
+ "Go [here](https://console.developers.google.com/flows/enableapi?apiid=drive) and get your CLIENT ID and CLIENT SECRET",
+ buttons=[
+ [
+ Button.inline("Cʟɪᴇɴᴛ Iᴅ", data="clientid"),
+ Button.inline("Cʟɪᴇɴᴛ Sᴇᴄʀᴇᴛ", data="clientsec"),
+ ],
+ [
+ Button.inline("Fᴏʟᴅᴇʀ Iᴅ", data="folderid"),
+ Button.inline("Aᴜᴛʜᴏʀɪsᴇ", data="authorise"),
+ ],
+ [Button.inline("« Bᴀᴄᴋ", data="otvars")],
+ ],
+ link_preview=False,
+ )
@callback("otvars")
@@ -16,8 +117,10 @@ async def otvaar(event):
await event.edit(
"Other Variables to set for @TheUltroid:",
buttons=[
- [Button.inline("Tᴀɢ Lᴏɢɢᴇʀ", data="taglog")],
- [Button.inline("SᴜᴘᴇʀFʙᴀɴ", data="sfban")],
+ [
+ Button.inline("Tᴀɢ Lᴏɢɢᴇʀ", data="taglog"),
+ Button.inline("SᴜᴘᴇʀFʙᴀɴ", data="sfban"),
+ ],
[
Button.inline("Sᴜᴅᴏ Mᴏᴅᴇ", data="sudo"),
Button.inline("Hᴀɴᴅʟᴇʀ", data="hhndlr"),
@@ -26,11 +129,39 @@ async def otvaar(event):
Button.inline("Exᴛʀᴀ Pʟᴜɢɪɴs", data="plg"),
Button.inline("Aᴅᴅᴏɴs", data="eaddon"),
],
+ [
+ Button.inline("Eᴍᴏᴊɪ ɪɴ Hᴇʟᴘ", data="emoj"),
+ Button.inline("Sᴇᴛ ɢDʀɪᴠᴇ", data="gdrive"),
+ ],
[Button.inline("« Bᴀᴄᴋ", data="setter")],
],
)
+@callback("emoj")
+@owner
+async def emoji(event):
+ await event.delete()
+ pru = event.sender_id
+ var = "EMOJI_IN_HELP"
+ name = f"Emoji in `{HNDLR}help` menu"
+ async with event.client.conversation(pru) as conv:
+ await conv.send_message("Send emoji u want to set 🙃.\n\nUse /cancel to cancel.")
+ response = conv.wait_event(events.NewMessage(chats=pru))
+ response = await response
+ themssg = response.message.message
+ if themssg == "/cancel":
+ return await conv.send_message("Cancelled!!")
+ elif themssg.startswith(("/", HNDLR)):
+ return await conv.send_message("Incorrect Emoji")
+ else:
+ await setit(event, var, themssg)
+ await conv.send_message(
+ "{} changed to {}\n".format(name, themssg),
+ buttons=[Button.inline("« Bᴀᴄᴋ", data="otvars")],
+ )
+
+
@callback("plg")
@owner
async def pluginch(event):
@@ -47,12 +178,15 @@ async def pluginch(event):
themssg = response.message.message
if themssg == "/cancel":
return await conv.send_message("Cancelled!!")
+ elif themssg.startswith(("/", HNDLR)):
+ return await conv.send_message("Incorrect channel")
else:
await setit(event, var, themssg)
await conv.send_message(
"{} changed to {}\n After Setting All Things Do Restart".format(
name, themssg
- )
+ ),
+ buttons=[Button.inline("« Bᴀᴄᴋ", data="otvars")],
)
@@ -72,9 +206,16 @@ async def hndlrr(event):
themssg = response.message.message
if themssg == "/cancel":
return await conv.send_message("Cancelled!!")
+ elif len(themssg) == 1:
+ return await conv.send_message("Incorrect Handler")
+ elif themssg.startswith(("/", "#", "@")):
+ return await conv.send_message("Incorrect Handler")
else:
await setit(event, var, themssg)
- await conv.send_message("{} changed to {}".format(name, themssg))
+ await conv.send_message(
+ "{} changed to {}".format(name, themssg),
+ buttons=[Button.inline("« Bᴀᴄᴋ", data="otvars")],
+ )
@callback("taglog")
@@ -95,7 +236,10 @@ async def tagloggerr(event):
return await conv.send_message("Cancelled!!")
else:
await setit(event, var, themssg)
- await conv.send_message("{} changed to {}".format(name, themssg))
+ await conv.send_message(
+ "{} changed to {}".format(name, themssg),
+ buttons=[Button.inline("« Bᴀᴄᴋ", data="otvars")],
+ )
@callback("eaddon")
@@ -117,7 +261,8 @@ async def eddon(event):
var = "ADDONS"
await setit(event, var, "True")
await event.edit(
- "Done! ADDONS has been turned on!!\n\n After Setting All Things Do Restart"
+ "Done! ADDONS has been turned on!!\n\n After Setting All Things Do Restart",
+ buttons=[Button.inline("« Bᴀᴄᴋ", data="eaddon")],
)
@@ -127,7 +272,8 @@ async def eddof(event):
var = "ADDONS"
await setit(event, var, "False")
await event.edit(
- "Done! ADDONS has been turned off!! After Setting All Things Do Restart"
+ "Done! ADDONS has been turned off!! After Setting All Things Do Restart",
+ buttons=[Button.inline("« Bᴀᴄᴋ", data="eaddon")],
)
@@ -150,7 +296,8 @@ async def eddon(event):
var = "SUDO"
await setit(event, var, "True")
await event.edit(
- "Done! SUDO MODE has been turned on!!\n\n After Setting All Things Do Restart"
+ "Done! SUDO MODE has been turned on!!\n\n After Setting All Things Do Restart",
+ buttons=[Button.inline("« Bᴀᴄᴋ", data="sudo")],
)
@@ -160,7 +307,8 @@ async def eddof(event):
var = "SUDO"
await setit(event, var, "False")
await event.edit(
- "Done! SUDO MODE has been turned off!! After Setting All Things Do Restart"
+ "Done! SUDO MODE has been turned off!! After Setting All Things Do Restart",
+ buttons=[Button.inline("« Bᴀᴄᴋ", data="sudo")],
)
@@ -195,7 +343,10 @@ async def sfgrp(event):
return await conv.send_message("Cancelled!!")
else:
await setit(event, var, themssg)
- await conv.send_message("{} changed to {}".format(name, themssg))
+ await conv.send_message(
+ "{} changed to {}".format(name, themssg),
+ buttons=[Button.inline("« Bᴀᴄᴋ", data="sfban")],
+ )
@callback("sfexf")
@@ -216,4 +367,7 @@ async def sfexf(event):
return await conv.send_message("Cancelled!!")
else:
await setit(event, var, themssg)
- await conv.send_message("{} changed to {}".format(name, themssg))
+ await conv.send_message(
+ "{} changed to {}".format(name, themssg),
+ buttons=[Button.inline("« Bᴀᴄᴋ", data="sfban")],
+ )
diff --git a/assistant/start.py b/assistant/start.py
index 76cce4b688..507d5a3915 100644
--- a/assistant/start.py
+++ b/assistant/start.py
@@ -42,13 +42,21 @@ async def assistant(event):
async def ultroid(event):
if event.is_group:
return
+ name = event.sender.first_name
+ if event.sender.last_name:
+ name += f" {event.sender.last_name}"
await asst.send_message(
event.chat_id,
- f"Hi {OWNER_NAME}. Please browse through the options",
+ get_string("ast_3").format(name),
buttons=[
- [Button.inline("Sᴇᴛᴛɪɴɢs ⚙️", data="setter")],
- [Button.inline("Sᴛᴀᴛs", data="stat")],
- [Button.inline("Bʀᴏᴀᴅᴄᴀsᴛ", data="bcast")],
+ [
+ Button.inline("Language 🌐", data="lang"),
+ Button.inline("Sᴇᴛᴛɪɴɢs ⚙️", data="setter"),
+ ],
+ [
+ Button.inline("Sᴛᴀᴛs ✨", data="stat"),
+ Button.inline("Bʀᴏᴀᴅᴄᴀsᴛ 📻", data="bcast"),
+ ],
],
)
@@ -60,11 +68,16 @@ async def ultroid(event):
if event.is_group:
return
await event.edit(
- f"Hi {OWNER_NAME}. Please browse through the options",
+ get_string("ast_3").format(OWNER_NAME),
buttons=[
- [Button.inline("Sᴇᴛᴛɪɴɢs ⚙️", data="setter")],
- [Button.inline("Sᴛᴀᴛs", data="stat")],
- [Button.inline("Bʀᴏᴀᴅᴄᴀsᴛ", data="bcast")],
+ [
+ Button.inline("Language 🌐", data="lang"),
+ Button.inline("Sᴇᴛᴛɪɴɢs ⚙️", data="setter"),
+ ],
+ [
+ Button.inline("Sᴛᴀᴛs ✨", data="stat"),
+ Button.inline("Bʀᴏᴀᴅᴄᴀsᴛ 📻", data="bcast"),
+ ],
],
)
diff --git a/assistant/ytdl.py b/assistant/ytdl.py
index 5230adfa44..aa8a766cc2 100644
--- a/assistant/ytdl.py
+++ b/assistant/ytdl.py
@@ -131,7 +131,7 @@ async def _(sur):
getter,
f"{ytdl_data['id']}.mp3",
thumb=thumb,
- caption=f"**{ytdl_data['title']}\n{convert(ytdl_data['duration'])}\n{ytdl_data['uploader']}**",
+ caption=f"**{ytdl_data['title']}\n{time_formatter((ytdl_data['duration'])*1000)}\n{ytdl_data['uploader']}**",
supports_streaming=True,
attributes=[
DocumentAttributeAudio(
@@ -185,7 +185,7 @@ async def _(fuk):
getter,
f"{ytdl_data['id']}.mp4",
thumb=f"./resources/extras/ultroid.jpg",
- caption=f"**{ytdl_data['title']}\n{convert(ytdl_data['duration'])}\n{ytdl_data['uploader']}**",
+ caption=f"**{ytdl_data['title']}\n{time_formatter((ytdl_data['duration'])*1000)}\n{ytdl_data['uploader']}**",
supports_streaming=True,
progress_callback=lambda d, t: asyncio.get_event_loop().create_task(
progress(d, t, fuk, c_time, "Uploading..", f"{ytdl_data['title']}.mp4")
diff --git a/plugins/__init__.py b/plugins/__init__.py
index 1daefe71ff..52cc236f89 100644
--- a/plugins/__init__.py
+++ b/plugins/__init__.py
@@ -18,8 +18,10 @@
from pyUltroid.functions.sudos import *
from pyUltroid.utils import *
+from strings import get_string
+
start_time = time.time()
-ultroid_version = "v0.0.3"
+ultroid_version = "v0.0.4"
OWNER_NAME = ultroid_bot.me.first_name
OWNER_ID = ultroid_bot.me.id
diff --git a/plugins/_help.py b/plugins/_help.py
index fda2916e56..684a92047b 100644
--- a/plugins/_help.py
+++ b/plugins/_help.py
@@ -29,18 +29,18 @@ async def ult(ult):
output += "\n© @TheUltroid"
await eor(ult, output)
elif plug in CMD_HELP:
- kk = f"Plugin Name-{plug}\n\n✘ Commands Available-\n\n"
+ kk = f"Plugin Name-{plug}\n\n✘ Commands Available -\n\n"
kk += str(CMD_HELP[plug])
await eor(ult, kk)
else:
try:
- x = f"Plugin Name-{plug}\n\n✘ Commands Available-\n\n"
+ x = f"Plugin Name-{plug}\n\n✘ Commands Available -\n\n"
for d in LIST[plug]:
x += HNDLR + d
x += "\n"
await eor(ult, x)
except BaseException:
- await eod(ult, f"`{plug}` is not a valid plugin!", time=5)
+ await eod(ult, get_string("help_1").format(plug), time=5)
except BaseException:
await eor(ult, "Error 🤔 occured.")
else:
@@ -49,18 +49,14 @@ async def ult(ult):
except rep:
return await eor(
ult,
- "`The bot did not respond to the inline query.\nConsider using {}restart`".format(
- HNDLR
- ),
+ get_string("help_2").format(HNDLR),
)
except dis:
- return await eor(
- ult, "`Please turn on inline mode for your bot from` @Botfather."
- )
+ return await eor(ult, get_string("help_3"))
except bmi:
return await eor(
ult,
- f"Hey, \nYou are on Bot Mode. \nBot Mode Users Cant Get Help Directly ... \nInstead Copy Paste The Following in The Chat and Click The Pop Up \n\n `@{tgbot} ultd`",
+ get_string("help_4").format(tgbot),
)
await results[0].click(ult.chat_id, reply_to=ult.reply_to_msg_id, hide_via=True)
await ult.delete()
diff --git a/plugins/_inline.py b/plugins/_inline.py
index 95d6e613b0..278ba8da97 100644
--- a/plugins/_inline.py
+++ b/plugins/_inline.py
@@ -5,7 +5,6 @@
# PLease read the GNU Affero General Public License in
# .
-import os
import random
import re
import time
@@ -23,33 +22,13 @@
# ================================================#
notmine = "This bot is for {}".format(OWNER_NAME)
ULTROID_PIC = "https://telegra.ph/file/11245cacbffe92e5d5b14.jpg"
-helps = """
-[Uʟᴛʀᴏɪᴅ Sᴜᴘᴘᴏʀᴛ](t.me/ultroidsupport)
-
-**Hᴇʟᴘ Mᴇɴᴜ Oғ {}.
-
-Pʟᴜɢɪɴs ~ {}**
-"""
+helps = get_string("inline_1")
add_ons = udB.get("ADDONS")
if add_ons:
- zhelps = """
-[Uʟᴛʀᴏɪᴅ Sᴜᴘᴘᴏʀᴛ](t.me/ultroidsupport)
-
-**Hᴇʟᴘ Mᴇɴᴜ Oғ {}.
-
-Aᴅᴅᴏɴs ~ {}**
-"""
+ zhelps = get_string("inline_2")
else:
- zhelps = """
-[Uʟᴛʀᴏɪᴅ Sᴜᴘᴘᴏʀᴛ](t.me/ultroidsupport)
-
-**Hᴇʟᴘ Mᴇɴᴜ Oғ {}.
-
-Aᴅᴅᴏɴs ~ {}
-
-Gᴏ Aɴᴅ Aᴅᴅ ADDONS Vᴀʀ Wɪᴛʜ Vᴀʟᴜᴇ Tʀᴜᴇ**
-"""
+ zhelps = get_string("inline_3")
# ============================================#
@@ -59,15 +38,7 @@ async def e(o):
if len(o.text) == 0:
b = o.builder
uptime = grt((time.time() - start_time))
- ALIVEMSG = """
-**The Ultroid Userbot...**\n
-✵ **Owner** - `{}`
-✵ **Ultroid** - `{}`
-✵ **UpTime** - `{}`
-✵ **Python** - `{}`
-✵ **Telethon** - `{}`
-✵ **Branch** - `{}`
-""".format(
+ ALIVEMSG = get_string("alive_1").format(
OWNER_NAME,
ultroid_version,
uptime,
@@ -119,7 +90,9 @@ async def inline_handler(event):
description="Help Menu - UserBot | Telethon ",
url="https://t.me/TheUltroid",
thumb=InputWebDocument(ULTROID_PIC, 0, "image/jpeg", []),
- text=f"** Bᴏᴛ Oғ {OWNER_NAME}\n\nMᴀɪɴ Mᴇɴᴜ\n\nPʟᴜɢɪɴs ~ {len(PLUGINS) - 4}\nAᴅᴅᴏɴs ~ {len(ADDONS)}\nTᴏᴛᴀʟ Cᴏᴍᴍᴀɴᴅs ~ {cmd}**",
+ text=get_string("inline_4").format(
+ OWNER_NAME, len(PLUGINS) - 5, len(ADDONS), cmd
+ ),
buttons=[
[
Button.inline("• Pʟᴜɢɪɴs", data="hrrrr"),
@@ -201,42 +174,43 @@ async def _(e):
"Pʟᴀʏ Sᴛᴏʀᴇ Aᴘᴘs",
query="app telegram",
same_peer=True,
- )
- ],
- [
+ ),
Button.switch_inline(
"Mᴏᴅᴅᴇᴅ Aᴘᴘs",
query="mods minecraft",
same_peer=True,
- )
+ ),
],
[
Button.switch_inline(
"Sᴇᴀʀᴄʜ Oɴ Gᴏᴏɢʟᴇ",
query="go TeamUltroid",
same_peer=True,
- )
- ],
- [
+ ),
Button.switch_inline(
"Sᴇᴀʀᴄʜ Oɴ Yᴀʜᴏᴏ",
query="yahoo TeamUltroid",
same_peer=True,
- )
+ ),
],
[
Button.switch_inline(
"YᴏᴜTᴜʙᴇ Dᴏᴡɴʟᴏᴀᴅᴇʀ",
- query="Ed Sheeran Perfect",
+ query="yt Ed Sheeran Perfect",
same_peer=True,
)
],
[
+ Button.switch_inline(
+ "Rᴇx Tᴇsᴛᴇʀ",
+ query="rex",
+ same_peer=True,
+ ),
Button.switch_inline(
"CʟɪᴘAʀᴛ Sᴇᴀʀᴄʜ",
query="clipart frog",
same_peer=True,
- )
+ ),
],
[
Button.inline(
@@ -250,7 +224,7 @@ async def _(e):
@callback("hrrrr")
@owner
async def on_plug_in_callback_query_handler(event):
- xhelps = helps.format(OWNER_NAME, len(PLUGINS) - 4)
+ xhelps = helps.format(OWNER_NAME, len(PLUGINS) - 5)
buttons = paginate_help(0, PLUGINS, "helpme")
await event.edit(f"{xhelps}", buttons=buttons, link_preview=False)
@@ -263,7 +237,7 @@ async def addon(event):
await event.edit(f"{halp}", buttons=buttons, link_preview=False)
else:
await event.answer(
- "• Iɴsᴛᴀʟʟ A Pʟᴜɢɪɴ Mᴀɴᴜᴀʟʟʏ Oʀ Aᴅᴅ Vᴀʀ ADDONS Wɪᴛʜ Vᴀʟᴜᴇ True",
+ f"• Tʏᴘᴇ `{HNDLR}setredis ADDONS True`\n Tᴏ ɢᴇᴛ ᴀᴅᴅᴏɴs ᴘʟᴜɢɪɴs",
cache_time=0,
alert=True,
)
@@ -320,7 +294,7 @@ async def on_plug_in_callback_query_handler(event):
@callback("back")
@owner
async def backr(event):
- xhelps = helps.format(OWNER_NAME, len(PLUGINS) - 4)
+ xhelps = helps.format(OWNER_NAME, len(PLUGINS) - 5)
current_page_number = int(upage)
buttons = paginate_help(current_page_number, PLUGINS, "helpme")
await event.edit(f"{xhelps}", buttons=buttons, link_preview=False)
@@ -363,7 +337,9 @@ async def opner(event):
z.append(y)
cmd = len(z) + 10
await event.edit(
- f"** Bᴏᴛ Oғ {OWNER_NAME}\n\nMᴀɪɴ Mᴇɴᴜ\n\nPʟᴜɢɪɴs ~ {len(PLUGINS) - 4}\nAᴅᴅᴏɴs ~ {len(ADDONS)}\nTᴏᴛᴀʟ Cᴏᴍᴍᴀɴᴅs ~ {cmd}**",
+ get_string("inline_4").format(
+ OWNER_NAME, len(PLUGINS) - 5, len(ADDONS), cmd
+ ),
buttons=buttons,
link_preview=False,
)
@@ -372,7 +348,7 @@ async def opner(event):
@owner
async def on_plug_in_callback_query_handler(event):
await event.edit(
- "**Mᴇɴᴜ Hᴀs Bᴇᴇɴ Cʟᴏsᴇᴅ**",
+ get_string("inline_5"),
buttons=Button.inline("Oᴘᴇɴ Mᴀɪɴ Mᴇɴᴜ Aɢᴀɪɴ", data="open"),
)
diff --git a/plugins/_tagnotifs.py b/plugins/_tagnotifs.py
index 7053698123..b800d37b27 100644
--- a/plugins/_tagnotifs.py
+++ b/plugins/_tagnotifs.py
@@ -41,9 +41,9 @@ async def all_messages_catcher(e):
)
except BaseException:
if e.text:
- cap = f"{xx} tagged you in {yy}\n\n```{e.text}```\n\n[📨Message📨]({msg})"
+ cap = get_string("tagnot_1").format(xx, yy, e.text, msg)
else:
- cap = f"{xx} tagged you in {yy}\n\n [📨Message📨]({msg})"
+ cap = get_string("tagnot_2").format(xx, yy, msg)
try:
await ultroid_bot.send_message(NEEDTOLOG, cap, link_preview=False)
except BaseException:
diff --git a/plugins/_ultroid.py b/plugins/_ultroid.py
new file mode 100644
index 0000000000..e0980935d3
--- /dev/null
+++ b/plugins/_ultroid.py
@@ -0,0 +1,28 @@
+# Ultroid - UserBot
+# Copyright (C) 2020 TeamUltroid
+#
+# This file is a part of < https://github.com/TeamUltroid/Ultroid/ >
+# PLease read the GNU Affero General Public License in
+# .
+
+
+from telethon.errors import ChatSendInlineForbiddenError
+
+from . import *
+
+REPOMSG = (
+ "• **ULTROID USERBOT** •\n\n",
+ "• Repo - [Click Here](https://github.com/TeamUltroid/Ultroid)\n",
+ "• Support - @UltroidSupport",
+)
+
+
+@ultroid_cmd(pattern="(repo|ultroid)$")
+async def repify(e):
+ try:
+ q = await ultroid_bot.inline_query(Var.BOT_USERNAME, "repo")
+ await q[0].click(e.chat_id)
+ if e.sender_id == ultroid_bot.uid:
+ await e.delete()
+ except ChatSendInlineForbiddenError:
+ await eor(e, REPOMSG)
diff --git a/plugins/_wspr.py b/plugins/_wspr.py
index d799203ba5..c36241fc20 100644
--- a/plugins/_wspr.py
+++ b/plugins/_wspr.py
@@ -35,7 +35,7 @@ async def _(e):
except ValueError as ex:
return await eor(e, str(ex))
except AttributeError:
- return await eor(e, "No username of replied user wad found")
+ return await eor(e, "No username of replied user was found.")
else:
put = e.pattern_match.group(1)
if put:
@@ -44,14 +44,10 @@ async def _(e):
except rep:
return await eor(
e,
- "`The bot did not respond to the inline query.\nConsider using {}restart`".format(
- HNDLR
- ),
+ get_string("help_2").format(HNDLR),
)
except dis:
- return await eor(
- e, "`Please turn on inline mode for your bot from` @Botfather."
- )
+ return await eor(e, get_string("help_3"))
await results[0].click(e.chat_id, reply_to=e.reply_to_msg_id, hide_via=True)
await e.delete()
else:
@@ -126,7 +122,7 @@ async def _(e):
sur = e.builder.article(
title=f"{logi.first_name}",
description=desc,
- text=f"@{logi.username} secret msg for you.\nDelete your msg after reading.\nOr the next msg will not be updated.",
+ text=get_string("wspr_1").format(logi.username),
buttons=button,
)
buddhhu.append(meme)
@@ -162,7 +158,7 @@ async def _(e):
except KeyError:
pass
try:
- await e.edit("Msg deleted")
+ await e.edit(get_string("wspr_2"))
except np:
pass
else:
diff --git a/plugins/admintools.py b/plugins/admintools.py
index 27464e01c6..9f40be2da1 100644
--- a/plugins/admintools.py
+++ b/plugins/admintools.py
@@ -61,7 +61,7 @@
groups_only=True,
)
async def prmte(ult):
- xx = await eor(ult, "`Processing...`")
+ xx = await eor(ult, get_string("com_1"))
chat = await ult.get_chat()
isAdmin = chat.admin_rights
isCreator = chat.creator
@@ -103,7 +103,7 @@ async def prmte(ult):
groups_only=True,
)
async def dmote(ult):
- xx = await eor(ult, "`Processing...`")
+ xx = await eor(ult, get_string("com_1"))
chat = await ult.get_chat()
isAdmin = chat.admin_rights
isCreator = chat.creator
@@ -145,7 +145,7 @@ async def dmote(ult):
groups_only=True,
)
async def bban(ult):
- xx = await eor(ult, "`Processing...`")
+ xx = await eor(ult, get_string("com_1"))
chat = await ult.get_chat()
isAdmin = chat.admin_rights
isCreator = chat.creator
@@ -195,7 +195,7 @@ async def bban(ult):
groups_only=True,
)
async def uunban(ult):
- xx = await eor(ult, "`Processing...`")
+ xx = await eor(ult, get_string("com_1"))
chat = await ult.get_chat()
isAdmin = chat.admin_rights
isCreator = chat.creator
@@ -242,7 +242,7 @@ async def kck(ult):
return
except BaseException:
pass
- xx = await eor(ult, "`Processing...`")
+ xx = await eor(ult, get_string("com_1"))
chat = await ult.get_chat()
isAdmin = chat.admin_rights
isCreator = chat.creator
@@ -294,7 +294,7 @@ async def pin(msg):
ch = msg.pattern_match.group(1)
if ch != "silent":
slnt = True
- x = await eor(msg, "`Processing...`")
+ x = await eor(msg, get_string("com_1"))
try:
await ultroid_bot.pin_message(msg.chat_id, xx, notify=slnt)
except BadRequestError:
@@ -319,7 +319,7 @@ async def pin(msg):
pattern="unpin($| (.*))",
)
async def unp(ult):
- xx = await eor(ult, "`Processing...`")
+ xx = await eor(ult, get_string("com_1"))
if not ult.is_private:
# for (un)pin(s) in private messages
await ult.get_chat()
@@ -406,10 +406,10 @@ async def fastpurgerme(purg):
pattern="purgeall$",
)
async def _(e):
- xx = await eor(e, "`Processing...`")
+ xx = await eor(e, get_string("com_1"))
if e.reply_to_msg_id:
input = (await e.get_reply_message()).sender_id
- user = (await e.client.get_entity(input)).first_name
+ (await e.client.get_entity(input)).first_name
try:
nos = 0
async for x in e.client.iter_messages(e.chat_id, from_user=input):
diff --git a/plugins/afk.py b/plugins/afk.py
index 5da8f757cc..0c1ffcf3c8 100644
--- a/plugins/afk.py
+++ b/plugins/afk.py
@@ -10,7 +10,7 @@
• `{i}afk `
AFK means away from keyboard,
- After u active this if Someting tag or msg u then It auto Reply Him/her,
+ After u active this if Someone tag or msg u then It auto Reply Him/her,
(Note : By Reply To any media U can set media afk too).
"""
@@ -57,17 +57,17 @@ async def set_not_afk(event):
shite = await ultroid_bot.send_message(event.chat_id, file=pic)
shites = await ultroid_bot.send_message(
event.chat_id,
- "`No Longer Afk`\n\nWas afk for~ " + total_afk_time + "`",
+ get_string("afk_1").format(total_afk_time),
)
else:
shite = await ultroid_bot.send_message(
event.chat_id,
- "`No Longer Afk`\n\nWas afk for~ " + total_afk_time + "`",
+ get_string("afk_1").format(total_afk_time),
file=pic,
)
except BaseException:
shite = await ultroid_bot.send_message(
- event.chat_id, "`No Longer Afk \nWas afk for " + total_afk_time + "`"
+ event.chat_id, get_string("afk_1").format(total_afk_time)
)
try:
try:
@@ -75,27 +75,18 @@ async def set_not_afk(event):
await ultroid_bot.send_message(LOG, file=pic)
await ultroid_bot.send_message(
LOG,
- "#AFKFALSE \nSet AFK mode to False\n"
- + "Back alive!\nNo Longer afk.\n Was afk for`"
- + total_afk_time
- + "`",
+ get_string("afk_2").format(total_afk_time),
)
else:
await ultroid_bot.send_message(
LOG,
- "#AFKFALSE \nSet AFK mode to False\n"
- + "Back alive!\nNo Longer afk.\n Was afk for`"
- + total_afk_time
- + "`",
+ get_string("afk_2").format(total_afk_time),
file=pic,
)
except BaseException:
await ultroid_bot.send_message(
LOG,
- "#AFKFALSE \nSet AFK mode to False\n"
- + "Back alive!\nNo Longer afk.\n Was afk for`"
- + total_afk_time
- + "`",
+ get_string("afk_2").format(total_afk_time),
)
except BaseException:
pass
@@ -130,13 +121,9 @@ async def on_afk(event):
if USER_AFK and not (await event.get_sender()).bot:
msg = None
if reason:
- message_to_reply = (
- f"__Master #AFK since__ `{total_afk_time}`\n\n"
- + f"__"
- + f"\n\n**Reason:- `**{reason}`"
- )
+ message_to_reply = get_string("afk_3").format(total_afk_time, reason)
else:
- message_to_reply = f"__Master #AFK since__ `{total_afk_time}`\n\n" + f"__"
+ message_to_reply = get_string("afk_4").format(total_afk_time)
try:
if pic.endswith((".tgs", ".webp")):
msg = await event.reply(file=pic)
@@ -198,55 +185,51 @@ async def _(event):
if pic.endswith((".tgs", ".webp")):
await ultroid_bot.send_message(event.chat_id, file=pic)
await ultroid_bot.send_message(
- event.chat_id, f"Afk __because ~ {reason}__"
+ event.chat_id, get_string("afk_5").format(reason)
)
else:
await ultroid_bot.send_message(
- event.chat_id, f"Afk __because ~ {reason}__", file=pic
+ event.chat_id, get_string("afk_5").format(reason), file=pic
)
except BaseException:
await ultroid_bot.send_message(
- event.chat_id, f"Afk __because ~ {reason}__"
+ event.chat_id, get_string("afk_5").format(reason)
)
else:
try:
if pic.endswith((".tgs", ".webp")):
await ultroid_bot.send_message(event.chat_id, file=pic)
- await ultroid_bot.send_message(
- event.chat_id, f"**I am Going afk!**"
- )
+ await ultroid_bot.send_message(event.chat_id, get_string("afk_6"))
else:
await ultroid_bot.send_message(
- event.chat_id, f"**I am Going afk!**", file=pic
+ event.chat_id, get_string("afk_6"), file=pic
)
except BaseException:
- await ultroid_bot.send_message(event.chat_id, f"**I am Going afk!**")
+ await ultroid_bot.send_message(event.chat_id, get_string("afk_6"))
await event.delete()
try:
if reason and pic:
if pic.endswith((".tgs", ".webp")):
await ultroid_bot.send_message(LOG, file=pic)
await ultroid_bot.send_message(
- LOG, f"AFK mode to On and Reason is {reason}"
+ LOG, get_string("afk_7").format(reason)
)
else:
await ultroid_bot.send_message(
- LOG, f"AFK mode to On and Reason is {reason}", file=pic
+ LOG, get_string("afk_7").format(reason), file=pic
)
elif reason:
- await ultroid_bot.send_message(
- LOG, f"AFK mode to On and Reason is {reason}"
- )
+ await ultroid_bot.send_message(LOG, get_string("afk_7").format(reason))
elif pic:
if pic.endswith((".tgs", ".webp")):
await ultroid_bot.send_message(LOG, file=pic)
- await ultroid_bot.send_message(LOG, f"AFK mode to On")
+ await ultroid_bot.send_message(LOG, get_string("afk_8"))
else:
- await ultroid_bot.send_message(LOG, f"AFK mode to On", file=pic)
+ await ultroid_bot.send_message(LOG, get_string("afk_8"), file=pic)
else:
- await ultroid_bot.send_message(LOG, f"AFK mode to On")
- except Exception as e:
- logger.warn(str(e))
+ await ultroid_bot.send_message(LOG, get_string("afk_8"))
+ except BaseException:
+ pass
HELP.update({f"{__name__.split('.')[1]}": f"{__doc__.format(i=HNDLR)}"})
diff --git a/plugins/autopic.py b/plugins/autopic.py
index 3627135617..8246e45879 100644
--- a/plugins/autopic.py
+++ b/plugins/autopic.py
@@ -11,6 +11,9 @@
• `{i}autopic `
Will change your profile pic at defined intervals with pics related to the given topic.
+• `{i}stoppic`
+ Stop the AutoPic command.
+
"""
import asyncio
import os
@@ -25,20 +28,22 @@
async def autopic(e):
search = e.pattern_match.group(1)
if not search:
- return await eor(e, "Heya Give me some Text ..")
+ return await eor(get_string("autopic_1"))
clls = returnpage(search)
if len(clls) == 0:
- return await eor(e, f"No Results found for `{search}`")
+ return await eor(get_string("autopic_2").format(search))
if not len(clls) == 1:
num = random.randrange(0, len(clls) - 1)
else:
num = 0
page = clls[num]
title = page["title"]
- a = await eor(
- e, f" Got a Collection `{title}` related to your search !\nStarting Autopic !!"
- )
+ await eor(get_string("autopic_3").format(title))
+ udB.set("AUTOPIC", "True")
while True:
+ ge = udB.get("AUTOPIC")
+ if not ge == "True":
+ return
animepp(page["href"])
file = await ultroid_bot.upload_file("autopic.jpg")
await ultroid_bot(functions.photos.UploadProfilePhotoRequest(file))
@@ -46,4 +51,13 @@ async def autopic(e):
await asyncio.sleep(1100)
+@ultroid_cmd(pattern="stoppic$")
+async def stoppo(ult):
+ gt = udB.get("AUTOPIC")
+ if not gt == "True":
+ return await eor(ult, "`AUTOPIC was not in used !!`")
+ udB.set("AUTOPIC", "None")
+ await eor(ult, "`AUTOPIC Stopped !!`")
+
+
HELP.update({f"{__name__.split('.')[1]}": f"{__doc__.format(i=HNDLR)}"})
diff --git a/plugins/bot.py b/plugins/bot.py
index 66fa350ab6..4faab45606 100644
--- a/plugins/bot.py
+++ b/plugins/bot.py
@@ -68,20 +68,7 @@ async def lol(ult):
pic = udB.get("ALIVE_PIC")
uptime = grt((time.time() - start_time))
header = udB.get("ALIVE_TEXT") if udB.get("ALIVE_TEXT") else "Hey, I am alive."
- als = """
-**The Ultroid Userbot...**
-
-**{}**
-
-┏━━━━━━━━━━━━━━━━━━━━━
-┣ **Owner** - `{}`
-┣ **Version** - `{}`
-┣ **UpTime** - `{}`
-┣ **Python** - `{}`
-┣ **Telethon** - `{}`
-┣ **Branch** - `{}`
-┗━━━━━━━━━━━━━━━━━━━━━
-""".format(
+ als = (get_string("alive_1")).format(
header,
OWNER_NAME,
ultroid_version,
@@ -112,7 +99,7 @@ async def _(event):
end = dt.now()
ms = (end - start).microseconds / 1000
uptime = grt((time.time() - start_time))
- await x.edit(f"**Pong !!** `{ms}ms`\n**Uptime** - `{uptime}`")
+ await x.edit(get_string("ping").format(ms, uptime))
@ultroid_cmd(
@@ -140,15 +127,18 @@ async def _(ult):
with open("logs-ultroid.txt", "w") as log:
log.write(app.get_log())
ok = app.get_log()
- message = ok
- url = "https://del.dog/documents"
- r = requests.post(url, data=message.encode("UTF-8")).json()
- url = f"https://del.dog/{r['key']}"
+ key = (
+ requests.post("https://nekobin.com/api/documents", json={"content": ok})
+ .json()
+ .get("result")
+ .get("key")
+ )
+ url = f"https://nekobin.com/{key}"
await ult.client.send_file(
ult.chat_id,
"logs-ultroid.txt",
reply_to=ult.id,
- caption=f"**Heroku** Ultroid Logs.\nPasted [here]({url}) too!",
+ caption=get_string("log").format(url),
)
await xx.edit("`Uploading...`")
await asyncio.sleep(1)
@@ -208,18 +198,23 @@ async def dyno_usage(dyno):
FREE = humanbytes(free)
return await eod(
dyn,
- "**⚙️ Dyno Usage ⚙️**:\n\n"
- + f" -> `Dyno usage for` **{Var.HEROKU_APP_NAME}**:\n"
- + f" • `{AppHours}`**h** `{AppMinutes}`**m** "
- + f"**|** [`{AppPercentage}`**%**]"
- + "\n\n"
- + " -> `Dyno hours quota remaining this month`:\n"
- + f" • `{hours}`**h** `{minutes}`**m** "
- + f"**|** [`{percentage}`**%**]\n\n"
- + f"**Total Disk Space: {TOTAL}\n\n**"
- + f"**Used: {USED} Free: {FREE}\n\n**"
- + f"**📊Data Usage📊\n\nUpload: {upload}\nDown: {down}\n\n**"
- + f"**CPU: {cpuUsage}%\nRAM: {memory}%\nDISK: {disk}%**",
+ get_string("usage").format(
+ Var.HEROKU_APP_NAME,
+ AppHours,
+ AppMinutes,
+ AppPercentage,
+ hours,
+ minutes,
+ percentage,
+ TOTAL,
+ USED,
+ FREE,
+ upload,
+ down,
+ cpuUsage,
+ memory,
+ disk,
+ ),
)
@@ -227,7 +222,7 @@ async def dyno_usage(dyno):
pattern="shutdown$",
)
async def shht(event):
- await eor(event, "GoodBye {}.\n`Shutting down...`".format(OWNER_NAME))
+ await eor(event, get_string("shutdown").format(OWNER_NAME))
await ultroid_bot.disconnect()
diff --git a/plugins/broadcast.py b/plugins/broadcast.py
index 154c9e5765..9394a6b35d 100644
--- a/plugins/broadcast.py
+++ b/plugins/broadcast.py
@@ -29,15 +29,15 @@
from . import *
-@ultroid_cmd(pattern="add ?(.*)")
+@ultroid_cmd(pattern="add ?(.*)", allow_sudo=False)
async def broadcast_adder(event):
if "addsudo" in event.text: # weird fix
return
msgg = event.pattern_match.group(1)
- x = await eor(event, "`Adding to db...`")
+ x = await eor(event, get_string("bd_1"))
aldone = new = crsh = 0
if msgg == "all":
- await x.edit("`Trying to add all admin channels to db...`")
+ await x.edit(get_string("bd_2"))
chats = [
e.entity
for e in await ultroid.get_dialogs()
@@ -47,17 +47,15 @@ async def broadcast_adder(event):
try:
if i.broadcast:
if i.creator or i.admin_rights:
- if is_channel_added(i.id):
- aldone += 1
- else:
+ if not is_channel_added(i.id):
+ new += 1
cid = f"-100{i.id}"
add_channel(int(cid))
- new += 1
+ else:
+ pass
except BaseException:
pass
- await x.edit(
- f"**Done.**\nChats already in Database: {get_no_channels()}\nNewly Added: {new}"
- )
+ await x.edit(get_string("bd_3").format(get_no_channels(), new))
return
if event.reply_to_msg_id:
previous_message = await event.get_reply_message()
@@ -68,7 +66,7 @@ async def broadcast_adder(event):
channel_id = lines[line_number][4:-1]
if not is_channel_added(channel_id):
add_channel(channel_id)
- await x.edit("Channels added!")
+ await x.edit(get_string("bd_4"))
await asyncio.sleep(3)
await event.delete()
return
@@ -79,23 +77,23 @@ async def broadcast_adder(event):
except BaseException:
pass
if not is_channel_added(chat_id):
- x = add_channel(chat_id)
- if x:
- await x.edit("`Added to database!`")
+ xx = add_channel(chat_id)
+ if xx:
+ await x.edit(get_string("bd_5"))
else:
await x.edit("Error")
await asyncio.sleep(3)
await event.delete()
elif is_channel_added(chat_id):
- await x.edit("`Channel is already is database!`")
+ await x.edit(get_string("bd_6"))
await asyncio.sleep(3)
await event.delete()
-@ultroid_cmd(pattern="rem ?(.*)")
+@ultroid_cmd(pattern="rem ?(.*)", allow_sudo=False)
async def broadcast_remover(event):
chat_id = event.pattern_match.group(1)
- x = await eor(event, "`Processing...`")
+ x = await eor(event, get_string("com_1"))
if chat_id == "all":
await x.edit("`Removing...`")
udB.delete("BROADCAST")
@@ -134,7 +132,8 @@ async def list_all(event):
msg += f"=> **{name}** [`{channel}`]\n"
msg += f"\nTotal {get_no_channels()} channels."
if len(msg) > 4096:
- with io.BytesIO(str.encode(msg)) as out_file:
+ MSG = msg.replace("*", "").replace("`", "")
+ with io.BytesIO(str.encode(MSG)) as out_file:
out_file.name = "channels.txt"
await ultroid_bot.send_file(
event.chat_id,
@@ -149,7 +148,7 @@ async def list_all(event):
await x.edit(msg)
-@ultroid_cmd(pattern="forward ?(.*)")
+@ultroid_cmd(pattern="forward ?(.*)", allow_sudo=False)
async def forw(event):
if event.fwd_from:
return
@@ -198,7 +197,7 @@ async def forw(event):
await x.edit("Set up log channel for checking errors.")
-@ultroid_cmd(pattern="broadcast ?(.*)")
+@ultroid_cmd(pattern="broadcast ?(.*)", allow_sudo=False)
async def sending(event):
x = await eor(event, "`Processing...`")
if not event.is_reply:
@@ -206,10 +205,8 @@ async def sending(event):
channels = get_channels()
error_count = 0
sent_count = 0
- if len(channels) == 0:
- return await x.edit(
- f"You haven't added any channels. Use `{hndlr}add` in them fist!"
- )
+ if get_no_channels() == 0:
+ return await x.edit(f"Please add channels by using `{hndlr}add` in them.")
await x.edit("Sending....")
if event.reply_to_msg_id:
previous_message = await event.get_reply_message()
@@ -318,4 +315,5 @@ async def sending(event):
except BaseException:
await x.edit("Set up log channel for checking errors.")
+
HELP.update({f"{__name__.split('.')[1]}": f"{__doc__.format(i=HNDLR)}"})
diff --git a/plugins/converter.py b/plugins/converter.py
index a358f9f709..9a7f9b2826 100644
--- a/plugins/converter.py
+++ b/plugins/converter.py
@@ -39,7 +39,7 @@ async def imak(event):
xx = await eor(event, "`Processing...`")
image = await ultroid_bot.download_media(reply)
os.rename(image, inp)
- await ultroid_bot.send_file(event.chat_id, inp, reply_to=reply)
+ await ultroid_bot.send_file(event.chat_id, inp, force_document=True, reply_to=reply)
os.remove(inp)
await xx.delete()
diff --git a/plugins/gdrive.py b/plugins/gdrive.py
index 83efc1fc06..723d9cd671 100644
--- a/plugins/gdrive.py
+++ b/plugins/gdrive.py
@@ -9,14 +9,14 @@
"""
✘ Commands Available
-• `{i}ulgdrive `
+• `{i}ugdrive `
Reply to file to upload on Google Drive.
Add file name to upload on Google Drive.
• `{i}drivesearch `
Search file name on Google Drive and get link.
-• `{i}uldir `
+• `{i}udir `
Upload a directory on Google Drive.
• `{i}gfolder`
@@ -34,57 +34,16 @@
from . import *
-TOKEN_FILE = "resources/downloads/auth_token.txt"
-
-
-@asst_cmd("auth")
-async def aut(event):
- if event.is_group:
- return
- if os.path.exists(TOKEN_FILE):
- return await event.reply("`You have already authorised with Google Drive`")
- if Redis("GDRIVE_CLIENT_ID") == None or Redis("GDRIVE_CLIENT_SECRET") == None:
- await event.reply(
- "Go [here](https://console.developers.google.com/flows/enableapi?apiid=drive) and get your GDRIVE_CLIENT_ID and GDRIVE_CLIENT_SECRET\n\n"
- + "Send your GDRIVE_CLIENT_ID and GDRIVE_CLIENT_SECRET as this.\n`GDRIVE_CLIENT_ID GDRIVE_CLIENT_SECRET` separated by space.",
- )
- async with asst.conversation(ultroid_bot.uid) as conv:
- reply = conv.wait_event(events.NewMessage(from_users=ultroid_bot.uid))
- repl = await reply
- try:
- creds = repl.text.split(" ")
- id = creds[0]
- if not id.endswith("com"):
- return await event.reply("`Wrong Client Id`")
- try:
- secret = creds[1]
- except IndexError:
- return await event.reply("`No Client Secret Found`")
- udB.set("GDRIVE_CLIENT_ID", id)
- udB.set("GDRIVE_CLIENT_SECRET", secret)
- return await repl.reply("`Success!` Now send /auth again")
- except Exception as exx:
- return await repl.reply(
- "`Something went wrong! Send `/auth` again.\nIf same happens contact `@TheUltroid"
- )
- else:
- storage = await create_token_file(TOKEN_FILE, event)
- http = authorize(TOKEN_FILE, storage)
- f = open(TOKEN_FILE, "r")
- token_file_data = f.read()
- udB.set("GDRIVE_TOKEN", token_file_data)
- await event.reply(
- "`Success!\nYou are all set to use Google Drive with Ultroid Userbot.`"
- )
+TOKEN_FILE = "resources/auths/auth_token.txt"
@ultroid_cmd(
- pattern="ulgdrive ?(.*)",
+ pattern="ugdrive ?(.*)",
)
async def _(event):
- mone = await eor(event, "Processing ...")
+ mone = await eor(event, get_string("com_1"))
if not os.path.exists(TOKEN_FILE):
- return await eod(mone, f"`Go to `{Var.BOT_USERNAME}` and send ``/auth.`")
+ return await eod(mone, get_string("gdrive_6").format(Var.BOT_USERNAME))
input_str = event.pattern_match.group(1)
required_file_name = None
start = datetime.now()
@@ -136,11 +95,7 @@ async def _(event):
mone,
Redis("GDRIVE_FOLDER_ID"),
)
- await mone.edit(
- "**Successfully Uploaded File on G-Drive :**\n\n[{}]({})".format(
- file_name, g_drive_link
- )
- )
+ await mone.edit(get_string("gdrive_7").format(file_name, g_drive_link))
except Exception as e:
await mone.edit(f"Exception occurred while uploading to gDrive {e}")
else:
@@ -152,7 +107,7 @@ async def _(event):
)
async def sch(event):
if not os.path.exists(TOKEN_FILE):
- return await eod(mone, f"`Go to `{Var.BOT_USERNAME}` and send ``/auth.`")
+ return await eod(event, get_string("gdrive_6").format(Var.BOT_USERNAME))
http = authorize(TOKEN_FILE, None)
input_str = event.pattern_match.group(1).strip()
a = await eor(event, "Searching for {} in G-Drive.".format(input_str))
@@ -170,11 +125,11 @@ async def sch(event):
@ultroid_cmd(
- pattern="uldir ?(.*)",
+ pattern="udir ?(.*)",
)
async def _(event):
if not os.path.exists(TOKEN_FILE):
- return await eod(mone, f"`Go to `{Var.BOT_USERNAME}` and send ``/auth.`")
+ return await eod(mone, get_string("gdrive_6").format(Var.BOT_USERNAME))
input_str = event.pattern_match.group(1)
if os.path.isdir(input_str):
http = authorize(TOKEN_FILE, None)
@@ -186,10 +141,7 @@ async def _(event):
)
await DoTeskWithDir(http, input_str, event, dir_id)
dir_link = "https://drive.google.com/folderview?id={}".format(dir_id)
- await eod(
- a,
- f"**Successfully Uploaded Folder To G-Drive...**\n[{input_str}]({dir_link})",
- )
+ await eod(a, get_string("gdrive_7").format(input_str, dir_link))
else:
return await eod(event, f"Directory {input_str} does not seem to exist", time=5)
diff --git a/plugins/github.py b/plugins/github.py
index 02723b6b3c..7d405f33e4 100644
--- a/plugins/github.py
+++ b/plugins/github.py
@@ -22,7 +22,7 @@
pattern="github (.*)",
)
async def gitsearch(event):
- xx = await eor(event, "`Searching...`")
+ xx = await eor(event, get_string("com_2"))
try:
usrname = event.pattern_match.group(1)
except BaseException:
diff --git a/plugins/globaltools.py b/plugins/globaltools.py
index 05272c34d5..a5038cf185 100644
--- a/plugins/globaltools.py
+++ b/plugins/globaltools.py
@@ -101,8 +101,6 @@ async def _(e):
return await eod(xx, "`I can't gban myself.`", time=3)
if str(userid) in DEVLIST:
return await eod(xx, "`I can't gban my Developers.`", time=3)
- if str(userid) in (Redis("SUDOS")).split(" "):
- return await eod(xx, "`I can't gban a sudo user.`", time=3)
if is_gbanned(userid):
return await eod(
xx, "`User is already gbanned and added to gbanwatch.`", time=4
@@ -140,7 +138,6 @@ async def gcast(event):
await ultroid_bot.send_message(chat, msg)
except:
er += 1
- pass
await kk.edit(f"Done in {done} chats, error in {er} chat(s)")
@@ -172,8 +169,6 @@ async def gkick(e):
return await eod(xx, "`I can't gkick myself.`", time=3)
if str(userid) in DEVLIST:
return await eod(xx, "`I can't gkick my Developers.`", time=3)
- if str(userid) in (Redis("SUDOS")).split(" "):
- return await eod(xx, "`I can't gkick a sudo user.`", time=3)
async for gkick in e.client.iter_dialogs():
if gkick.is_group or gkick.is_channel:
try:
@@ -217,13 +212,7 @@ async def _(e):
async for onmute in e.client.iter_dialogs():
if onmute.is_group:
try:
- await e.client(
- EditBannedRequest(
- onmute.id,
- userid,
- ChatBannedRights(until_date=None, send_messages=True),
- )
- )
+ await e.client.edit_permissions(onmute.id, userid, send_messages=False)
chats += 1
except:
pass
@@ -260,13 +249,7 @@ async def _(e):
async for hurr in e.client.iter_dialogs():
if hurr.is_group:
try:
- await e.client(
- EditBannedRequest(
- hurr.id,
- userid,
- ChatBannedRights(until_date=None, send_messages=False),
- )
- )
+ await e.client.edit_permissions(hurr.id, userid, send_messages=True)
chats += 1
except:
pass
@@ -287,13 +270,9 @@ async def _(e):
)
gban_watch = f"`Gbanned User` [{user.first_name}](tg://user?id={user.id}) `Spotted\n"
gban_watch += f"Banned Successfully`"
+ await e.reply(gban_watch)
except:
pass
- else:
- gban_watch = (
- f"@admins `Gbanned user` [{user.first_name}]({user.id}) `Spotted.`"
- )
- await e.reply(gban_watch)
HELP.update({f"{__name__.split('.')[1]}": f"{__doc__.format(i=HNDLR)}"})
diff --git a/plugins/google.py b/plugins/google.py
index 467a6745cf..caabe3fa15 100644
--- a/plugins/google.py
+++ b/plugins/google.py
@@ -24,7 +24,9 @@
import requests
from bs4 import BeautifulSoup as bs
from PIL import Image
-from search_engine_parser import *
+from pyUltroid.functions.parser import GoogleSearch
+
+from strings import get_string
from . import *
@@ -34,9 +36,9 @@ async def google(event):
inp = event.pattern_match.group(1)
if not inp:
return await event.edit("`Give something to search..`")
- x = await eor(event, "`searching..`")
+ x = await eor(event, get_string("com_2"))
gs = GoogleSearch()
- res = await gs.async_search(f"{inp}")
+ res = await gs.async_search(f"{inp}", cache=False)
out = ""
for i in range(len(res["links"])):
text = res["titles"][i]
diff --git a/plugins/groups.py b/plugins/groups.py
new file mode 100644
index 0000000000..c8237ac07f
--- /dev/null
+++ b/plugins/groups.py
@@ -0,0 +1,203 @@
+# Ultroid - UserBot
+# Copyright (C) 2020 TeamUltroid
+#
+# This file is a part of < https://github.com/TeamUltroid/Ultroid/ >
+# PLease read the GNU Affero General Public License in
+# .
+
+"""
+✘ Commands Available -
+
+• `{i}unbanall`
+ Unban all Members of a group.
+
+• `{i}rmusers`
+ Remove users specifically.
+"""
+
+
+from telethon import events
+from telethon.tl import functions, types
+from telethon.tl.types import (ChannelParticipantsKicked, ChatBannedRights,
+ UserStatusEmpty, UserStatusLastMonth,
+ UserStatusLastWeek, UserStatusOffline,
+ UserStatusOnline, UserStatusRecently)
+
+from . import *
+
+
+@ultroid_cmd(
+ pattern="unbanall$",
+ groups_only=True,
+)
+async def _(event):
+ xx = await eor(event, "Searching Participant Lists.")
+ p = 0
+ (await event.get_chat()).title
+ async for i in event.client.iter_participants(
+ event.chat_id, filter=ChannelParticipantsKicked, aggressive=True
+ ):
+ try:
+ await event.client.edit_permissions(event.chat_id, i, view_messages=True)
+ p += 1
+ except:
+ pass
+ await eod(xx, "{title}: {p} unbanned")
+
+
+@ultroid_cmd(
+ pattern="rmusers ?(.*)",
+ groups_only=True,
+)
+async def _(event):
+ xx = await eor(event, "Searching Participant Lists.")
+ input_str = event.pattern_match.group(1)
+ if input_str:
+ chat = await event.get_chat()
+ if not (chat.admin_rights or chat.creator):
+ return await eod(xx, "`You aren't an admin here!`", time=5)
+ p = 0
+ b = 0
+ c = 0
+ d = 0
+ m = 0
+ n = 0
+ y = 0
+ w = 0
+ o = 0
+ q = 0
+ r = 0
+ async for i in event.client.iter_participants(event.chat_id):
+ p += 1
+ rights = ChatBannedRights(
+ until_date=None,
+ view_messages=True,
+ )
+ if isinstance(i.status, UserStatusEmpty):
+ y += 1
+ if "empty" in input_str:
+ try:
+ await event.client(
+ functions.channels.EditBannedRequest(event.chat_id, i, rights)
+ )
+ c += 1
+ y -= 1
+ except:
+ pass
+ if isinstance(i.status, UserStatusLastMonth):
+ m += 1
+ if "month" in input_str:
+ try:
+ await event.client(
+ functions.channels.EditBannedRequest(event.chat_id, i, rights)
+ )
+ c += 1
+ m -= 1
+ except:
+ pass
+ if isinstance(i.status, UserStatusLastWeek):
+ w += 1
+ if "week" in input_str:
+ try:
+ await event.client(
+ functions.channels.EditBannedRequest(event.chat_id, i, rights)
+ )
+ c += 1
+ w -= 1
+ except:
+ pass
+ if isinstance(i.status, UserStatusOffline):
+ o += 1
+ if "offline" in input_str:
+ try:
+ await event.client(
+ functions.channels.EditBannedRequest(event.chat_id, i, rights)
+ )
+ c += 1
+ o -= 1
+ except:
+ pass
+ if isinstance(i.status, UserStatusOnline):
+ q += 1
+ if "online" in input_str:
+ try:
+ await event.client(
+ functions.channels.EditBannedRequest(event.chat_id, i, rights)
+ )
+ c += 1
+ q -= 1
+ except:
+ pass
+ if isinstance(i.status, UserStatusRecently):
+ r += 1
+ if "recently" in input_str:
+ try:
+ await event.client(
+ functions.channels.EditBannedRequest(event.chat_id, i, rights)
+ )
+ c += 1
+ r -= 1
+ except:
+ pass
+ if i.bot:
+ b += 1
+ if "bot" in input_str:
+ try:
+ await event.client(
+ functions.channels.EditBannedRequest(event.chat_id, i, rights)
+ )
+ c += 1
+ b -= 1
+ except:
+ pass
+ elif i.deleted:
+ d += 1
+ if "deleted" in input_str:
+ try:
+ await event.client(
+ functions.channels.EditBannedRequest(event.chat_id, i, rights)
+ )
+ c += 1
+ d -= 1
+ except:
+ pass
+ elif i.status is None:
+ n += 1
+ if "none" in input_str:
+ try:
+ await event.client(
+ functions.channels.EditBannedRequest(event.chat_id, i, rights)
+ )
+ c += 1
+ n -= 1
+ except:
+ pass
+ required_string = ""
+ if input_str:
+ required_string += f"**>> Kicked** `{c} / {p}` **users**\n\n"
+ required_string += f" **••Deleted Accounts••** `{d}`\n"
+ required_string += f" **••UserStatusEmpty••** `{y}`\n"
+ required_string += f" **••UserStatusLastMonth••** `{m}`\n"
+ required_string += f" **••UserStatusLastWeek••** `{w}`\n"
+ required_string += f" **••UserStatusOffline••** `{o}`\n"
+ required_string += f" **••UserStatusOnline••** `{q}`\n"
+ required_string += f" **••UserStatusRecently••** `{r}`\n"
+ required_string += f" **••Bots••** `{b}`\n"
+ required_string += f" **••None••** `{n}`\n"
+ else:
+ required_string += f"**>> Total** `{p}` **users**\n\n"
+ required_string += f" `{HNDLR}rmusers deleted` **••** `{d}`\n"
+ required_string += f" `{HNDLR}rmusers empty` **••** `{y}`\n"
+ required_string += f" `{HNDLR}rmusers month` **••** `{m}`\n"
+ required_string += f" `{HNDLR}rmusers week` **••** `{w}`\n"
+ required_string += f" `{HNDLR}rmusers offline` **••** `{o}`\n"
+ required_string += f" `{HNDLR}rmusers online` **••** `{q}`\n"
+ required_string += f" `{HNDLR}rmusers recently` **••** `{r}`\n"
+ required_string += f" `{HNDLR}rmusers bot` **••** `{b}`\n"
+ required_string += f" `{HNDLR}rmusers none` **••** `{n}`\n\n"
+ required_string += f"**••Empty** `Name with deleted Account`\n"
+ required_string += f"**••None** `Last Seen A Long Time Ago`\n"
+ await eod(xx, required_string)
+
+
+HELP.update({f"{__name__.split('.')[1]}": f"{__doc__.format(i=HNDLR)}"})
diff --git a/plugins/mute.py b/plugins/mute.py
index 4501aaca4b..e1fc7b5cbd 100644
--- a/plugins/mute.py
+++ b/plugins/mute.py
@@ -48,11 +48,18 @@ async def watcher(event):
)
async def startmute(event):
xx = await eor(event, "`Muting...`")
+ input = event.pattern_match.group(1)
private = False
if event.is_private:
private = True
- if event.pattern_match.group(1):
- userid = int(event.pattern_match.group(1))
+ if input:
+ if input.isdigit():
+ try:
+ userid = input
+ except ValueError as x:
+ return await xx.edit(str(x))
+ else:
+ userid = (await event.client.get_entity(input)).id
elif event.reply_to_msg_id:
userid = (await event.get_reply_message()).sender_id
elif private is True:
@@ -87,12 +94,18 @@ async def startmute(event):
async def endmute(event):
xx = await eor(event, "`Unmuting...`")
private = False
+ input = event.pattern_match.group(1)
if event.is_private:
private = True
- reply = await event.get_reply_message()
- if event.pattern_match.group(1):
- userid = int(event.pattern_match.group(1))
- elif reply is not None:
+ if input:
+ if input.isdigit():
+ try:
+ userid = input
+ except ValueError as x:
+ return await xx.edit(str(x))
+ else:
+ userid = (await event.client.get_entity(input)).id
+ elif event.reply_to_msg_id:
userid = reply.sender_id
elif private is True:
userid = event.chat_id
@@ -128,18 +141,23 @@ async def _(e):
userid = (await e.get_reply_message()).sender_id
name = (await e.client.get_entity(userid)).first_name
elif input:
- userid = int(input)
- name = (await e.client.get_entity(input)).first_name
+ if input.isdigit():
+ try:
+ userid = input
+ name = (await e.client.get_entity(userid)).first_name
+ except ValueError as x:
+ return await xx.edit(str(x))
+ else:
+ userid = (await e.client.get_entity(input)).id
+ name = (await event.client.get_entity(userid)).first_name
else:
return await eod(xx, "`Reply to someone or use its id...`", time=3)
if userid == ultroid_bot.uid:
return await eod(xx, "`I can't mute myself.`", time=3)
try:
bun = await ban_time(xx, tme)
- await e.client(
- EditBannedRequest(
- chat.id, userid, ChatBannedRights(until_date=bun, send_messages=True)
- )
+ await e.client.edit_permissions(
+ chat.id, userid, until_date=bun, send_messages=False
)
await eod(
xx,
@@ -156,21 +174,26 @@ async def _(e):
)
async def _(e):
xx = await eor(e, "`Unmuting...`")
- input = int(e.pattern_match.group(1)) if e.pattern_match.group(1) else None
+ input = e.pattern_match.group(1)
chat = await e.get_chat()
if e.reply_to_msg_id:
userid = (await e.get_reply_message()).sender_id
name = (await e.client.get_entity(userid)).first_name
elif input:
- userid = input
- name = (await e.client.get_entity(input)).first_name
+ if input.isdigit():
+ try:
+ userid = input
+ name = (await e.client.get_entity(userid)).first_name
+ except ValueError as x:
+ return await xx.edit(str(x))
+ else:
+ userid = (await e.client.get_entity(input)).id
+ name = (await event.client.get_entity(userid)).first_name
else:
return await eod(xx, "`Reply to someone or use its id...`", time=3)
try:
- await e.client(
- EditBannedRequest(
- chat.id, userid, ChatBannedRights(until_date=None, send_messages=False)
- )
+ await e.client.edit_permissions(
+ chat.id, userid, until_date=None, send_messages=True
)
await eod(
xx,
@@ -187,23 +210,28 @@ async def _(e):
)
async def _(e):
xx = await eor(e, "`Muting...`")
- input = int(e.pattern_match.group(1)) if e.pattern_match.group(1) else None
+ input = e.pattern_match.group(1)
chat = await e.get_chat()
if e.reply_to_msg_id:
userid = (await e.get_reply_message()).sender_id
name = (await e.client.get_entity(userid)).first_name
elif input:
- userid = input
- name = (await e.client.get_entity(input)).first_name
+ if input.isdigit():
+ try:
+ userid = input
+ name = (await e.client.get_entity(userid)).first_name
+ except ValueError as x:
+ return await xx.edit(str(x))
+ else:
+ userid = (await e.client.get_entity(input)).id
+ name = (await event.client.get_entity(userid)).first_name
else:
return await eod(xx, "`Reply to someone or use its id...`", time=3)
if userid == ultroid_bot.uid:
return await eod(xx, "`I can't mute myself.`", time=3)
try:
- await e.client(
- EditBannedRequest(
- chat.id, userid, ChatBannedRights(until_date=None, send_messages=True)
- )
+ await e.client.edit_permissions(
+ chat.id, userid, until_date=None, send_messages=False
)
await eod(
xx,
diff --git a/plugins/pmpermit.py b/plugins/pmpermit.py
index 465a662710..08d7f0227d 100644
--- a/plugins/pmpermit.py
+++ b/plugins/pmpermit.py
@@ -37,30 +37,40 @@
else:
PMPIC = "https://telegra.ph/file/94f6a4aeb21ce2d58dd41.jpg"
+UND = get_string("pmperm_1")
+
if not Redis("PM_TEXT"):
UNAPPROVED_MSG = """
-**PMSecurity of {}!**
+**PMSecurity of {ON}!**
-Please wait for me to respnd or you will be blocked and reported as spam!!
+{UND}
-You have {}/{} warnings!"""
+You have {warn}/{twarn} warnings!"""
else:
UNAPPROVED_MSG = (
"""
-**PMSecurity of {}!**"""
- f"""{Redis("PM_TEXT")}"""
+**PMSecurity of {ON}!**"""
+ f"""
+
+{Redis("PM_TEXT")}
+"""
"""
-Please wait for me to respnd or you will be blocked and reported as spam!!
-You have {}/{} warnings!"""
+{UND}
+
+You have {warn}/{twarn} warnings!"""
)
-UND = "Please wait for me to respnd or you will be blocked and reported as spam!!"
-UNS = "You were spamming my Master's PM, which I didn't like."
+UNS = get_string("pmperm_2")
# 1
-
-WARNS = 3
-NO_REPLY = "Reply to someone's msg or try this commmand in private."
+if Redis("PMWARNS"):
+ try:
+ WARNS = int(Redis("PMWARNS"))
+ except BaseException:
+ WARNS = 4
+else:
+ WARNS = 4
+NO_REPLY = get_string("pmperm_3")
PMCMDS = [
f"{hndlr}a",
f"{hndlr}approve",
@@ -77,8 +87,10 @@ async def permitpm(event):
user = await event.get_chat()
if user.bot or user.is_self:
return
- apprv = is_approved(user.id)
- if apprv and (Redis("PMLOG") == "True"):
+ if Redis("PMLOG") == "True":
+ pl = udB.get("PMLOGGROUP")
+ if pl is not None:
+ return await event.forward_to(pl)
await event.forward_to(Var.LOG_CHANNEL)
@@ -90,12 +102,12 @@ async def permitpm(event):
@ultroid_bot.on(events.NewMessage(outgoing=True, func=lambda e: e.is_private))
async def autoappr(e):
miss = await e.get_chat()
- if miss.bot or miss.is_self or miss.verified:
+ if miss.bot or miss.is_self or miss.verified or Redis("AUTOAPPROVE") != "True":
return
if str(miss.id) in DEVLIST:
return
mssg = e.text
- if mssg in PMCMDS: # do not approve if outgoing is a command.
+ if mssg.startswith(HNDLR): # do not approve if outgoing is a command.
return
if not is_approved(e.chat_id):
approve_user(e.chat_id)
@@ -126,9 +138,9 @@ async def permitpm(event):
mention = f"[{get_display_name(user)}](tg://user?id={user.id})"
count = len(get_approved())
try:
- wrn = COUNT_PM[user.id]
+ wrn = COUNT_PM[user.id] + 1
except KeyError:
- wrn = 0
+ wrn = 1
if user.id in LASTMSG:
prevmsg = LASTMSG[user.id]
if event.text != prevmsg:
@@ -144,7 +156,17 @@ async def permitpm(event):
await event.client.send_file(
user.id,
PMPIC,
- caption=UNAPPROVED_MSG.format(OWNER_NAME, wrn, WARNS),
+ caption=UNAPPROVED_MSG.format(
+ ON=OWNER_NAME,
+ warn=wrn,
+ twarn=WARNS,
+ UND=UND,
+ name=name,
+ fullname=fullname,
+ username=username,
+ count=count,
+ mention=mention,
+ ),
)
elif event.text == prevmsg:
async for message in event.client.iter_messages(
@@ -154,24 +176,46 @@ async def permitpm(event):
await event.client.send_file(
user.id,
PMPIC,
- caption=UNAPPROVED_MSG.format(OWNER_NAME, wrn, WARNS),
+ caption=UNAPPROVED_MSG.format(
+ ON=OWNER_NAME,
+ warn=wrn,
+ twarn=WARNS,
+ UND=UND,
+ name=name,
+ fullname=fullname,
+ username=username,
+ count=count,
+ mention=mention,
+ ),
)
LASTMSG.update({user.id: event.text})
else:
+ async for message in event.client.iter_messages(user.id, search=UND):
+ await message.delete()
await event.client.send_file(
user.id,
PMPIC,
- caption=UNAPPROVED_MSG.format(OWNER_NAME, wrn, WARNS),
+ caption=UNAPPROVED_MSG.format(
+ ON=OWNER_NAME,
+ warn=wrn,
+ twarn=WARNS,
+ UND=UND,
+ name=name,
+ fullname=fullname,
+ username=username,
+ count=count,
+ mention=mention,
+ ),
)
LASTMSG.update({user.id: event.text})
if user.id not in COUNT_PM:
COUNT_PM.update({user.id: 1})
else:
COUNT_PM[user.id] = COUNT_PM[user.id] + 1
- if COUNT_PM[user.id] > WARNS:
- await event.respond(
- "`You were spamming my Master's PM, which I didn't like.`\n`You have been BLOCKED and reported as SPAM, until further notice.`"
- )
+ if COUNT_PM[user.id] >= WARNS:
+ async for message in event.client.iter_messages(user.id, search=UND):
+ await message.delete()
+ await event.respond(UNS)
try:
del COUNT_PM[user.id]
del LASTMSG[user.id]
diff --git a/plugins/profile.py b/plugins/profile.py
index adf0405f04..cffdaea54d 100644
--- a/plugins/profile.py
+++ b/plugins/profile.py
@@ -151,10 +151,12 @@ async def remove_profilepic(delpfp):
@ultroid_cmd(pattern="gpoto ?(.*)")
async def gpoto(e):
ult = e.pattern_match.group(1)
+ a = await eor(e,"`Processing...`")
try:
okla = await ultroid_bot.download_profile_photo(
ult, "profile.jpg", download_big=True
)
+ await a.delete()
await ultroid_bot.send_message(e.chat_id, file=okla)
os.remove(okla)
except Exception as e:
diff --git a/plugins/redis.py b/plugins/redis.py
index 177f44adcb..84f9460fc2 100644
--- a/plugins/redis.py
+++ b/plugins/redis.py
@@ -110,7 +110,7 @@ async def _(ult):
)
async def _(ult):
ok = await eor(ult, "`Fetching Keys ...`")
- keys = udB.keys()
+ keys = sorted(udB.keys())
msg = ""
for x in keys:
msg += "• `{}`".format(x) + "\n"
diff --git a/plugins/stickertools.py b/plugins/stickertools.py
index 7264718317..2cb037144d 100644
--- a/plugins/stickertools.py
+++ b/plugins/stickertools.py
@@ -402,7 +402,7 @@ async def ultdestroy(event):
ult.media and ult.media.document and "tgsticker" in ult.media.document.mime_type
):
return await eor(event, "`Reply to Animated Sticker only`")
- roid = await event.client.download_media(ult, "ultroid.tgs")
+ await event.client.download_media(ult, "ultroid.tgs")
xx = await eor(event, "`Processing...`")
os.system("lottie_convert.py ultroid.tgs json.json")
json = open("json.json", "r")
diff --git a/plugins/sudo.py b/plugins/sudo.py
index 03bcedd167..7c079344a3 100644
--- a/plugins/sudo.py
+++ b/plugins/sudo.py
@@ -137,7 +137,7 @@ async def _(ult):
f"**Removed [{user.user.first_name}](tg://user?id={id}) from SUDO User(s)**"
)
else:
- return await ok.edit("`SEEMS LIKE THIS FUNCTION CHOOSE TO BROKE ITSELF`")
+ return await ok.edit("`SEEMS LIKE THIS FUNCTION CHOOSE TO BREAK ITSELF`")
args = ult.pattern_match.group(1)
diff --git a/plugins/tag.py b/plugins/tag.py
index 017767705b..134ab9e76b 100644
--- a/plugins/tag.py
+++ b/plugins/tag.py
@@ -86,11 +86,8 @@ async def _(e):
if "bot" in okk:
if bb.bot:
xx += f"\n[{get_display_name(bb)}](tg://user?id={bb.id})"
- if len(xx) > 4096:
- await eor(e, "`Telegram Word Limits Exceeds...`")
- else:
- await e.client.send_message(e.chat_id, xx)
- await e.delete()
+ await e.client.send_message(e.chat_id, xx)
+ await e.delete()
HELP.update({f"{__name__.split('.')[1]}": f"{__doc__.format(i=HNDLR)}"})
diff --git a/plugins/tools.py b/plugins/tools.py
index 6b4ab96d06..52d34ccbcc 100644
--- a/plugins/tools.py
+++ b/plugins/tools.py
@@ -174,7 +174,7 @@ async def _(e):
c = await a.download_media(
"resources/downloads/",
progress_callback=lambda d, t: asyncio.get_event_loop().create_task(
- progress(d, t, z, toime, "**Dᴏᴡɴʟᴏᴀᴅɪɴɢ...**")
+ progress(d, t, z, toime, "Dᴏᴡɴʟᴏᴀᴅɪɴɢ...")
),
)
await z.edit("**Dᴏᴡɴʟᴏᴀᴅᴇᴅ...\nNᴏᴡ Cᴏɴᴠᴇʀᴛɪɴɢ...**")
@@ -223,7 +223,7 @@ async def _(e):
video_note=True,
reply_to=a,
progress_callback=lambda d, t: asyncio.get_event_loop().create_task(
- progress(d, t, z, taime, "**Uᴘʟᴏᴀᴅɪɴɢ...**")
+ progress(d, t, z, taime, "Uᴘʟᴏᴀᴅɪɴɢ...")
),
)
await z.delete()
@@ -263,20 +263,28 @@ async def _(event):
cmd, stdout=asyncio.subprocess.PIPE, stderr=asyncio.subprocess.PIPE
)
stdout, stderr = await process.communicate()
- OUT = f"**☞ BASH\n\n• COMMAND:**\n`{cmd}` \n\n"
+ OUT = f"☞ BASH\n\n• COMMAND:\n{cmd}
\n\n"
e = stderr.decode()
if e:
- OUT += f"**• ERROR:** \n`{e}`\n"
+ OUT += f"• ERROR: \n{e}
\n"
o = stdout.decode()
if not o and not e:
o = "Success"
- OUT += f"**• OUTPUT:**\n`{o}`"
+ OUT += f"• OUTPUT:\n{o}"
else:
_o = o.split("\n")
- o = "`\n".join(_o)
- OUT += f"**• OUTPUT:**\n{o}"
+ o = "\n".join(_o)
+ OUT += f"• OUTPUT:\n{o}
"
if len(OUT) > 4096:
- with io.BytesIO(str.encode(OUT)) as out_file:
+ ultd = (
+ OUT.replace("", "")
+ .replace("
", "")
+ .replace("", "")
+ .replace("", "")
+ .replace("", "")
+ .replace("", "")
+ )
+ with io.BytesIO(str.encode(ultd)) as out_file:
out_file.name = "bash.txt"
await event.client.send_file(
event.chat_id,
@@ -288,7 +296,7 @@ async def _(event):
)
await xx.delete()
else:
- await eod(xx, OUT)
+ await eod(xx, OUT, parse_mode="html")
@ultroid_cmd(
@@ -298,7 +306,7 @@ async def _(event):
if Redis("I_DEV") != "True":
await eor(
event,
- f"Developer Restricted!\nIf you know what this does, and want to proceed\n\n `{HNDLR}setredis I_DEV True`\n\nThis Might Be Dangerous.",
+ f"Developer Restricted!\nIf you know what this does, and want to proceed\n\n {HNDLR}setredis I_DEV True\n\nThis Might Be Dangerous.",
)
return
xx = await eor(event, "`Processing ...`")
@@ -331,13 +339,19 @@ async def _(event):
evaluation = stdout
else:
evaluation = "Success"
- final_output = (
- "__►__ **EVAL**\n```{}``` \n\n __►__ **OUTPUT**: \n```{}``` \n".format(
- cmd, evaluation
- )
+ final_output = "► EVAL\n{}
\n\n►OUTPUT: \n{}
".format(
+ cmd, evaluation
)
if len(final_output) > 4096:
- with io.BytesIO(str.encode(final_output)) as out_file:
+ ultd = (
+ final_output.replace("", "")
+ .replace("
", "")
+ .replace("", "")
+ .replace("", "")
+ .replace("", "")
+ .replace("", "")
+ )
+ with io.BytesIO(str.encode(ultd)) as out_file:
out_file.name = "eval.txt"
await ultroid_bot.send_file(
event.chat_id,
@@ -349,7 +363,7 @@ async def _(event):
)
await xx.delete()
else:
- await eod(xx, final_output)
+ await eod(xx, final_output, parse_mode="html")
async def aexec(code, event):
diff --git a/plugins/updater.py b/plugins/updater.py
index a05f0e185f..e61cea59f9 100644
--- a/plugins/updater.py
+++ b/plugins/updater.py
@@ -12,6 +12,8 @@
from git import Repo
from git.exc import GitCommandError, InvalidGitRepositoryError, NoSuchPathError
+from . import get_string
+
UPSTREAM_REPO_URL = "https://github.com/TeamUltroid/Ultroid"
requirements_path = path.join(
path.dirname(path.dirname(path.dirname(__file__))), "requirements.txt"
@@ -44,12 +46,11 @@ async def updateme_requirements():
pattern="update ?(.*)",
)
async def upstream(ups):
- pagal = await eor(ups, "`Checking for updates, please wait....`")
+ pagal = await eor(ups, get_string("upd_1"))
conf = ups.pattern_match.group(1)
off_repo = UPSTREAM_REPO_URL
try:
- txt = "`Oops.. Updater cannot continue due to "
- txt += "some problems occured`\n\n**LOGTRACE:**\n"
+ txt = get_string("upd_2")
repo = Repo()
except NoSuchPathError as error:
await eod(pagal, f"{txt}\n`directory {error} is not found`", time=10)
@@ -74,13 +75,13 @@ async def upstream(ups):
repo.heads.main.set_tracking_branch(origin.refs.main)
repo.heads.main.checkout(True)
ac_br = repo.active_branch.name
- if ac_br != "main":
- await eod(
- pagal,
- f"**[UPDATER]:**` You are on ({ac_br})\n Please change to main branch.`",
- )
- repo.__del__()
- return
+ # if ac_br != "main":
+ # await eod(
+ # pagal,
+ # f"**[UPDATER]:**` You are on ({ac_br})\n Please change to the main branch.`",
+ # )
+ # repo.__del__()
+ # return
try:
repo.create_remote("upstream", off_repo)
except BaseException:
@@ -90,27 +91,29 @@ async def upstream(ups):
changelog = await gen_chlog(repo, f"HEAD..upstream/{ac_br}")
if "now" not in conf:
if changelog:
- changelog_str = f"**New UPDATE available for [[{ac_br}]]({UPSTREAM_REPO_URL}/tree/{ac_br}):\n\nCHANGELOG**\n\n{changelog}"
+ changelog_str = get_string("upd_3").format(
+ ac_br, UPSTREAM_REPO_URL, ac_br, changelog
+ )
if len(changelog_str) > 4096:
- await eor(pagal, "`Changelog is too big, view the file to see it.`")
+ await eor(pagal, get_string("upd_4"))
file = open("output.txt", "w+")
file.write(changelog_str)
file.close()
await ups.client.send_file(
ups.chat_id,
"output.txt",
- caption=f"Do `{hndlr}update now` to update.",
+ caption=get_string("upd_5").format(hndlr),
reply_to=ups.id,
)
remove("output.txt")
else:
return await eod(
- pagal, f"{changelog_str}\n\nDo `{hndlr}update now` to update."
+ pagal, get_string("upd_6").format(changelog_str, hndlr)
)
else:
await eod(
pagal,
- f"\n`Your BOT is` **up-to-date** `with` **[[{ac_br}]]({UPSTREAM_REPO_URL}/tree/{ac_br})**\n",
+ get_string("upd_7").format(ac_br, UPSTREAM_REPO_URL, ac_br),
time=10,
)
repo.__del__()
@@ -124,7 +127,7 @@ async def upstream(ups):
if not Var.HEROKU_APP_NAME:
await eod(
pagal,
- "`Please set up the HEROKU_APP_NAME variable to be able to update userbot.`",
+ "`Please set up the `HEROKU_APP_NAME` variable to be able to update userbot.`",
time=10,
)
repo.__del__()
diff --git a/plugins/uploads_files.py b/plugins/uploads_files.py
index d881f8c1bb..22b28ddd1e 100644
--- a/plugins/uploads_files.py
+++ b/plugins/uploads_files.py
@@ -35,14 +35,14 @@
pattern="dl ?(.*)",
)
async def download(event):
- xx = await eor(event, "`Processing...`")
+ xx = await eor(event, get_string("com_1"))
kk = event.pattern_match.group(1)
s = dt.now()
k = time.time()
if event.reply_to_msg_id:
ok = await event.get_reply_message()
if not ok.media:
- return await eod(xx, "`Reply The File/Media u Want to Download..`", time=5)
+ return await eod(xx, get_string("udl_1"), time=5)
else:
if not kk:
d = "resources/downloads/"
@@ -76,20 +76,20 @@ async def download(event):
),
)
e = datetime.now()
- t = convert((e - s).seconds)
- await eod(xx, f"Download Successful..\nTo\n`{o}`\nin `{t}`")
+ t = time_formatter(((e - s).seconds) * 1000)
+ await eod(xx, get_string("udl_2").format(o, t))
@ultroid_cmd(
pattern="ul ?(.*)",
)
async def download(event):
- xx = await eor(event, "`Processing...`")
+ xx = await eor(event, get_string("com_1"))
kk = event.pattern_match.group(1)
s = dt.now()
tt = time.time()
if not kk:
- return await eod(xx, "`Give a specific path to file`")
+ return await eod(xx, get_string("udl_3"))
else:
try:
x = await event.client.send_file(
@@ -110,7 +110,7 @@ async def download(event):
except ValueError as ve:
return await eod(xx, str(ve))
e = datetime.now()
- t = convert((e - s).seconds)
+ t = time_formatter(((e - s).seconds) * 1000)
try:
await x.edit(f"`{kk}`\nTime Taken: `{t}`")
except BaseException:
@@ -123,7 +123,7 @@ async def download(event):
)
async def _(event):
input_str = event.text[6:]
- xx = await eor(event, "`Processing...`")
+ xx = await eor(event, get_string("com_1"))
if event.reply_to_msg_id:
a = await event.get_reply_message()
if not a.message:
@@ -145,7 +145,7 @@ async def _(event):
pattern="open$",
)
async def _(event):
- xx = await eor(event, "`Processing...`")
+ xx = await eor(event, get_string("com_1"))
if event.reply_to_msg_id:
a = await event.get_reply_message()
if a.media:
diff --git a/plugins/utilities.py b/plugins/utilities.py
index e5241d11c1..3a2d157118 100644
--- a/plugins/utilities.py
+++ b/plugins/utilities.py
@@ -115,7 +115,7 @@ async def date(event):
pattern="calc",
)
async def _(event):
- x = await eor(event, "...")
+ x = await eor(event, get_string("com_1"))
cmd = event.text.split(" ", maxsplit=1)[1]
event.message.id
if event.reply_to_msg_id:
@@ -164,7 +164,7 @@ async def aexec(code, event):
pattern="chatinfo(?: |$)(.*)",
)
async def info(event):
- ok = await eor(event, "`...`")
+ ok = await eor(event, get_string("com_1"))
chat = await get_chatinfo(event)
caption = await fetch_info(chat, event)
try:
@@ -320,9 +320,7 @@ async def _(event):
except BotInlineDisabledError or BotResponseTimeoutError or ChatSendInlineForbiddenError: # handling possible exceptions
await xx.edit(reply_text)
except bmi:
- await xx.edit(
- f"**Inline Not Available as You Are in Bot Mode\nPasted to Nekobin :**\n{reply_text}"
- )
+ await xx.edit(f"**Inline Not Available as You Are in Bot Mode\n\n{reply_text}")
@ultroid_cmd(
@@ -330,7 +328,7 @@ async def _(event):
)
async def _(event):
input_str = event.pattern_match.group(1)
- xx = await eor(event, "`Pasting...`")
+ xx = await eor(event, get_string("com_1"))
message = "SYNTAX: `.paste `"
if input_str:
message = input_str
@@ -439,7 +437,7 @@ async def _(event):
groups_only=True,
)
async def _(ult):
- xx = await eor(ult, "`Processing...`")
+ xx = await eor(ult, get_string("com_1"))
to_add_users = ult.pattern_match.group(1)
if not ult.is_channel and ult.is_group:
for user_id in to_add_users.split(" "):
@@ -470,7 +468,7 @@ async def _(ult):
)
async def rmbg(event):
RMBG_API = udB.get("RMBG_API")
- xx = await eor(event, "`Processing...`")
+ xx = await eor(event, get_string("com_1"))
if not RMBG_API:
return await xx.edit(
"Get your API key from [here](https://www.remove.bg/) for this plugin to work.",
@@ -518,7 +516,7 @@ async def rmbg(event):
)
async def telegraphcmd(event):
input_str = event.pattern_match.group(1)
- xx = await eor(event, "`Processing...`")
+ xx = await eor(event, get_string("com_1"))
if event.reply_to_msg_id:
getmsg = await event.get_reply_message()
if getmsg.photo or getmsg.video or getmsg.gif:
diff --git a/plugins/webupload.py b/plugins/webupload.py
new file mode 100644
index 0000000000..10f0529795
--- /dev/null
+++ b/plugins/webupload.py
@@ -0,0 +1,74 @@
+# Ultroid - UserBot
+# Copyright (C) 2020 TeamUltroid
+#
+# This file is a part of < https://github.com/TeamUltroid/Ultroid/ >
+# PLease read the GNU Affero General Public License in
+# .
+
+"""
+✘ Commands Available -
+
+• `{i}webupload`
+ Upload files on another server.
+"""
+
+
+import asyncio
+import time
+
+from telethon.errors.rpcerrorlist import BotInlineDisabledError as dis
+from telethon.errors.rpcerrorlist import BotResponseTimeoutError as rep
+
+from . import *
+
+
+@ultroid_cmd(
+ pattern="webupload",
+)
+async def _(event):
+ xx = await eor(event, "`Processing...`")
+ vv = event.text.split(" ", maxsplit=1)
+ try:
+ file_name = vv[1]
+ except IndexError:
+ pass
+ if event.reply_to_msg_id:
+ bb = await event.get_reply_message()
+ if bb.media:
+ ccc = time.time()
+ file_name = await event.client.download_media(
+ bb,
+ "./resources/downloads/",
+ progress_callback=lambda d, t: asyncio.get_event_loop().create_task(
+ progress(
+ d,
+ t,
+ xx,
+ ccc,
+ "Downloading...",
+ )
+ ),
+ )
+ else:
+ return await eod(xx, "`Reply to media file`", time=5)
+ try:
+ results = await ultroid_bot.inline_query(
+ Var.BOT_USERNAME, f"fl2lnk {file_name}"
+ )
+ except rep:
+ return await eor(
+ xx,
+ "`The bot did not respond to the inline query.\nConsider using {}restart`".format(
+ HNDLR
+ ),
+ )
+ except dis:
+ return await eor(
+ xx, "`Please turn on inline mode for your bot from` @Botfather."
+ )
+ await results[0].click(event.chat_id, reply_to=event.reply_to_msg_id, hide_via=True)
+ await xx.delete()
+ await event.delete()
+
+
+HELP.update({f"{__name__.split('.')[1]}": f"{__doc__.format(i=HNDLR)}"})
diff --git a/plugins/words.py b/plugins/words.py
index ff33dd8fa4..daf16772fb 100644
--- a/plugins/words.py
+++ b/plugins/words.py
@@ -34,14 +34,14 @@
)
async def mean(event):
evid = event.message.id
- xx = await eor(event, "`Processing...`")
+ xx = await eor(event, get_string("com_1"))
wrd = event.text.split(" ", maxsplit=1)[1]
ok = dictionary.meaning(wrd)
try:
p = ok["Noun"]
except BaseException:
return await xx.edit("Oops! No such word found!!")
- x = f"**Word** - `{wrd}`\n\n**Meanings** - \n"
+ x = get_string("wrd_1").format(wrd)
c = 1
for i in p:
x += f"**{c}.** `{i}`\n"
@@ -67,10 +67,10 @@ async def mean(event):
)
async def mean(event):
evid = event.message.id
- xx = await eor(event, "`Processing...`")
+ xx = await eor(event, get_string("com_1"))
wrd = event.text.split(" ", maxsplit=1)[1]
ok = dictionary.synonym(wrd)
- x = f"**Word** - `{wrd}`\n\n**Synonyms** - \n"
+ x = get_string("wrd_2").format(wrd)
c = 1
try:
for i in ok:
@@ -99,10 +99,10 @@ async def mean(event):
)
async def mean(event):
evid = event.message.id
- xx = await eor(event, "`Processing...`")
+ xx = await eor(event, get_string("com_1"))
wrd = event.text.split(" ", maxsplit=1)[1]
ok = dictionary.antonym(wrd)
- x = f"**Word** - `{wrd}`\n\n**Antonyms** - \n"
+ x = get_string("wrd_3").format(wrd)
c = 1
try:
for i in ok:
@@ -128,7 +128,7 @@ async def mean(event):
@ultroid_cmd(pattern="ud (.*)")
async def _(event):
- xx = await eor(event, "`Processing...`")
+ xx = await eor(event, get_string("com_1"))
word = event.pattern_match.group(1)
if word is None:
return await xx.edit("`No word given!`")
diff --git a/requirements.txt b/requirements.txt
index 1032256a59..55c73d0437 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -1,31 +1 @@
-py-Ultroid==11.5-beta
-asyncurban
-carbonnow
-cairosvg
-emoji
-GitPython
-googletrans==4.0.0rc1
-heroku3
-imutils
-lottie
-lxml
-moviepy
-numpy
-opencv-python-headless
-Pillow>=7.0.0
-play-scraper
-PyDictionary
-PyPDF2
-psutil
-pytz
-requests>=2.18.4
-scikit-image
-selenium
-speedtest-cli==2.1.2
-telegraph
-validators
-youtube_dl
-youtube-search-python
-google-api-python-client==1.7.11
-oauth2client==4.1.3
-httplib2==0.13.1
+py-Ultroid==2021.3.13
diff --git a/resources/downloads/.atoz b/resources/downloads/.atoz
deleted file mode 100644
index 9c558e357c..0000000000
--- a/resources/downloads/.atoz
+++ /dev/null
@@ -1 +0,0 @@
-.
diff --git a/resources/startup/deploy.sh b/resources/startup/deploy.sh
deleted file mode 100644
index 73ac9ef736..0000000000
--- a/resources/startup/deploy.sh
+++ /dev/null
@@ -1,92 +0,0 @@
-# Ultroid - UserBot
-# Copyright (C) 2020 TeamUltroid
-#
-# This file is a part of < https://github.com/TeamUltroid/Ultroid/ >
-# PLease read the GNU Affero General Public License in
-# .
-
-echo "
- ╔╦╦╦══╦═╦═╦══╦══╗
- ║║║╠╗╔╣╬║║╠║║╩╗╗║
- ║║║╚╣║║╗╣║╠║║╦╩╝║
- ╚═╩═╩╝╚╩╩═╩══╩══╝
-
- °•° Deployment Begins •°•
-"
-echo '
- •• Getting Packages and Installing
-'
-
-export DEBIAN_FRONTEND=noninteractive
-export TZ=Asia/Kolkata
-ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
-
-apt update && apt upgrade -y && apt install --no-install-recommends -y \
- debian-keyring \
- debian-archive-keyring \
- bash \
- curl \
- git \
- util-linux \
- libffi-dev \
- libjpeg-dev \
- libjpeg62-turbo-dev \
- libwebp-dev \
- linux-headers-amd64 \
- musl-dev \
- musl \
- neofetch \
- python3-lxml \
- postgresql \
- postgresql-client \
- libpq-dev \
- libcurl4-openssl-dev \
- libxml2-dev \
- libxslt1-dev \
- openssl \
- pv \
- jq \
- wget \
- python3-dev \
- libreadline-dev \
- libyaml-dev \
- zlib1g \
- ffmpeg \
- libssl-dev \
- libgconf-2-4 \
- libxi6 \
- zlib1g-dev \
- xvfb \
- unzip \
- make \
- libopus0 \
- libopus-dev \
- gcc \
- mediainfo \
- megatools
-
-echo '
- •• Cloning Repository
-'
-
-git clone https://github.com/Teamultroid/Ultroid.git /root/TeamUltroid/
-
-
-echo '
- •• Getting Libraries and Installing
-'
-pip install --upgrade pip setuptools wheel
-pip install search-engine-parser==0.6.2
-pip install -r /root/TeamUltroid/requirements.txt
-
-echo "
-
- ┏┳┓╋┏┓╋╋╋╋┏┓┏┓
- ┃┃┣┓┃┗┳┳┳━╋╋┛┃
- ┃┃┃┗┫┏┫┏┫╋┃┃╋┃
- ┗━┻━┻━┻┛┗━┻┻━┛
-
- •°• Deployed Successfully °•°
- •• Wait till python images are pushed
- •• Give build logs in @UltroidSupport if build fails
-"
diff --git a/resources/startup/startup.sh b/resources/startup/startup.sh
index 5bd1de5938..3d8dc18dcb 100644
--- a/resources/startup/startup.sh
+++ b/resources/startup/startup.sh
@@ -6,12 +6,11 @@
# PLease read the GNU Affero General Public License in .
echo "
-
- +-+ +-+ +-+ +-+ +-+ +-+ +-+
- |U| |L| |T| |R| |O| |I| |D|
- +-+ +-+ +-+ +-+ +-+ +-+ +-+
-
-
+ ┏┳┓╋┏┓╋╋╋╋┏┓┏┓
+ ┃┃┣┓┃┗┳┳┳━╋╋┛┃
+ ┃┃┃┗┫┏┫┏┫╋┃┃╋┃
+ ┗━┻━┻━┻┛┗━┻┻━┛
+
Visit @TheUltroid for updates!!
"
diff --git a/strings/__init__.py b/strings/__init__.py
new file mode 100644
index 0000000000..0038100d4a
--- /dev/null
+++ b/strings/__init__.py
@@ -0,0 +1 @@
+from .strings import get_string, get_languages
\ No newline at end of file
diff --git a/strings/strings.py b/strings/strings.py
new file mode 100644
index 0000000000..35e418eb6a
--- /dev/null
+++ b/strings/strings.py
@@ -0,0 +1,38 @@
+from os import listdir, path
+from typing import Any, Dict, List, Union
+
+from yaml import safe_load
+
+from pyUltroid import udB
+
+
+languages = {}
+strings_folder = path.join(path.dirname(path.realpath(__file__)), "strings")
+
+for file in listdir(strings_folder):
+ if file.endswith(".yml"):
+ code = file[:-4]
+ languages[code] = safe_load(
+ open(path.join(strings_folder, file), encoding="UTF-8")
+ )
+
+
+def get_string(key: str) -> Any:
+ try:
+ return languages[(udB.get("language") or "en")][key]
+ except KeyError:
+ try:
+ return languages["en"][key]
+ except KeyError:
+ return f"Warning: could not load any string with the key {key}"
+
+
+def get_languages() -> Dict[str, Union[str, List[str]]]:
+ return {
+ code: {
+ "name": languages[code]["name"],
+ "natively": languages[code]["natively"],
+ "authors": languages[code]["authors"],
+ }
+ for code in languages
+ }
diff --git a/strings/strings/ar.yml b/strings/strings/ar.yml
new file mode 100644
index 0000000000..50612cf0af
--- /dev/null
+++ b/strings/strings/ar.yml
@@ -0,0 +1,194 @@
+name: Arabic
+natively: العربية
+
+authors:
+ - klanrali
+
+# commons
+com_1: "`جـاري المعالجه...`"
+com_2: "`جـاري البحث...`"
+# help
+help_1: "`{}` عـذرا ليس صالحآ يـوجد هنـاك خطأ!"
+help_2: "عذرا لم يستجيب البوت .\nارسل امر اعاده تشغيل للأفضليه `{}restart`"
+help_3: "`يرجى تشغيل وضع الاونلاين المباشر من خلال بوت فاذر` @Botfather."
+help_4: "مرحبا, \nان الان في داخل البوت . \n لا يمكن لمستخدمي وضع الروبوت الحصول على المساعدة مباشرة ... \n بدلاً من ذلك ، انسخ والصق التالي في الدردشة وانقر فوق النافذة المنبثقة \n\n `@{} ultd`"
+
+# autopic
+autopic_1: "حسنا هيا اعطني بعض النصوص .."
+autopic_2: "عذرا لايوجد نتائج للبحث لـ `{}`"
+autopic_3: " حصلت على بعض من النتائج `{}` التي تتعلق في بحثك !\nجاري بدء تشغيل التلقائي !"
+
+# inline
+inline_1: "[ألترويد للمساعدة](t.me/ultroidsupport)\n\n
+**قائمه المساعدة {}.\n\n
+الأضافات ~ {}**"
+inline_2: "[ألترويد للمساعدة](t.me/ultroidsupport)\n\n
+**قائمه المساعدة {}.\n\n
+الاضافات ~ {}**"
+inline_3: "[ألترويد للمساعدة](t.me/ultroidsupport)\n\n
+**قائمه المساعدة {}.\n\n
+الاضافات ~ {}\n\n
+اذهب واضف `الأضافات` متنوع مع القيمة.**"
+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
+Was away for ~ {}`"
+afk_2: "#AFK\n
+Set AFK mode to False.\n
+Was AFK for {}`"
+afk_3: "┇لــســتُ نــشــطــاً حــالــيــاً 💤.\n
+Last seen {} ago.`\n\n
+**Reason:** `{}`"
+afk_4: "`┇لــســتُ نــشــطــاً حــالــيــاً 💤.\n\n
+Last seen {} ago.`"
+afk_5: "`┇جــاري الــغــاء النــشــاط 💤.`\n\n
+**Reason:** `{}`"
+afk_6: "┇جــاري الــغــاء النــشــاط 💤."
+afk_7: "┇لــســتُ نــشــطــاً حــالــيــاً 💤 بــســبــب : {}"
+afk_8: "┇لــســتُ نــشــطــاً حــالــيــاً 💤."
+
+# bot
+alive_1: "**🤖┇بــوت مــســتــخــدم ULTROID 🔱...**\n\n
+**{}**\n\n
+┏━━━━━━━━━━━━━━━━━━━━━\n
+┣ **┇المــالــك ⬺** - `{}`\n
+┣ **┇الإصــدار ⬺** - `{}`\n
+┣ **┇مــدة الــتــشــغــيــل ⬺** - `{}`\n
+┣ **┇بــايــثــون ⬺** - `{}`\n
+┣ **┇تــلــيــثــون ⬺** - `{}`\n
+┣ **┇الــفــرع ⬺** - `{}`\n
+┗━━━━━━━━━━━━━━━━━━━━━"
+log: "**┇هــيــروكــو** ســجــلات ULTROID 🔱 .\nتــلــصــق [هــنــا ]({}) أيــضــاً!"
+ping: "**Pong !!** `{}ms`\n**┇وقـــت الــتــشــغــيــل ** - `{}`"
+usage: "**⚙️ Dyno إســتــعــمــال الــ ⚙️**:\n\n
+ -> `Dyno إســتــعــمــال الـ for` **{}**:\n
+ • `{}`**h** `{}`**m**
+**|** [`{}`**%**]\n\n
+ -> `┇حــصــة الــ Dyno المـتـبـقـيـة هـذا الـشـهـر`:\n
+ • `{}`**h** `{}`**m**
+**|** [`{}`**%**]\n\n
+**┇المــســاحــة الــكــلــيــة لـلـقــرص : {}\n\n**
+┇الــمــســتــخــدم : {} الــخــالــيــة : {}\n\n
+**📊┇الــبــيــانــات الــمــســتــخــدمــة📊\n\nUpload: {}\nDown: {}\n\n**
+**CPU: {}%\nRAM: {}%\nDISK: {}%**"
+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"
+chats_6: "┇تــم صــنــع مــجــمــوعــتــك / قــنــاتــك ✅ [{}]({}) "
+
+# converter
+cvt_1: "┇قــم بــالــرد عــلــى أي مــيــديــا / مــلــف نــصــي ❕."
+cvt_2: "┇اكــتــب إســم وإمــتــداد الــمــلــف 📝"
+cvt_3: "`┇يــتــم الــمــعــالــجــة ♻️...`"
+cvt_4: "┇قــم بــالــرد عــلــى أي مــيــديــا❕"
+
+# core
+core_1: "┇تــم الــعــثــور عــلــى وِحــدة ✅"
+core_2: "{}.py ┇إســتــخــدم .Paste لــعــمــلــيــة الــلــصــق ❕"
+core_3: "┇إبــحــث مــرة أخــرى ؟ ⚠️"
+core_4: "┇تــم الــعــثــور عــلــى وِحــدة {} "
+core_5: "{}.py ┇إســتــخــدم .Paste لــعــمــلــيــة الــلــصــق ❕"
+core_6: "┇لــم يــتــم الــعــثــور عــلــى الــوحــدة {}.py "
+core_7: "┇لا تــوجــد هــكــذا وحــدة ❌"
+core_8: "┇لا تــوجــد وحــدة بــهــذا الإســم {}.py"
+core_9: "`┇اكــتــب اســم الإضــافــة الــمُــراد إزالــتــهــا 🔰`"
+core_10: "**┇تــمــت ازالــة** `{}` ** بــنــجــاح ✅**"
+core_11: "**┇لا يــمــكــنــك إزالــة الإضــافــات الــرســمــيــة 🚫**"
+core_12: "**┇لا تــوجــد إضــافــة بــإســم ** `{}`"
+core_13: "`┇اكــتــب اســم الإضــافــة الــمُــراد إلــغــاء تــثــبــيــتــهــا 💢`"
+core_14: "**┇تــم إلــغــاء تــثــبــيــت** `{}` **بــنــجــاح ✅**"
+core_15: "**┇لا يــمــكــنــك إلــغــاء تــثــبــيــت الإضــافــات الــرســمــيــة 🚫**"
+core_16: "`┇اكــتــب اســم الإضــافــة الــمُــراد إضــافــتــهــا 🔰`"
+core_17: "**┇تــم إضافة** `{}` بــنــجــاح ✅"
+core_18: "**┇تــعــذر إضــافــة ** `{}` **┇بــســبــب الــخــطــأ ⚠️**\n`{}`"
+
+# fedutils
+sf_1: "بــدء الــ a Mass-FedBan..."
+sf_2: "`عـذرآ لـم يتم تحـديد أي مسـتخدم 🚹!`"
+sf_3: "عذرا لايمگـنك حـظر مطـوري أنـت جـديـد ✖️"
+sf_4: "`- يـبـدو أن Rose لا تـسـتجـيـب ، أو أن المـكون الإضـافي يعـمل بشـكل سـيء ⚠️`"
+sf_5: "يـمكنـك فقـط اسـتخـدام أوامـر التعليـقات مـرة واحـدة كـل 5 دقـائـق 🔄"
+sf_6: "- حـاول مـرة أخـرى بـعد 5 دقائـق 5️⃣."
+sf_7: "- تـعـذر جـمـع FedAdminList. 🚫 يرجـى أعاده الـمحاولة 🔄 ({} / 3) ..."
+sf_8: "يـوجد هنـاك خطأ ⛔"
+sf_9: "- تـعـذر جـمـع FedAdminList 🚫."
+sf_10: "- FBaning in {} ألفـدراليـه 🚸."
+sf_11: "- عذرا معـرف المـجموعـه المحدد غيـر صحيح ❌."
+sf_12: "{} مسـتبعد ‼️."
+sf_13: "خـطـأ في إزالـة مـلف FedAdmin ✖️.\n{}"
+sf_14: "SuperFBan. أكتـمل .\nأجمـالي الاخطاء - {}.\nالـمسـتبـعد - {}.\n المتـأثر {} feds.\n#TB"
+sf_15: "بـدء الــ a Mass-UnFedBan..."
+sf_16: "SuperFBan. أكتـمل .\nأجمـالي الاخطاء - {}.\nالـمسـتبـعد - {}.\n المتـأثر {} feds.\n#TB"
+sf_17: "`اعطنـي معـرف شخـص , او الـرد على الشخـص للـتحقق مـن أخطائـه.`"
+sf_18: "قـائمه المحـظورين ⛔ {} تـم حظـره فـي .\n\nبأستـخدام Ultroid ⚠️."
+sf_19: "خـطأ 🚫\n فـك الحـظر مـن @MissRose_Bot `ثـم حاول مجـددآ !"
+sf_20: "`جـاري اسـتـخراج المعـلومـات 🚻...`"
+sf_21: "\n\nFedInfo المستخرج بواسطة Ultroid"
+
+# gdrive
+gdrive_1: "`┇انــت مــصــرح لــك بــالــفــعــل مــع Google Drive ✅`"
+gdrive_2: "┇أذهــب [هــنــا](https://console.developers.google.com/flows/enableapi?apiid=drive) واحــصــل عــلــى GDRIVE_CLIENT_ID و GDRIVE_CLIENT_SECRET الــخــاص بــك\n\n"
+gdrive_3: "┇ايــدي الــعــمــيــل خــاطــئ ⚠️"
+gdrive_4: "`┇حــدث خــطــأ مــا ❗️ارســل `/auth` مــجــدداً . \n┇اذا حــدث نــفــس الــخــطــأ مــجدداً ؟ راســل `@TheUltroid"
+gdrive_5: "`┇نجحت العملية ! ✅\n┇انــت جــاهــز لاســتــخــدام Google Drive مــع Ultroid Userbot 🔱.`"
+gdrive_6: "`┇اذهب الى `{}` وارسل ``/auth`."
+gdrive_7: "**┇تــم رفــع الــمــلــف عــلــى G-Drive بــنــجــاح ✅ :**\n\n[{}]({})"
+
+# pmpermit
+pmperm_1: "🤖┇مــن فــضــلــك , انــتــظــر الإجــابــة , او ســيــتــم حــظــرك والابــلاغ عــنــك كــ ازعــاج 💙"
+pmperm_2: "🤖┇انــت تــســبــب ازعــاج لــ مــحــادثــة ســيــدي الــخــاصــة , وهــذا شــيء لا يــعــجــبــنــي ⚠️"
+pmperm_3: "┇قــم بــالــرد عــلــى رســالــة شــخــص مــا لــتــجــربــة هــذا الامــر فــي الــمــحــادثــة الــخــاصــة ♥️"
+
+# updater
+upd_1: "`┇جــاري الــتــحــقــق مــن وجــود تــحــديــثــات , انــتــظر رجــاءً ... ♥️`"
+upd_2: "`┇أوبــس .. الــمــحــدث غــيــر قــادر عــلــى الاســتــكــمــال بــســبــب بــعــض الــمــشــاكــل.`\n\n**┇تــتــبــع الــســجــل:**\n"
+upd_3: "**┇يــتــوفــر تــحــديــث جــديــد لــ [[{}]]({}/tree/{}):\n\n**┇ســجــل الــتــغــيــيــرات \n\n{}"
+upd_4: "`┇حــجــم ســجــل الــتــغــيــيــرات كــبــيــر جــداً , اعــرض الــمــلــف لــرؤيــتــه `"
+upd_5: "┇اســتــخــدم `{}update now` لــلــتــحــديــث."
+upd_6: "{}\n\n┇اســتــخــدم `{}update now` لــلــتــحــديــث."
+upd_7: "\n`┇بــوتــك` **بــأخــر تــحــديــث** `بـــ` **[[{}]]({}/tree/{})**\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: "┇اخــتــر أي API تــريــد اعــداده ♻️"
+ast_2: "**remove.bg API**\n┇ادخــل مــفــتــاح الــ API الــخــاص بــك مــن remove.bg.\n\n┇اســتــخــدم /cancel لأنــهــاء الــعــمــلــيــة ⚠️"
+ast_3: "┇مــرحــبــاً {}.↴┇مــن فــضــلــك تــصــفــح مــن خــلال الــخــيــارات "
diff --git a/strings/strings/bn.yml b/strings/strings/bn.yml
new file mode 100644
index 0000000000..a80129817e
--- /dev/null
+++ b/strings/strings/bn.yml
@@ -0,0 +1,161 @@
+name: bengoli
+natively: বাংলা
+
+authors:
+ - lusifernoob
+
+# commons
+com_1: "প্রক্রিয়াজাতকরণ`"
+com_2: "`অনুসন্ধান করা হচ্ছে`"
+
+# help
+help_1: "`{}` এটি বৈধ প্লাগইন নয়!"
+help_2: "`বট ইনলাইন ক্যোয়ারিতে সাড়া দেবেনা.\nব্যবহার করুন {}restart`"
+help_3: "`আপনার বটটি কে দয়া করে ইনলাইন মোডটি চালু করুন` @Botfather."
+help_4: "হ্যালো, \nআপনি বট মোডে আছেন।. \nবট মোড ব্যবহারকারীরা সরাসরি সাহায্য পান না . ... \nইন্সটেড অনুলিপি চ্যাটটিতে নিম্নলিখিতটি পেস্ট করুন এবং পপ আপকে ক্লিক করুন \n\n `@{} ultd`"
+
+# autopic
+autopic_1: "হ্যালো আমাকে কিছু লেখা বা শব্দ দাও .."
+autopic_2: "কোনো রেজাল্ট পাওয়া যায়নি `{}`"
+autopic_3: "সংগ্রহ পেয়েছি `{}` আপনার অনুসন্ধান সম্পর্কিত !\nঅটোপিক শুরু হচ্ছে !"
+
+# 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 Gᴏ Aɴᴅ Aᴅᴅ `অ্যাডনস` Vᴀʀ Wɪᴛʜ Vᴀʟᴜᴇ Tʀᴜᴇ**"
+inline_4: "** Bᴏᴛ Oғ {}\n\nMᴀɪɴ Mᴇɴᴜ\n\nPʟᴜɢɪɴs ~ {}\nAᴅᴅᴏɴs ~ {}\nTᴏᴛᴀʟ Cᴏᴍᴍᴀɴᴅs ~ {}**"
+inline_5: "**Mᴇɴᴜ Hᴀs Bᴇᴇɴ Cʟᴏsᴇᴅ**"
+
+# 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: "#AFK\n সেট AFK মোডে টু False.\n AFK কারন {}`"
+afk_3: "আমি বর্তমানে বিরতিতে .\n শেষ দেখা {} ago.`\n\n **কারন:** `{}`"
+afk_4: "আমি বর্তমানে বিরতিতে`.\n\n শেষ দেখা {} ago.`"
+afk_5: "`বিরতি নিচ্ছি.`\n\n **কারণ:** `{}`"
+afk_6: "আমি বিরতি নিচ্ছি."
+afk_7: "আমি বিরতি নিচ্ছি কারণ {}"
+afk_8: "এখন AFK."
+
+# bot
+alive_1: "**আলট্রয়েড ইউজারবোট ...**\n\n **{}**\n\n ┏━━━━━━━━━━━━━━━━━━━━━\n ┣ **মালিক** - `{}`\n ┣ **ভার্সন** - `{}`\n ┣ **আপটাইম** - `{}`\n ┣ **পাইথন** - `{}`\n ┣ **টেলিথন** - `{}`\n ┣ **শাখা** - `{}`\n ┗━━━━━━━━━━━━━━━━━━━━━"
+log: "**হেরোকু** আলট্রয়েড লগ.\nপেস্ট [এখানে]({}) টু!"
+ping: "**পঙ !!** `{}ms`\n**আপটাইম** - `{}`"
+usage: "**⚙️ ডায়নো ইউজ ⚙️**:\n\n -> `ডায়নো ইউজ হয়েছে` **{}**:\n • `{}`**h** `{}`**m** **|** [`{}`**%**]\n\n -> `এই মাসে ডায়নো কত ঘন্টা কোটা বাকি`:\n • `{}`**h** `{}`**m** **|** [`{}`**%**]\n\n **মোট ডিস্ক স্পেস: {}\n\n** **ব্যবহৃত: {} ফ্রী: {}\n\n** **📊ডেটা ব্যবহার📊\n\nআপলোড: {}\nডাউন: {}\n\n** **CPU: {}%\nRAM: {}%\nDISK: {}%**"
+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: "তোমার [{}]({}) গ্রুপ/চ্যানেল তৈরি করা হয়েছে বস!"
+
+# converter
+cvt_1: "যে কোনও মিডিয়া / ডকুমেন্টের রিপ্লাই দিন."
+cvt_2: "ফাইলের nd এক্সটেনশন নাম দিন"
+cvt_3: "`প্রক্রিয়াজাতকরণ ...`"
+cvt_4: "যে কোনও মিডিয়ায় রিপ্লাই দিন."
+
+# core
+core_1: "মডিউল পাওয়া গেছে"
+core_2: "{}.py use .paste Neko মধ্যে পেস্ট করুণ.."
+core_3: "আবার খুঁজুন..?"
+core_4: "মডিউল {} পাওয়া গেছে"
+core_5: "{}.py use .paste Neko মধ্যে পেস্ট করুণ.."
+core_6: "মডিউল {}.py খুঁজে পাওয়া যায়নি"
+core_7: "এ জাতীয় কোনও মডিউল নেই"
+core_8: "কোনও মডিউলের এই নামে নেই {}.py"
+core_9: "`যে প্লাগইন টি আপনি আনলোড করতে চান তার নাম দিন`"
+core_10: "**Uɴʟᴏᴀᴅᴇᴅ** `{}` **Sᴜᴄᴄᴇssғᴜʟʟʏ.**"
+core_11: "**Yᴏᴜ Cᴀɴ'ᴛ Uɴʟᴏᴀᴅ Oғғɪᴄɪᴀʟ Pʟᴜɢɪɴs**"
+core_12: "**Nᴏ Pʟᴜɢɪɴ Nᴀᴍᴇᴅ** `{}`"
+core_13: "`যে প্লাগইন টি আপনি আনলোড করতে চান তার নাম দিন`"
+core_14: "**Uɴɪɴsᴛᴀʟʟᴇᴅ** `{}` **Sᴜᴄᴄᴇssғᴜʟʟʏ.**"
+core_15: "**Yᴏᴜ Cᴀɴ'ᴛ Uɴɪɴsᴛᴀʟʟ Oғғɪᴄɪᴀʟ Pʟᴜɢɪɴs**"
+core_16: "`যে প্লাগইন টি আপনি লোড করতে চান তার নাম দিন`"
+core_17: "**Sᴜᴄᴄᴇssғᴜʟʟʏ Lᴏᴀᴅᴇᴅ** `{}`"
+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: "ফেড ব্যান হচ্ছে{} feds."
+sf_11: "নির্দিষ্ট FBan গ্রুপের আইডি ভুল."
+sf_12: "{} ছাঁটা বা বাদ দেয়া ."
+sf_13: "ফেড এডমিন ফাইল সরানোর সময় ত্রুটি রয়েছে.\n{}"
+sf_14: "সুপার Fban সম্পূর্ণ হয়েছে.\nমোট ফেড - {}.\nবাদ দেয়া - {}.\n প্রভাবিত {} feds.\n#TB"
+sf_15: "একটি বড় -আন ফেডব্যান শুরু করা হচ্ছে..."
+sf_16: "সুপার আন Fban সম্পূর্ণ হয়েছে।.\nTotal Feds - {}.\nবাদ দেয়া - {}.\n প্রভাবিত {} feds.\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) এবং পান `GDRIVE_CLIENT_ID` এবং `GDRIVE_CLIENT_SECRET`\n\n সেন্ড করুন GDRIVE_CLIENT_ID এবং GDRIVE_CLIENT_SECRET এই হিসাবে.\n`GDRIVE_CLIENT_ID GDRIVE_CLIENT_SECRET` আলাদা করে."
+gdrive_3: "`ভুল ক্লায়েন্ট আইডি`"
+gdrive_4: "` কিছু ভুল হয়েছে! আবার পাঠান `/auth` আবার.\nযদি একই ঘটনা ঘটে যোগাযোগ `@TheUltroid"
+gdrive_5: "`সাফল্য!\nআপনি আলট্রয়েড ইউজারবট দিয়ে গুগল ড্রাইভ ব্যবহার করতে প্রস্তুত.`"
+gdrive_6: "`যান `{}` এবং পাঠান``/auth.`"
+gdrive_7: "**জি-ড্রাইভে সফলভাবে ফাইল আপলোড করা হয়েছে:**\n\n[{}]({})"
+
+# pmpermit
+pmperm_1: "দয়া করে আমার আসার বা উত্তর জন্য অপেক্ষা করুন বা আপনাকে ব্লক করা হবে এবং স্প্যাম হিসাবে প্রতিবেদন করা হবে!!"
+pmperm_2: "আপনি আমার মাস্টারের PM স্প্যাম করছিলেন, যা আমি পছন্দ করি না."
+pmperm_3: "কারওর ম্যাসেজ রিপ্লাই দিন বা গোপনে এই কম্যান্ডটি ব্যবহার করে দেখুন."
+
+# updater
+upd_1: "`আপডেট চেক করা হচ্ছে, দয়া করে অপেক্ষা করুন....`"
+upd_2: "`উফ .. আপডেটার কিছু সমস্যার কারণে চালিয়ে যেতে পারে না.`\n\n**LOGTRACE:**\n"
+upd_3: "**নতুন আপডেটের জন্য উপলব্ধ [[{}]]({}/tree/{}):\n\nCHANGELOG**\n\n{}"
+upd_4: "`চেঞ্জলগটি অনেক বড়, এটি দেখতে ফাইলটি দেখুন.`"
+upd_5: "ব্যবহার করুন `{}update now` আপডেট করতে."
+upd_6: "{}\n\nব্যবহার করুন `{}update now` আপডেট করতে."
+upd_7: "\n`আপনার বট টি ** আপ টু ডেট ** সহ` **[[{}]]({}/tree/{})**\n"
+
+# upload download
+udl_1: "`রিপ্লাই করুণ যে ফাইল/ মিডিয়া আপনি ডাউনলোড করতে চান..`"
+udl_2: "ডাউনলোড সফল..\nTo\n`{}`\nin `{}`"
+udl_3: "`ফাইলের জন্য একটি নির্দিষ্ট পর্থ দিন`"
+
+# words
+wrd_1: "**শব্দ** - `{}`\n\n**অর্থ** - \n"
+wrd_2: "**শব্দ** - `{}`\n\n**প্রতিশব্দ** - \n"
+wrd_3: "**শব্দ** - `{}`\n\n**প্রতিশব্দ ** - \n"
+
+#---------------------------------------------------#
+
+# assisant
+ast_1: "আপনি কোন APIসেট করতে চান তা সিলেক্ট করুন."
+ast_2: "**remove.bg API**\nআপনার API কী প্রবেশ করানremove.bg.\n\nUse /cancel প্রক্রিয়া শেষ করতে."
+ast_3: "হাই {}. বিকল্পগুলির মাধ্যমে ব্রাউজ করুন"
diff --git a/strings/strings/en.yml b/strings/strings/en.yml
new file mode 100644
index 0000000000..17c6183b17
--- /dev/null
+++ b/strings/strings/en.yml
@@ -0,0 +1,198 @@
+name: English
+natively: English
+
+authors:
+ - xditya
+ - rojserbest
+ - sppidy
+ - ProgrammingError
+
+# commons
+com_1: "`Processing...`"
+com_2: "`Searching...`"
+# help
+help_1: "`{}` is not a valid plugin!"
+help_2: "The bot did not respond to the inline query.\nConsider using `{}restart`"
+help_3: "`Please turn on inline mode for your bot from` @Botfather."
+help_4: "Hey, \nYou are on Bot Mode. \nBot Mode Users Cant Get Help Directly ... \nInstead Copy Paste The Following in The Chat and Click The Pop Up \n\n `@{} ultd`"
+
+# autopic
+autopic_1: "Heya Give me some Text .."
+autopic_2: "No Results found for `{}`"
+autopic_3: "Got a Collection `{}` related to your search !\nStarting 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
+Gᴏ Aɴᴅ Aᴅᴅ `ADDONS` Vᴀʀ Wɪᴛʜ Vᴀʟᴜᴇ Tʀᴜᴇ**"
+inline_4: "** Bᴏᴛ Oғ {}\n\nMᴀɪɴ Mᴇɴᴜ\n\nPʟᴜɢɪɴs ~ {}\nAᴅᴅᴏɴs ~ {}\nTᴏᴛᴀʟ Cᴏᴍᴍᴀɴᴅs ~ {}**"
+inline_5: "**Mᴇɴᴜ Hᴀs Bᴇᴇɴ Cʟᴏsᴇᴅ**"
+
+# tagnotif
+tagnot_1: "{} tagged you in {}\n\n```{}```\n\n[📨Message📨]({})"
+tagnot_2: "{} tagged you in {}\n\n [📨Message📨]({})"
+
+# whisper
+wspr_1: "@{} secret msg for you.\nDelete your msg after reading.\nOr the next msg will not be updated."
+wspr_2: "Message deleted"
+
+# afk
+afk_1: "`No Longer Afk\n\n
+Was away for ~ {}`"
+afk_2: "#AFK\n
+Set AFK mode to False.\n
+Was AFK for {}`"
+afk_3: "I'm currently AFK.\n
+Last seen {} ago.`\n\n
+**Reason:** `{}`"
+afk_4: "`I'm currently AFK.\n\n
+Last seen {} ago.`"
+afk_5: "`Going AFK.`\n\n
+**Reason:** `{}`"
+afk_6: "I'm going AFK."
+afk_7: "Currently AFK with reason {}"
+afk_8: "Currently AFK."
+
+# bot
+alive_1: "**The Ultroid Userbot...**\n\n
+**{}**\n\n
+┏━━━━━━━━━━━━━━━━━━━━━\n
+┣ **Owner** - `{}`\n
+┣ **Version** - `{}`\n
+┣ **UpTime** - `{}`\n
+┣ **Python** - `{}`\n
+┣ **Telethon** - `{}`\n
+┣ **Branch** - `{}`\n
+┗━━━━━━━━━━━━━━━━━━━━━"
+log: "**Heroku** Ultroid Logs.\nPasted [here]({}) too!"
+ping: "**Pong !!** `{}ms`\n**Uptime** - `{}`"
+usage: "**⚙️ Dyno Usage ⚙️**:\n\n
+ -> `Dyno usage for` **{}**:\n
+ • `{}`**h** `{}`**m**
+**|** [`{}`**%**]\n\n
+ -> `Dyno hours quota remaining this month`:\n
+ • `{}`**h** `{}`**m**
+**|** [`{}`**%**]\n\n
+**Total Disk Space: {}\n\n**
+**Used: {} Free: {}\n\n**
+**📊Data Usage📊\n\nUpload: {}\nDown: {}\n\n**
+**CPU: {}%\nRAM: {}%\nDISK: {}%**"
+shutdown: "GoodBye {}.\n`Shutting down...`"
+
+# broadcast
+bd_1: "`Adding to db...`"
+bd_2: "`Trying to add all admin channels to db...`"
+bd_3: "**Done.**\nChats already in Database: {}\nNewly Added: {}"
+bd_4: "Channels added!"
+bd_5: "`Added to database!`"
+bd_6: "`Channel is already is database!`"
+
+# carbon
+carbon_1: "Processing"
+carbon_2: "Carbonised by [{}](tg://user?id={})"
+
+# chats
+chats_1: "`Processing...`"
+chats_2: "`Cant delete this chat`"
+chats_3: "`I m not an admin`"
+chats_4: "#Deleted\nDeleted {}"
+chats_5: "Your [{}]({}) Group Made Boss!"
+chats_6: "Join @TeamUltroid"
+chats_6: "Your [{}]({}) Group/Channel Has been made Boss!"
+
+# converter
+cvt_1: "Reply to any media/Document."
+cvt_2: "Give The name nd extension of file"
+cvt_3: "`Processing...`"
+cvt_4: "Reply to any media."
+
+# core
+core_1: "Module Found"
+core_2: "{}.py use .paste to paste in neko and raw.."
+core_3: "Search Again..?"
+core_4: "Module {} Found"
+core_5: "{}.py use .paste to paste in neko and raw.."
+core_6: "Module {}.py Not Found"
+core_7: "No Such Module"
+core_8: "No Module Named {}.py"
+core_9: "`Give name of plugin which u want to unload`"
+core_10: "**Uɴʟᴏᴀᴅᴇᴅ** `{}` **Sᴜᴄᴄᴇssғᴜʟʟʏ.**"
+core_11: "**Yᴏᴜ Cᴀɴ'ᴛ Uɴʟᴏᴀᴅ Oғғɪᴄɪᴀʟ Pʟᴜɢɪɴs**"
+core_12: "**Nᴏ Pʟᴜɢɪɴ Nᴀᴍᴇᴅ** `{}`"
+core_13: "`Give name of plugin which u want to uninstall`"
+core_14: "**Uɴɪɴsᴛᴀʟʟᴇᴅ** `{}` **Sᴜᴄᴄᴇssғᴜʟʟʏ.**"
+core_15: "**Yᴏᴜ Cᴀɴ'ᴛ Uɴɪɴsᴛᴀʟʟ Oғғɪᴄɪᴀʟ Pʟᴜɢɪɴs**"
+core_16: "`Give name of plugin which u want to load`"
+core_17: "**Sᴜᴄᴄᴇssғᴜʟʟʏ Lᴏᴀᴅᴇᴅ** `{}`"
+core_18: "**Could not load** `{}` **because of the following error.**\n`{}`"
+
+# fedutils
+sf_1: "Starting a Mass-FedBan..."
+sf_2: "`No user designated!`"
+sf_3: "You can't ban my dev you noob!!"
+sf_4: "`Seems like rose isn't responding, or, the plugin is misbehaving`"
+sf_5: "You can only use fed commands once every 5 minutes"
+sf_6: "Try again after 5 mins."
+sf_7: "Unable to collect FedAdminList. Retrying ({}/3)..."
+sf_8: "Error"
+sf_9: "Unable to collect FedAdminList."
+sf_10: "FBaning in {} feds."
+sf_11: "Specified FBan Group ID is incorrect."
+sf_12: "{} Excluded."
+sf_13: "Error in removing FedAdmin file.\n{}"
+sf_14: "SuperFBan Completed.\nTotal Feds - {}.\nExcluded - {}.\n Affected {} feds.\n#TB"
+sf_15: "Starting a Mass-UnFedBan..."
+sf_16: "SuperUnFBan Completed.\nTotal Feds - {}.\nExcluded - {}.\n Affected {} feds.\n#TB"
+sf_17: "`Give me someones id, or reply to somones message to check his/her fedstat.`"
+sf_18: "List of feds {} has been banned in.\n\nCollected using Ultroid."
+sf_19: "**Error**\n `Unblock` @MissRose_Bot `and try again!"
+sf_20: "`Extracting information...`"
+sf_21: "\n\nFedInfo Extracted by Ultroid"
+
+# gdrive
+gdrive_1: "`You have already authorised with Google Drive`"
+gdrive_2: "Go [here](https://console.developers.google.com/flows/enableapi?apiid=drive) and get your `GDRIVE_CLIENT_ID` and `GDRIVE_CLIENT_SECRET`\n\n
+Send your GDRIVE_CLIENT_ID and GDRIVE_CLIENT_SECRET as this.\n`GDRIVE_CLIENT_ID GDRIVE_CLIENT_SECRET` separated by space."
+gdrive_3: "`Wrong Client Id`"
+gdrive_4: "`Something went wrong! Send `/auth` again.\nIf same happens contact `@TheUltroid"
+gdrive_5: "`Success!\nYou are all set to use Google Drive with Ultroid Userbot.`"
+gdrive_6: "`Go to `{}` and send ``/auth.`"
+gdrive_7: "**Successfully Uploaded File on G-Drive :**\n\n[{}]({})"
+
+# pmpermit
+pmperm_1: "Please wait for me to respond or you will be blocked and reported as spam!!"
+pmperm_2: "You were spamming my Master's PM, which I didn't like.\nYou have been BLOCKED and reported as SPAM, until further notice."
+pmperm_3: "Reply to someone's msg or try this commmand in private."
+
+# updater
+upd_1: "`Checking for updates, please wait....`"
+upd_2: "`Oops.. Updater cannot continue due to some problems.`\n\n**LOGTRACE:**\n"
+upd_3: "**New UPDATE available for [[{}]]({}/tree/{}):\n\nCHANGELOG**\n\n{}"
+upd_4: "`Changelog is too big, view the file to see it.`"
+upd_5: "Use `{}update now` to update."
+upd_6: "{}\n\nUse `{}update now` to update."
+upd_7: "\n`Your BOT is` **up-to-date** `with` **[[{}]]({}/tree/{})**\n"
+
+# upload download
+udl_1: "`Reply to the file/media you want to download...`"
+udl_2: "Download Successful..\nTo\n`{}`\nin `{}`"
+udl_3: "`Give a specific path to file`"
+
+# words
+wrd_1: "**Word** - `{}`\n\n**Meanings** - \n"
+wrd_2: "**Word** - `{}`\n\n**Synonyms** - \n"
+wrd_3: "**Word** - `{}`\n\n**Antonyms** - \n"
+
+# ---------------------------------------------------#
+
+# assisant
+ast_1: "Choose which API you want to set."
+ast_2: "**remove.bg API**\nEnter your API key from remove.bg.\n\nUse /cancel to terminate the operation."
+ast_3: "Hi {}. Please browse through the options"
diff --git a/strings/strings/gu.yml b/strings/strings/gu.yml
new file mode 100644
index 0000000000..d0937e8c42
--- /dev/null
+++ b/strings/strings/gu.yml
@@ -0,0 +1,197 @@
+name: Gujarati
+natively: ગુજરાતી
+
+authors:
+ - buddhhu
+
+# commons
+com_1: "`પ્રક્રિયા...`"
+com_2: "`શોધી રહ્યું છે...`"
+# help
+help_1: "`{}` માન્ય પ્લગઇન નથી!"
+help_2: "`બોટે ઇનલાઇન ક્વેરીનો જવાબ આપ્યો નથી. \n``{}restart`` નો ઉપયોગ કરો`"
+help_3: "`કૃપા કરીને તમારા બોટ માટે ઇનલાઇન મોડ ચાલુ કરો` @Botfather."
+help_4: "હેય, \nતમે બોટ મોડ પર છો. \nબોટ મોડ વપરાશકર્તાઓ સીધી સહાય મેળવી શકતા નથી ... \nવર્તમાન ચેટમાં પોપઅપ પર ક્લિક કરો \n\n `@{} ultd`"
+
+# autopic
+autopic_1: "મને થોડો ટેક્સ્ટ આપો .."
+autopic_2: "`{}` માટે કોઈ પરિણામ મળ્યાં નથી"
+autopic_3: "તમારી શોધથી સંબંધિત સંગ્રહ મળ્યો !\n ઓટોપિક શરૂ કરી રહ્યા છીએ !"
+
+# inline
+inline_1: "[અલ્ટ્રોઇડ સપોર્ટ](t.me/ultroidsupport)\n\n
+**{} ના સહાય મેનૂ .\n\n
+પ્લગઇન્સ ~ {}**"
+inline_2: "[અલ્ટ્રોઇડ સપોર્ટ](t.me/ultroidsupport)\n\n
+**{} ના સહાય મેનૂ.\n\n
+એડન્સ ~ {}**"
+inline_3: "[અલ્ટ્રોઇડ સપોર્ટ](t.me/ultroidsupport)\n\n
+**{} ના સહાય મેનૂ.\n\n
+એડન્સ ~ {}\n\n
+`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: "`હવે AFK નથી\n\n
+{} ~ માટે દૂર હતો`"
+afk_2: "#AFK\n
+`હવે AFK નથી.\n
+{} ~ માટે દૂર હતો`"
+afk_3: "`હું હાલમાં AFK છું.\n
+છેલ્લે દેખાયું {} પહેલાં`\n\n
+**કારણ:** `{}`"
+afk_4: "`હું હાલમાં AFK છું.\n\n
+છેલ્લે દેખાયું {} પહેલાં`"
+afk_5: "`AFK જઈ રહ્યો છુ.`\n\n
+**કારણ:** `{}`"
+afk_6: "AFK જઈ રહ્યો છુ."
+afk_7: "હાલમાં AFK છું. કારણ {}"
+afk_8: "હાલમાં AFK છું."
+
+# bot
+alive_1: "**અલ્ટ્રોઇડ યુઝરબોટ...**\n\n
+**{}**\n\n
+┏━━━━━━━━━━━━━━━━━━━━━\n
+┣ **માલિક** - `{}`\n
+┣ **સંસ્કરણ** - `{}`\n
+┣ **અપટાઇમ** - `{}`\n
+┣ **પયથોન** - `{}`\n
+┣ **ટેલેથોન** - `{}`\n
+┣ **શાખા** - `{}`\n
+┗━━━━━━━━━━━━━━━━━━━━━"
+log: "**હેરોકુ** અલ્ટ્રોઇડ લોગ.\n [અહીં]({}) પણ પેસ્ટ કર્યું!"
+ping: "**પોંગ !!** `{}મિલિસેકંડ`\n**અપટાઇમ** - `{}`"
+usage: "**⚙️ ડાયનો વપરાશ ⚙️**:\n\n
+ -> **{}**: `માટે ડાયનો વપરાશ`\n
+ • `{}`**h** `{}`**m**
+**|** [`{}`**%**]\n\n
+ -> `આ મહિનામાં ડાયનો કલાકોનો ક્વોટા બાકી`:\n
+ • `{}`**h** `{}`**m**
+**|** [`{}`**%**]\n\n
+**કુલ ડિસ્ક જગ્યા: {}\n\n**
+**વપરાયેલ: {} ખાલી: {}\n\n**
+**📊ડેટા વપરાશ📊\n\nઅપલોડ: {}\nડાઉનલોડ: {}\n\n**
+**CPU: {}%\nRAM: {}%\nDISK: {}%**"
+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: "#Deleted\n{} કાઢી નાખ્યું."
+chats_5: "તમારું [{}]({}) ગ્રુપ તૈયાર છે!"
+chats_6: "જોડાઓ @TeamUltroid"
+chats_6: "તમારું [{}]({}) ગ્રુપ/ચેનલ તૈયાર છે!"
+
+# converter
+cvt_1: "મીડિયાને/ડોક્યુમેન્ટ જવાબ આપો."
+cvt_2: "ફાઇલનું નામ અને એક્સ્ટેંશન આપો"
+cvt_3: "`પ્રક્રિયા...`"
+cvt_4: "મીડિયાને જવાબ આપો."
+
+# core
+core_1: "મોડ્યુલ મળ્યું"
+core_2: "{}.py નેકો અને રૌમાં પેસ્ટ કરવા .paste વાપરવું.."
+core_3: "ફરીથી શોધ..?"
+core_4: "{} મોડ્યુલ મળ્યું"
+core_5: "{}.py નેકો અને રૌમાં પેસ્ટ કરવા .paste વાપરવું.."
+core_6: "મોડ્યુલ મળ્યું નથી"
+core_7: "આવા કોઈ મોડ્યુલ નથી"
+core_8: "{} નામનું કોઈ મોડ્યુલ નથી"
+core_9: "`તમે અનલોડ કરવા માંગો છો તે પ્લગઇનનું નામ આપો`"
+core_10: "**Uɴʟᴏᴀᴅᴇᴅ** `{}` **Sᴜᴄᴄᴇssғᴜʟʟʏ.**"
+core_11: "**Yᴏᴜ Cᴀɴ'ᴛ Uɴʟᴏᴀᴅ Oғғɪᴄɪᴀʟ Pʟᴜɢɪɴs**"
+core_12: "**Nᴏ Pʟᴜɢɪɴ Nᴀᴍᴇᴅ** `{}`"
+core_13: "`Give name of plugin which u want to uninstall`"
+core_14: "**Uɴɪɴsᴛᴀʟʟᴇᴅ** `{}` **Sᴜᴄᴄᴇssғᴜʟʟʏ.**"
+core_15: "**Yᴏᴜ Cᴀɴ'ᴛ Uɴɪɴsᴛᴀʟʟ Oғғɪᴄɪᴀʟ Pʟᴜɢɪɴs**"
+core_16: "`તમે અનલોડ કરવા માંગો છો તે પ્લગઇનનું નામ આપો`"
+core_17: "**Sᴜᴄᴄᴇssғᴜʟʟʏ Lᴏᴀᴅᴇᴅ** `{}`"
+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: "ઉલ્લેખિત ફેડરેશન જૂથ ID અમાન્ય છે."
+sf_12: "{} બાકાત."
+sf_13: "ફેડરેશન એડમિન ફાઇલને કાઢવામાં ભૂલ.\n{}"
+sf_14: "SuperFban પૂર્ણ.\nકુલ ફેડરેશન - {}.\nબાકાત - {}.\n અસરગ્રસ્ત ફેડરેશન {}.\n#TB"
+sf_15: "SuperUnFBan શરૂ..."
+sf_16: "SuperUnFBan પૂર્ણ.\nકુલ ફેડરેશન - {}.\nબાકાત - {}.\n અસરગ્રસ્ત ફેડરેશન {}.\n#TB"
+sf_17: "`મને કોઈની ID આપો અથવા તેના ફેડરેશનના આંકડા તપાસવા માટે કોઈના સંદેશનો જવાબ આપો.`"
+sf_18: "ફેડરેશનની સૂચિ જેમાં પ્રતિબંધિત છે {}.\n\nઅલ્ટ્રોઇડનો ઉપયોગ કરીને એકત્રિત."
+sf_19: "**ભૂલ**\nઅનાવરોધિત` @MissRose_Bot `અને ફરી પ્રયાસ કરો!"
+sf_20: "`માહિતી કાઢીએ છીએ...`"
+sf_21: "\n\nFedinfo અલ્ટ્રોડ દ્વારા એકત્રિત કરવામાં આવી"
+
+# gdrive
+gdrive_1: "`તમે પહેલાથી જ ગૂગલ ડ્રાઇવને અધિકૃત કરી દીધી છે`"
+gdrive_2: "[અહીં](https://console.developers.google.com/flows/enableapi?apiid=drive) જાઓ અને મેળવો તમારો `GDRIVE_CLIENT_ID` અને `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` ફરીથી મોકલો.\nIf same happens contact `@TheUltroid"
+gdrive_5: "`Success!\nYou are all set to use Google Drive with Ultroid Userbot.`"
+gdrive_6: "`Go to `{}` and send ``/auth.`"
+gdrive_7: "**Successfully Uploaded File on G-Drive :**\n\n[{}]({})"
+
+# pmpermit
+pmperm_1: "Please wait for me to respnd or you will be blocked and reported as spam!!"
+pmperm_2: "You were spamming my Master's PM, which I didn't like."
+pmperm_3: "Reply to someone's msg or try this commmand in private."
+
+# updater
+upd_1: "`Checking for updates, please wait....`"
+upd_2: "`Oops.. Updater cannot continue due to some problems.`\n\n**LOGTRACE:**\n"
+upd_3: "**New UPDATE available for [[{}]]({}/tree/{}):\n\nCHANGELOG**\n\n{}"
+upd_4: "`Changelog is too big, view the file to see it.`"
+upd_5: "Use `{}update now` to update."
+upd_6: "{}\n\nUse `{}update now` to update."
+upd_7: "\n`Your BOT is` **up-to-date** `with` **[[{}]]({}/tree/{})**\n"
+
+# upload download
+udl_1: "`Reply to the file/media you want to download...`"
+udl_2: "Download Successful..\nTo\n`{}`\nin `{}`"
+udl_3: "`Give a specific path to file`"
+
+# words
+wrd_1: "**Word** - `{}`\n\n**Meanings** - \n"
+wrd_2: "**Word** - `{}`\n\n**Synonyms** - \n"
+wrd_3: "**Word** - `{}`\n\n**Antonyms** - \n"
+
+# ---------------------------------------------------#
+
+# assisant
+ast_1: "Choose which API you want to set."
+ast_2: "**remove.bg API**\nEnter your API key from remove.bg.\n\nUse /cancel to terminate the operation."
+ast_3: "Hi {}. Please browse through the options"
diff --git a/strings/strings/id.yml b/strings/strings/id.yml
new file mode 100644
index 0000000000..3db65ad8b6
--- /dev/null
+++ b/strings/strings/id.yml
@@ -0,0 +1,195 @@
+name: Indonesia
+natively: Indonesia
+
+authors:
+ - itsmenandos
+
+# commons
+com_1: "`Memproses...`"
+com_2: "`Sedang Mencari...`"
+# help
+help_1: "`{}` bukan plugin yang valid!"
+help_2: "Bot tidak menanggapi inline kueri.\nLebih baik untuk menggunakan `{}restart`"
+help_3: "`Tolong aktifkan inline mode bot Anda dari` @Botfather."
+help_4: "Heioo...., \nAnda sedang mengaktifkan Mode Bot. \nPengguna Mode Bot tidak dapat mendapatkan bantuan secara langsung ... \nLebih baik cipy dan paste yang berikut di obrolan dan Klik Pop Up \n\n `@{} ultd`"
+
+# autopic
+autopic_1: "Haisss, beri aku suatu kata .."
+autopic_2: "Tidak ada hasil yang ditemukan untuk `{}`"
+autopic_3: "Mendapatkan koleksi `{}` yang terkait dengan penelusuran Anda !\nMemulai 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
+Pᴇʀɢɪ Dᴀɴ Tᴀᴍʙᴀʜᴋᴀɴ `ADDONS` Vᴀʀ Dᴇɴɢᴀɴ Vᴀʟᴜᴇ Tʀᴜᴇ**"
+inline_4: "** Bᴏᴛ Oғ {}\n\nMᴀɪɴ Mᴇɴᴜ\n\nPʟᴜɢɪɴs ~ {}\nAᴅᴅᴏɴs ~ {}\nTᴏᴛᴀʟ Cᴏᴍᴍᴀɴᴅs ~ {}**"
+inline_5: "**Mᴇɴᴜ Tᴇʟᴀʜ Dɪᴛᴜᴛᴜᴘ**"
+
+# tagnotif
+tagnot_1: "{} menandai anda dalam {}\n\n```{}```\n\n[📨Message📨]({})"
+tagnot_2: "{} menandai anda dalam {}\n\n [📨Message📨]({})"
+
+# whisper
+wspr_1: "@{} pesan rahasia buatmu.\nHapus pesanmu setelah membaca.\nAtau pesan selanjutnya tidak bisa diterima."
+wspr_2: "Pesan dihapus!"
+
+# afk
+afk_1: "`Tidak Lagi Afk\n\n
+Karena ~ {}`"
+afk_2: "#AFK\n
+Menyetel AFK mode ke False.\n
+AFK untuk {}`"
+afk_3: "Gua lagi AFK.\n
+Terakhir dilihat {} yang lalu.`\n\n
+**Karena:** `{}`"
+afk_4: "`Gua lagi AFK.\n\n
+Terakhir dilihat {} yang lalu.`"
+afk_5: "`AFK dulu.`\n\n
+**Karena:** `{}`"
+afk_6: "AFK dulu gua."
+afk_7: "Lagi Afk karena {}"
+afk_8: "Lagi AFK."
+
+# bot
+alive_1: "**The Ultroid Userbot...**\n\n
+**{}**\n\n
+┏━━━━━━━━━━━━━━━━━━━━━\n
+┣ **Pemilik** - `{}`\n
+┣ **Versi** - `{}`\n
+┣ **UpTime** - `{}`\n
+┣ **Python** - `{}`\n
+┣ **Telethon** - `{}`\n
+┣ **Branch** - `{}`\n
+┗━━━━━━━━━━━━━━━━━━━━━"
+log: "**Heroku** Ultroid Logs.\nPasted [here]({}) too!"
+ping: "**Pong !!** `{}ms`\n**Uptime** - `{}`"
+usage: "**⚙️ Dyno Usage ⚙️**:\n\n
+ -> `Pemakaian Dyno Untuk` **{}**:\n
+ • `{}`**h** `{}`**m**
+**|** [`{}`**%**]\n\n
+ -> `Sisa kuota jam dyno bulan ini`:\n
+ • `{}`**h** `{}`**m**
+**|** [`{}`**%**]\n\n
+**Total Ruang Disk: {}\n\n**
+**Terpakai: {} Kosong: {}\n\n**
+**📊Penggunaan Data📊\n\nUpload: {}\nDown: {}\n\n**
+**CPU: {}%\nRAM: {}%\nDISK: {}%**"
+shutdown: "GoodBye {}.\n`Sedang Mematikan bot...`"
+
+# broadcast
+bd_1: "`Menambahkan ke database...`"
+bd_2: "`Mencoba menambahkan semua channel admin ke database...`"
+bd_3: "**Berhasil.**\nChats sudah ada dalam Database: {}\nBaru ditambahkan: {}"
+bd_4: "Channels ditambahkan!"
+bd_5: "`Menambahkan ke database!`"
+bd_6: "`Channel sudah ada dalam database!`"
+
+# carbon
+carbon_1: "Memproses..."
+carbon_2: "Carbonised oleh [{}](tg://user?id={})"
+
+# chats
+chats_1: "`Memproses...`"
+chats_2: "`Tidak bisa menghapus chat ini zzzz`"
+chats_3: "`Gua bukan admin`"
+chats_4: "#Terhapus\nTerhapus {}"
+chats_5: "Anda [{}]({}) Grup telah dibuat oleh boss!"
+chats_6: "Join @TeamUltroid"
+chats_6: "Anda [{}]({}) Grup/Channel Telah dibuat oleh Bos!"
+
+# converter
+cvt_1: "Balas ke media/Dokumen apapun."
+cvt_2: "Beri Nama dan ekstensi file"
+cvt_3: "`Memproses...`"
+cvt_4: "Balas ke media."
+
+# core
+core_1: "`Modul ditemukan`"
+core_2: "{}.py gunakan .paste untuk menempel di neko dan raw.."
+core_3: "`Cari lagi..?`"
+core_4: "Modul {} ditemukan"
+core_5: "{}.py gunakan .paste untuk menempel di neko dan raw.."
+core_6: "Modul {}.py tidak ada"
+core_7: "Tidak Ada Modul Seperti Itu"
+core_8: "Ga ada modul yang namanya {}.py"
+core_9: "`Beri tau nama plugin yang ingin Anda unload`"
+core_10: "**Uɴʟᴏᴀᴅᴇᴅ** `{}` **Bᴇʀʜᴀsɪʟ.**"
+core_11: "**Aɴᴅᴀ Tɪᴅᴀᴋ Bɪsᴀ Uɴʟᴏᴀᴅ Oғғɪᴄɪᴀʟ Pʟᴜɢɪɴs**"
+core_12: "**Tɪᴅᴀᴋ Aᴅᴀ Pʟᴜɢɪɴ Yᴀɴɢ Bᴇʀɴᴀᴍᴀ** `{}`"
+core_13: "`Beri tau nama plugin yang ingin Anda uninstall`"
+core_14: "**Uɴɪɴsᴛᴀʟʟᴇᴅ** `{}` **Bᴇʀʜᴀsɪʟ.**"
+core_15: "**Aɴᴅᴀ Tɪᴅᴀᴋ Bɪsᴀ Uɴɪɴsᴛᴀʟʟ Oғғɪᴄɪᴀʟ Pʟᴜɢɪɴs**"
+core_16: "`Beri tau nama plugin yang ingin Anda load`"
+core_17: "**Bᴇʀʜᴀsɪʟ Dɪ Lᴏᴀᴅ** `{}`"
+core_18: "**Tidak dapat diload** `{}` **karena kesalahan berikut.**\n`{}`"
+
+# fedutils
+sf_1: "Memulai Mass-FedBan..."
+sf_2: "`Tidak ada pengguna yang dipilih!`"
+sf_3: "Lu gabisa banned Developer gua!! dasar Noob"
+sf_4: "`Sepertinya Rose tidak merespons atau plugin bermasalah`"
+sf_5: "Anda hanya dapat menggunakan perintah fed satu kali setiap 5 menit"
+sf_6: "Coba lagi dalam 5 menit."
+sf_7: "Tidak dapat mengumpulkan FedAdminList. Sedang Mencoba lagi ({}/3)..."
+sf_8: "Kesalahan"
+sf_9: "Tidak dapat mengumpulkan FedAdminList."
+sf_10: "FBaning dalam {} feds."
+sf_11: "ID Grup FBan yang ditentukan salah."
+sf_12: "{} Pengecualian."
+sf_13: "Kesalahan dalam menghapus file FedAdmin.\n{}"
+sf_14: "SuperFBan Selesai.\nTotal Feds - {}.\nPengecualian - {}.\n Pengaruh {} feds.\n#TB"
+sf_15: "Memulai Mass-UnFedBan..."
+sf_16: "SuperUnFBan Selesai.\nTotal Feds - {}.\nPengecualian - {}.\n Pengaruh {} feds.\n#TB"
+sf_17: "`Beri saya id seseorang, atau balas pesan seseorang untuk memeriksa fedstatnya.`"
+sf_18: "Daftar feds {} telah dibanned.\n\nDikumpulkan menggunakan Ultroid."
+sf_19: "**Kesalahan**\n `Unblock` @MissRose_Bot `dan coba lagi!"
+sf_20: "`Mengekstrak informasi...`"
+sf_21: "\n\nFedInfo diekstrak oleh Ultroid"
+
+# gdrive
+gdrive_1: "`Anda telah memberi otorisasi dengan Google Drive`"
+gdrive_2: "Pergi [kesini](https://console.developers.google.com/flows/enableapi?apiid=drive) dan dapatkan `GDRIVE_CLIENT_ID` dan `GDRIVE_CLIENT_SECRET` kamu\n\n
+Kirim GDRIVE_CLIENT_ID dan GDRIVE_CLIENT_SECRET kamu seperti ini.\n`GDRIVE_CLIENT_ID GDRIVE_CLIENT_SECRET` dipisahkan dengan spasi."
+gdrive_3: "`Client Id salah anjim`"
+gdrive_4: "`Terjadi kesalahan! Kirim `/auth` lagi.\nJika masih sama, harap hubungi `@TheUltroid"
+gdrive_5: "`Berhasil!\nAnda siap untuk menggunakan Google Drive dengan Ultroid Userbot.`"
+gdrive_6: "`Pergi ke `{}` dan kirim ``/auth.`"
+gdrive_7: "**File Berhasil Diupload kedalam G-Drive :**\n\n[{}]({})"
+
+# pmpermit
+pmperm_1: "Harap tunggu saya merespons atau Anda akan diblokir dan dilaporkan sebagai spam!!"
+pmperm_2: "Anda telah melakukan spamming pada pesan Boss saya."
+pmperm_3: "Balas pesan seseorang atau coba perintah ini secara pribadi."
+
+# updater
+upd_1: "`Memeriksa pembaruan, harap tunggu....`"
+upd_2: "`Oops.. Updater tidak dapat melanjutkan karena beberapa masalah.`\n\n**LOGTRACE:**\n"
+upd_3: "**UPDATE baru tersedia untuk [[{}]]({}/tree/{}):\n\nPERUBAHAN:**\n\n{}"
+upd_4: "`Perubahan log terlalu besar, lihat file untuk melihatnya.`"
+upd_5: "Gunakan `{}update now` untuk update bot."
+upd_6: "{}\n\nGunakan `{}update now` untuk update bot."
+upd_7: "\n`BOT Anda sudah` **paling-terbaru** `dengan` **[[{}]]({}/tree/{})**\n"
+
+# upload download
+udl_1: "`Balas ke file/media yang ingin Anda download...`"
+udl_2: "Download Berhasil..\nTo\n`{}`\nin `{}`"
+udl_3: "`Berikan tempat penyimpanan khusus ke file`"
+
+# words
+wrd_1: "**Kata** - `{}`\n\n**Arti** - \n"
+wrd_2: "**Kata** - `{}`\n\n**Sinonim** - \n"
+wrd_3: "**Kata** - `{}`\n\n**Antonim** - \n"
+
+# ---------------------------------------------------#
+
+# assisant
+ast_1: "Pilih API yang ingin Anda setel."
+ast_2: "**remove.bg API**\nMasukkan API key Anda dari remove.bg.\n\nGunakan /cancel untuk membatalkan."
+ast_3: "Woii {}. Silakan telusuri opsi"
diff --git a/strings/strings/ml.yml b/strings/strings/ml.yml
new file mode 100644
index 0000000000..e2e0c70452
--- /dev/null
+++ b/strings/strings/ml.yml
@@ -0,0 +1,196 @@
+name: Malayalam
+natively: മലയാളം
+
+authors:
+ - xditya
+ - PmsHere
+
+# commons
+com_1: "`നടന്നുകൊണ്ടിരിക്കുന്നു...`"
+com_2: "`അന്വേഷിക്കുന്നു...`"
+# help
+help_1: "`{}` ഒരു പ്ലഗ്ഗിൻ അല്ല!"
+help_2: "ഇൻലൈൻ ആയി ബോട്ട് വർക്ക് ചെയ്യുന്നതല്ല.\nഅതിനാൽ `{}restart` ചെയ്യുക"
+help_3: "`ദയവായി ` @Botfather പോയി നിങ്ങളുടെ ബോട്ടിന്റെ ഇൻലൈൻ ഓപ്ഷൻ ഓണ് ആക്കുക."
+help_4: "Hey, \nനിങ്ങൾ ഇപ്പോൾ ബോട്ട് മോഡിൽ ആണ്. \n ബോട്ട് മോഡിൽ നിങ്ങൾക്ക് ഹെല്പ് ഡയറക്ടറി കിട്ടുന്നതല്ല ... \nതാഴെ കൊടുത്തിരിക്കുന്നവ ചാറ്റിൽ നിന്നും കോപ്പി പേസ്റ്റ് ചെയ്ത ശേഷം വരുന്ന പോപ്പ് അപ്പ് ബട്ടൺ ക്ലിക്ക് ചെയ്യുക.\n\n `@{} ultd`"
+
+# 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
+ഹീറോക്കുവിൽ പോയി `ADDONS` എന്ന Vᴀʀ T സെറ്റ് ചെയ്യുക വാല്യു = Tʀᴜᴇ**"
+inline_4: "** ബോട്ട് ഉടമ {}\n\nമെയിൻ മെനു\n \nപ്ലഗ്ഗിൻസ്~ {}\nആഡ് ഓണ്~ {}\nആകെയുള്ള കമാൻഡ്സ്സ് {}**"
+inline_5: "**മെനു ക്ലോസ് ചെയ്തിരിക്കുന്നു**"
+
+# tagnotif
+tagnot_1: "{} നിങ്ങളെ റ്റാഗ്ഗ് ചെയ്തിരിക്കുന്നു {}\n\n```{}```\n\n[📨മെസ്സേജ്📨]({})"
+tagnot_2: "{} നിങ്ങളെ റ്റാഗ്ഗ് ചെയ്തിരിക്കുന്നു{}\n\n [📨മെസ്സേജ്📨]({})"
+
+# whisper
+wspr_1: "@{} രഹസ്യ സന്ദേശം അയച്ചിട്ടുണ്ട്.\nമെസേജ് വായിച്ചതിനു ശേഷം ഡിലീറ്റ് ചെയ്യാൻ.\nഅല്ല എങ്കിൽ അടുത്ത മെസ്സേജ് അപ്ഡേറ്റ് ആവുന്നത് അല്ല.."
+wspr_2: "മെസ്സേജ് ഡിലീറ്റ് ചെയ്തിരിക്കുന്നു"
+
+# afk
+afk_1: "`തിരികെ വന്നിരിക്കുന്നു\n\n
+ഇത്ര സമയം~ {}` ലഭ്യമല്ലായിരുന്നു"
+afk_2: "#AFK\n
+Set AFK mode to False.\n
+ഇപ്പോൾ ലഭ്യമല്ല{}`"
+afk_3: "ഞാൻ ഇപ്പോൾ തിരക്കിലാണ്.\n
+ലാസ്റ്റ് സീൻ {} മുൻപ്.`\n\n
+**കാരണം:** `{}`"
+afk_4: "`ഞാൻ ഇപ്പോൾ തിരക്കിലാണ്.\n\n
+ലാസ്റ്റ് സീൻ {}മുൻപ്.`"
+afk_5: "`ഞാൻ പോകുന്നു..`\n\n
+**കാരണം:** `{}`"
+afk_6: "ഞാൻ പോകുന്നു."
+afk_7: "ഞാൻ ഇപ്പോൾ ലഭ്യമല്ല കാരണം {}"
+afk_8: "ഇപ്പോൾ ലഭ്യമല്ല."
+
+# bot
+alive_1: "**The Ultroid Userbot...**\n\n
+**{}**\n\n
+┏━━━━━━━━━━━━━━━━━━━━━\n
+┣ **ഓണർ** - `{}`\n
+┣ **വേർഷൻ** - `{}`\n
+┣ **അപ്പ് ടൈം** - `{}`\n
+┣ **പൈതോൺ** - `{}`\n
+┣ **ടെലിതോൺ** - `{}`\n
+┣ **ബ്രാഞ്ച്** - `{}`\n
+┗━━━━━━━━━━━━━━━━━━━━━"
+log: "**ഹീറോക്കു** Ultroid ലോഗ്സ്.\nPasted [here]({}) too!"
+ping: "**പോങ്!!** `{}ms`\n**അപ്പ്ടൈം** - `{}`"
+usage: "**⚙️ ഡൈനോ യൂസേജ് ⚙️**:\n\n
+ -> `ഡൈനോ യൂസേജ് ആകെ` **{}**:\n
+ • `{}`**h** `{}`**m**
+**|** [`{}`**%**]\n\n
+ -> `ഈ മാസത്തെ ബാക്കിയുള്ള ഡൈനോ യൂസേജ് കണക്ക്`:\n
+ • `{}`**h** `{}`**m**
+**|** [`{}`**%**]\n\n
+**ആകെയുള്ള ഡിസ്ക്ക് സ്പേസ്: {}\n\n**
+**ഉപയോഗിച്ചിട്ടുള്ള: {} ഫ്രീ: {}\n\n**
+**📊ഡാറ്റ യൂസേജ്📊\n\nഅപ്പ്ലോഡ് :{}\nഡൗണ്:{}\n\n**
+**CPU: {}%\nRAM: {}%\nDISK: {}%**"
+shutdown: "ഗുഡ്ബൈ {}.\n`ഷട്ടിങ് ഡൗണ്..`"
+
+# broadcast
+bd_1: "`ഡാറ്റാബേസിൽ ആഡ് ചെയ്തിട്ടുണ്ട്...`"
+bd_2: "`അഡ്മിൻ ചാനലുകൾ ഡാറ്റാബേസിൽ ആഡ് ചെയ്യുന്നു..`"
+bd_3: "**പൂർത്തിയാക്കി.**\nഈ ചാറ്റുകൾ ഡാറ്റാബേസിൽ മുൻപേ അദ് ആക്കിയിട്ടുണ്ട്: {}\nപുതിയതായി ആഡ് ചെയ്തത്: {}"
+bd_4: "ചാനൽ ആഡ് ആക്കി!"
+bd_5: "`ഡാറ്റാബേസിൽ ആഡ് ആക്കിയിട്ടുണ്ട്!`"
+bd_6: "`ചാനൽ ഡാറ്റാബേസിൽ മുൻപേ ആഡ് ആക്കിയിട്ടുണ്ട്!`"
+
+# carbon
+carbon_1: "പ്രോസസിങ്..."
+carbon_2: "Carbonised by [{}](tg://user?id={})"
+
+# chats
+chats_1: "`പ്രോസസിങ്...`"
+chats_2: "`ഈ ചാറ്റ് ഡിലീറ്റ് ചെയ്യാൻ കഴിയില്ല`"
+chats_3: "`ഞാൻ ഇവിടെ അഡ്മിൻ അല്ല`"
+chats_4: "#Deleted\nDeleted {}"
+chats_5: "നിങ്ങളുടെ ഗ്രൂപ്പ് [{}]({}) വിജയകരമായി ഉണ്ടാക്കിയിരിക്കുന്നു!"
+chats_6: "Join @TeamUltroid"
+chats_6: "നിങ്ങളുടെ ഗ്രൂപ്പ്/ചാനൽ [{}]({}) വിജയകരമായി ഉണ്ടാക്കിയിരിക്കുന്നു!"
+
+# converter
+cvt_1: "ഏതെങ്കിലും മീഡിയ/ഡോക്യുമെന്റ് റിപ്ലൈ ആയി കൊടുക്കുക.."
+cvt_2: "ഫയലിന് കൊടുക്കേണ്ട പേരും ext. അയച്ചു തരിക"
+cvt_3: "`പ്രോസസിങ്..`"
+cvt_4: "ഏതെങ്കിലും മീഡിയ ക്ക് റിപ്ലൈ ആയി കൊടുക്കുക."
+
+# core
+core_1: "മൊഡ്യൂൾ കണ്ടെത്തി"
+core_2: "{}.py use .paste to paste in neko and raw.."
+core_3: "ഒരിക്കൽ കൂടെ അന്വേഷിക്കുക..?"
+core_4: "Module {} Found"
+core_5: "{}.py use .paste to paste in neko and raw.."
+core_6: "മൊഡ്യൂൾ {}.py കണ്ടെത്താനായില്ല "
+core_7: "ഇങ്ങനെ ഒരു മൊഡ്യൂൾ ഇല്ല"
+core_8: "ഈ {}.py പേരിൽ ഒരു മൊഡ്യൂൾ ഇല്ല"
+core_9: "`അണ്ലോഡ് ചെയ്യേണ്ട പ്ലഗ്ഗിന്റെ പേര് അയച്ചു തരിക'"
+core_10: "**അണ്ലോഡ്** `{}` **ചെയ്തിരിക്കുന്നു.**"
+core_11: "**ഒഫീഷ്യൽ പ്ലഗ്ഗിൻസ് അണ്ലോഡ് ചെയ്യാൻ കഴിയില്ല**"
+core_12: "**ഇങ്ങനെ ഒരു പ്ലഗ്ഗിൻ ഇല്ല** `{}`"
+core_13: "`uninstall അക്കേണ്ട പ്ലഗ്ഗിന്റെ പേര് അയച്ചു തരിക`"
+core_14: "**Uɴɪɴsᴛᴀʟʟᴇᴅ** `{}` **Sᴜᴄᴄᴇssғᴜʟʟʏ.**"
+core_15: "**ഒഫീഷ്യൽ പ്ലഗ്ഗിൻസ് Uninstall ആക്കാൻ കഴിയില്ല**"
+core_16: "`ലോഡ് ചെയ്യേണ്ട പ്ലഗ്ഗിന്റെ പേര് അയക്കുക`"
+core_17: "**Sᴜᴄᴄᴇssғᴜʟʟʏ Lᴏᴀᴅᴇᴅ** `{}`"
+core_18: "**ലോഡ് ചെയ്യാൻ കഴിയില്ല** `{}` **കാരണാണ് താഴെ പറയുന്ന error.**\n`{}`"
+
+# fedutils
+sf_1: "മാസ്സ്-ഫെഡ് ബാൻ ആരംഭിക്കുന്നു..."
+sf_2: "`ബാൻ ചെയ്യേണ്ട ആളെ നിർദേശിചിട്ടില്ല!`"
+sf_3: "എന്റെ ഡെവലപ്പർനെ ബാൻ ചെയ്യാൻ നിങ്ങൾക്ക് കഴിയില്ല!!"
+sf_4: "`റോസ് മറുപടി തരുന്നില്ല / അല്ലാ എങ്കിൽ പ്ലഗ്ഗിൻ എന്തോ പ്രശ്നം നേരിടുന്നു`"
+sf_5: "ഓരോ 5 മിനുറ്റ് കൂടുമ്പോൾ മാത്രമേ നിങ്ങൾക്ക് ഫെഡ് കമാൻഡ്സ്സ് ഉപയോഗിക്കാൻ കഴിയു"
+sf_6: "5 മിനുറ്റ് കഴിഞ്ഞു വീണ്ടും ശ്രമിക്കുക."
+sf_7: "ഫെഡ് അഡ്മിൻ ലിസ്റ്റ് എടുക്കാൻ കഴിയുന്നില്ല...വീണ്ടും ശ്രമിക്കുന്നു ({}/3)..."
+sf_8: "Error"
+sf_9: "ഫെഡ് അഡ്മിൻ ലിസ്റ്റ് എടുക്കാൻ സാധിക്കില്ല."
+sf_10: "ഇത്രയും {} ഫെഡുകളിൽ ബാൻ ചെയ്യുന്നു."
+sf_11: "ഫെഡ് ബാൻ ചെയ്യാൻ തന്നിരിക്കുന്ന ഐഡി തെറ്റാണ്."
+sf_12: "{} പൂർത്തിയായി."
+sf_13: "Error കാണുന്നു അതിനാൽ ഫെഡ് അഡ്മിൻ ഫയൽ റിമൂവ് ചെയ്യാൻ കഴിയില്ല.\n{}"
+sf_14: "സൂപ്പർ ഫെഡ് ബാൻ പൂർത്തിയായി.\nTotal Feds - {}.\nപൂർത്തിയായി- {}.\n ബാധിച്ചു {} ഫെഡുകൾ.\n#TB"
+sf_15: "മാസ്സ്-അ ൻഫെഡ് ബാൻ തുടങ്ങുന്നു..."
+sf_16: "സൂപ്പർ അ ൻഫെഡ് ബാൻ പൂർത്തിയായി.\nആകെയുള്ള ഫെഡുകൾ {}.\nപൂർത്തിയായത്{}.\n ബാധിച്ചത്{} ഫെഡുകൾ.\n#TB"
+sf_17: "`ആരുടെയെങ്കിലും മെസ്സേജിന് മറുപടി/റിപ്ലൈ ആയോ ആരുടെയെങ്കിലും ഐഡി വെച്ചോ ഫെഡ് സ്റ്റേറ്സ് പരിശോധിക്കാൻ കഴിയു..`"
+sf_18: " {} ഈ പറയുന്ന ഫെഡുകളിൽ ബാൻ ചെയ്യപ്പെട്ടിരിക്കുന്നു.\n\nവിവരം ശേഖരിച്ചത് Ultroid."
+sf_19: "**Error**\n `അ ൻബ്ലോക്ക് ` @MissRose_Bot `എന്നിട്ട് വീണ്ടും ശ്രമിക്കുക!"
+sf_20: "`വിവരങ്ങൾ ശേഖരിക്കുന്നു...`"
+sf_21: "\n\nഫെഡ് ഇൻഫോ ശേഖരിച്ചത് Ultroid"
+
+# gdrive
+gdrive_1: "`നിങ്ങൾ ഇതിനു മുൻപേ ഗൂഗിൾ ഡ്രൈവും ആയി ഓതറൈസ് ചെയ്തിട്ടുണ്ട്`"
+gdrive_2: "Go [here](https://console.developers.google.com/flows/enableapi?apiid=drive) and get your `GDRIVE_CLIENT_ID` and `GDRIVE_CLIENT_SECRET`\n\n
+Send your GDRIVE_CLIENT_ID and GDRIVE_CLIENT_SECRET as this.\n`GDRIVE_CLIENT_ID GDRIVE_CLIENT_SECRET` seperated with space."
+gdrive_3: "`തന്ന ക്ലിന്റ് ഐഡി തെറ്റാണ്`"
+gdrive_4: "`എന്തോ തെറ്റു സംഭവിച്ചിരിക്കുന്നു. `/auth` എന്നു സെന്റ് ചെയ്യുക.\nഇത് വീണ്ടും സംഭവിച്ചാൽ ഞങ്ങളെ ബന്ധപ്പെടുക `@TheUltroid"
+gdrive_5: "`പൂർത്തിയായി!\nവിജയകരമായി നിങ്ങൾഗൂഗിൾ ഡ്രൈവ് Ultroid Userbot ആയി ബന്ധിപ്പിച്ചു.`"
+gdrive_6: "`Go to `{}` and send ``/auth.`"
+gdrive_7: "**വിജയകരമായി ഗൂഗിൾ ഡ്രൈവിൽ അപ്ലോഡ് ചെയ്തിരിക്കുന്നു:**\n\n[{}]({})"
+
+# pmpermit
+pmperm_1: "ദയവായി ഞാൻ തിരികെ മറുപടി നൽകുന്നത് വരെ കാത്തിരിക്കുക.അല്ലായെങ്കിൽ നിങ്ങളെ ഓട്ടോമാറ്റിക്കായി ബ്ലോക്ക് ചെയ്ത് സ്പാം റിപ്പോർട്ട് ചെയ്യുന്നതാണ്!!"
+pmperm_2: "നിങ്ങൾ എന്റെ മാസ്റ്ററിന്റെ ഇന്ബോസ് സ്പാം ചെയ്യുകയാണ്.ഇത് എനിക്ക് ഇഷ്ടമല്ല."
+pmperm_3: "ആരുടെയെങ്കിലും മെസ്സേജിന് റിപ്ലൈ ആയോ അവർക്ക് pm ചെയ്തോ ഈ കമാൻഡ് പരിശോദിക്കുക."
+
+# updater
+upd_1: "`അപ്ഡേറ്റുകൾക്കായി പരിശോധിക്കുന്നു, ദയവായി കാത്തിരിക്കുക ....`"
+upd_2: "`ക്ഷമിക്കണം .. ചില പ്രശ്നങ്ങൾ കാരണം അപ്ഡേറ്ററിന് തുടരാനാവില്ല.`\n\n**LOGTRACE:**\n"
+upd_3: "**പുതിയ അപ്ഡേറ്റ് ലഭ്യമാണ്: [[{}]]({}/tree/{}):\n\nമാറ്റങ്ങൾ**\n\n{}"
+upd_4: "`ചേഞ്ച്ലോഗ് വളരെ വലുതാണ്, അത് കാണുന്നതിന് ഫയൽ കാണുക.`"
+upd_5: "അപ്ഡേറ്റുചെയ്യാൻ `{}update now` ഉപയോഗിക്കുക."
+upd_6: "{}\n\nഅപ്ഡേറ്റുചെയ്യാൻ `{}update now` ഉപയോഗിക്കുക."
+upd_7: "\n`നിങ്ങളുടെ ബോട്ട്` **അപ്പ്-റ്റു-ഡേറ്റ്** `ആണ്` **[[{}]]({}/tree/{})**\n"
+
+# upload download
+udl_1: "`ഡൌൺലോഡ് ചെയ്യേണ്ട ഫയലിനോ/മീഡിയക്കോ മറുപടി ആയി റിപ്ലൈ ചെയ്യുക..`"
+udl_2: "ഡൌൺലോഡ് പൂർത്തിയായി..\nTo\n`{}`\nin `{}`"
+udl_3: "`ഫയലിന്റെ വഴി പറഞ്ഞു തരിക (എവിടെയാണോ സേവ് ചെയ്യേണ്ടത്)`"
+
+# words
+wrd_1: "**വാക്ക്** - `{}`\n\n**അർത്ഥങ്ങൾ** - \n"
+wrd_2: "**വാക്ക്** - `{}`\n\n**പര്യായങ്ങൾ** - \n"
+wrd_3: "**വാക്ക്** - `{}`\n\n**വിപരീതപദങ്ങൾ** - \n"
+
+# ---------------------------------------------------#
+
+# assisant
+ast_1: "ഏത് API സജ്ജമാക്കണമെന്ന് തിരഞ്ഞെടുക്കുക."
+ast_2: "**remove.bg API**\nEnter your API key from remove.bg.\n\n ഇപ്പോൾ പ്രവർത്തിക്കുന്നത് നിർത്താൻ /cancel ക്ലിക്ക് ചെയ്യുക."
+ast_3: "ഹായ് {}. ഓപ്ഷനുകളിൽ ഒന്ന് തിരഞ്ഞെടുക്കുക!"
diff --git a/strings/strings/mr.yml b/strings/strings/mr.yml
new file mode 100644
index 0000000000..ad575ad2e7
--- /dev/null
+++ b/strings/strings/mr.yml
@@ -0,0 +1,211 @@
+name: Marathi
+natively: मराठी
+
+authors:
+ - Uzumaki_Naruto_XD
+
+# commons
+com_1: "`प्रक्रिया करीत आहे ...`"
+com_2: "`Searching...`"
+# help
+help_1: "`{}` वैध प्लगइन नाही आहे!"
+help_2: "`बॉटने इनलाइन क्वेरीला प्रतिसाद दिला नाही.\n{}restart वापरण्याचा विचार करा`"
+help_3: "`कृपया आपल्या बोटसाठी @Botfather मधून इनलाइन मोड चालू करा`"
+help_4: "अहो, \nआपण बॉट मोडवर आहात. \nबॉट मोड वापरकर्ते थेट मदत घेऊ शकत नाहीत ... \nचॅटमध्ये पुढील पेस्ट कॉपी कर्ण्यसाथी पॉप अप क्लिक करा \n\n `@{} ultd`"
+
+# autopic
+autopic_1: "ओय मला काही मजकूर द्या .."
+autopic_2: "`{}`साठी कोणतेही परिणाम आढळले नाहीत"
+autopic_3: "आपल्या शोधाशी संबंधित संग्रह प्राप्त झाला!:`{}` \nऑटोपिक प्रारंभ करीत आहे !"
+
+# inline
+inline_1: "[उलटरॉईड सपोर्ट ](t.me/ultroidsupport)\n\n
+**{}चा मदत मेनू.\n\n
+प्लगइन्स ~ {}**"
+inline_2: "[उलटरॉईड सपोर्ट ](t.me/ultroidsupport)\n\n
+**{}चा मदत मेनू..\n\n
+अडदोनस ~ {}**"
+inline_3: "[उलटरॉईड सपोर्ट ](t.me/ultroidsupport)\n\n
+**{}चा मदत मेनू.\n\n
+अडदोनस ~ {}\n\n
+हेरोकु मध्ये जा आणि है ऍड करा `ADDONS` Vᴀʀ - Vᴀʟᴜᴇ Tʀᴜᴇ**"
+inline_4: "** हा बोट {} चा आहे\n\nमुख्य मेनू\n\nप्लुगिन्स ~ {}\nअडदोनस ~ {}\nएकूण आज्ञा ~ {}**"
+inline_5: "**मेनू बंद केला आहे**"
+
+# tagnotif
+tagnot_1: "{}नि तुम्हाला टॅग केलाय {} या ग्रुप/pm मध्ये\n\n```{}```\n\n[📨
+संदेश📨]({})"
+tagnot_2: "{}नि तुम्हाला टॅग केलाय {} या ग्रुप/pm मध्ये\n\n [📨
+संदेश📨]({})"
+
+# whisper
+wspr_1: "@{}
+आपल्यासाठी गुप्त संदेश.\n
+वाचल्यानंतर आपला संदेश डिलीट करा.\n
+किंवा पुढील संदेश उपडेट केला जाणार नाही"
+wspr_2: "संदेश हटविला
+"
+
+# afk
+afk_1: "`यापुढे afk नाही\n\n
+{} ~ यासाठी दूर होतो`"
+afk_2: "#AFK\n
+AFK मोड ला खोटे सेट केले आहे.\n
+{} ~ यासाठी दूर होतो`"
+afk_3: "मी सध्या afk आहे .\n
+{} पूर्वी अंतिम वेळी पाहिले.`\n\n
+**कारण:** `{}`"
+afk_4: "`मी सध्या afk आहे .\n\n
+{} पूर्वी अंतिम वेळी पाहिले.`"
+afk_5: "`मास्टर afk चाले .`\n\n
+**कारण:** `{}`"
+afk_6: "मास्टर afk चाले ."
+afk_7: "सध्या AFK कारणास्तव - {}"
+afk_8: "सध्या AFK आहे."
+
+# bot
+alive_1: "**अल्ट्राइड युजरबॉट...**\n\n
+**{}**\n\n
+┏━━━━━━━━━━━━━━━━━━━━━\n
+┣ **मालक** - `{}`\n
+┣ **आवृत्ती** - `{}`\n
+┣ **अपटाइम** - `{}`\n
+┣ **पायथॉन** - `{}`\n
+┣ **टेलिथॉन** - `{}`\n
+┣ **शाखा
+** - `{}`\n
+┗━━━━━━━━━━━━━━━━━━━━━"
+लॉग्स: "**हिरोकु** उलटरॉईड लॉग्स.\nपेस्टेड [इथे]({}) सुधा!"
+पिंग: "**पोंग !!** `{}ms`\n**अपटाइम** - `{}`"
+वापर: "**⚙️ डायनो चा वापर ⚙️**:\n\n
+ -> `डायनो चा वापर` **{}**:\n
+ • `{}`**h** `{}`**m**
+**|** [`{}`**%**]\n\n
+ -> `या महिन्यात डायनो तासांचा कोटा शिल्लक आहे`:\n
+ • `{}`**h** `{}`**m**
+**|** [`{}`**%**]\n\n
+**एकूण डिस्क जागा: {}\n\n**
+**वापरले: {} बाकी: {}\n\n**
+**📊
+डेटा चा वापर📊\n\n
+अपलोड: {}\nडाउनलोड: {}\n\n**
+**
+सीपीयू: {}%\nरॅम: {}%\nडिस्क: {}%**"
+
+बंद: "आठवण असुद्या {}.\n`बंद होत आहे...`"
+
+# broadcast
+bd_1: "`db ला ऍड करत आहे...`"
+bd_2: "`db मध्ये सर्व अॅडमिन चॅनेल जोडण्याचा प्रयत्न करीत आहे...`"
+bd_3: "**Done.**\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 ला जॉईन करा"
+chats_6: "आपले [{}]({}) ग्रुप/चॅनेल नि मला बॉस बनवले!"
+
+# converter
+cvt_1: "कोणत्याही मीडिया / दस्तऐवजाला रिप्लाय द्या."
+cvt_2: "फाईलचे नाव व विएक्स्टेंशन द्या"
+cvt_3: "`प्रक्रिया करत आहे...`"
+cvt_4: "कोणत्याही मीडियाला रिप्लाय द्या."
+
+# core
+core_1: "
+मॉड्यूल मिळाली"
+core_2: "{}.py
+नेको आणि कच्च्या मध्ये पेस्ट करण्यासाठी .paste वापरा.."
+core_3: "पुन्हा शोधू..?"
+core_4: "
+मॉड्यूल {} सापडल"
+core_5: "{}.py नेको आणि कच्च्या मध्ये पेस्ट करण्यासाठी .paste वापरा.."
+core_6: "मॉड्यूल {}.py सापडल नाही"
+core_7: "असे कोणतेही मॉड्यूल नाही आहे"
+core_8: "मॉड्यूल नामित {}.py नाही आहे"
+core_9: "`ज्या प्लगइन ला उनलोड करायचंय त्याचा नाव सांगा`"
+core_10: "**अनलोड केलं** `{}` **यशस्वीरित्य.**"
+core_11: "**आपण अधिकृत प्लगइन अनलोड करू शकत नाही**"
+core_12: "`{}` **नावाचे प्लगइन नाही आहे**"
+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) आणि तुमचे `GDRIVE_CLIENT_ID` आणि`GDRIVE_CLIENT_SECRET` मिळवा\n\nतुमचा GDRIVE_CLIENT_ID आणि GDRIVE_CLIENT_SECRET असे पाठवा.`GDRIVE_CLIENT_ID आणि GDRIVE_CLIENT_SECRET` स्पेसनि वेगळे केले आहे."
+gdrive_3: "`हि चुकीचे क्लायंट ईडी आहे`"
+gdrive_4: "`Sकाहीतरी गडबड झाली
+! `/auth` पुन्हा पाठवा.\nतसे परत झाल्यास इथे संपर्क करा `@TheUltroid"
+gdrive_5: "`यश मिळाले!\nतुम्ही अल्ट्लॉईड यूजरबॉटसह गुगल ड्राइव्ह वापरण्याच्या तयारीत आहात.`"
+gdrive_6: "`{}` ला जा आणि ``/auth.` पाठवा`"
+gdrive_7: "**जी-ड्राइव्हवर यशस्वीरित्या अपलोड केलेली फाइल :**\n\n[{}]({})"
+
+# pmpermit
+pmperm_1: "कृपया मला आरएसपीएनडीची वाट पाहा अन्यकरून तुम्हाला ब्लॉक केले जाईल आणि स्पॅम म्हणून रिपोर्ट केले जाईल!!"
+pmperm_2: "तू माझ्या मास्टरचा पीएमला स्पॅम करत होतास, जे मला आवडलं नाही."
+pmperm_3: "एखाद्याच्या एमएसजीला उत्तर द्या किंवा हा कॉमआण खासगीत ट्राय करा."
+
+# updater
+upd_1: "`अपडेट्स तपासत आहे, कृपया थांबा....`"
+upd_2: "`उप्स... काही समस्यांमुळे अपडेटर चालू शकत नाही.`\n\n**लॉगट्रेस:**\n"
+upd_3: "**नवीन अद्ययावत उपलब्ध [[{}]]({}/ट्री/{}):\n\nचेन्जलॉग**\n\n{}"
+upd_4: "`चेंजलॉग खूपच मोठा आहे, ते पाहण्यासाठी फाइल पहा.`"
+upd_5: "अद्ययावत करण्यासाठी `{}update now` वापरा."
+upd_6: "{}\n\nअद्ययावत करण्यासाठी `{}update now` वापरा."
+upd_7: "\n`तुमची बोट` **अद्ययावत आहे** `यासोबाद` **[[{}]]({}/ट्री/{})**\n"
+
+# upload download
+udl_1: "`फाइल/मीडिया ला डाउनलोड करायचे आहे ते उत्तर द्या..`"
+udl_2: "यशस्वीरित्या डाउनलोड केले..\nTo\n`{}`\nin `{}`"
+udl_3: "`फाइलला विशिष्ट मार्ग द्या`"
+
+# words
+wrd_1: "**शब्द** - `{}`\n\n**अर्थ** - \n"
+wrd_2: "**शब्द** - `{}`\n\n**समानार्थी** - \n"
+wrd_3: "**शब्द** - `{}`\n\n**विरुद्धार्थी** - \n"
+
+# ---------------------------------------------------#
+
+# assisant
+ast_1: "तुम्हाला कोणता API सेट करायचा आहे ते निवडा."
+ast_2: "**remove.bg API**\nremove.bg पासून आपले एपीआय कि प्रविष्ट करा.\n\nऑपरेशन बंद करण्यासाठी वापरा /cancel लिहा."
+ast_3: "हाय {}. कृपया पर्याय ब्राउज करा"
\ No newline at end of file
diff --git a/strings/strings/od.yml b/strings/strings/od.yml
new file mode 100644
index 0000000000..3fd3490845
--- /dev/null
+++ b/strings/strings/od.yml
@@ -0,0 +1,198 @@
+name: Odia
+natively: ଓଡିଆ
+
+authors:
+ - ProgrammingError
+ - Cyrus
+# commons
+com_1: "`ପ୍ରକ୍ରିୟାକରଣ ...`"
+com_2: "`ଖୋଜୁଛି...`"
+# help
+help_1: "`{}` ଗୋଟିଏ valid plugin ନୁହେଁ!"
+help_2: "`ବଟ୍ ଇନଲାଇନ୍ ଜିଜ୍ଞାସାର କୌଣସି ପ୍ରତିକ୍ରିୟା ଦେଇ ନାହିଁ। \ n {} ପୁନ ଆରମ୍ଭଠାରୁ ବ୍ୟବହାର କରି ବିଚାର କରନ୍ତୁ |`"
+help_3: "`ଆପଣଙ୍କ ବଟ ପାଇଁ ଦୟାକରି ଇନଲାଇନ ମୋଡ୍ ଟର୍ନ୍ ଅନ୍ କରନ୍ତୁ` @Botfather."
+help_4: "ଆରେ, \ n ଆପଣ ବଟ୍ ମୋଡ୍ ରେ ଅଛନ୍ତି। \ n ବଟ୍ ମୋଡ୍ ବ୍ୟବହାରକାରୀମାନେ ସିଧାସଳଖ ସହାୟତା ପାଇପାରିବେ ନାହିଁ ... \ n ଇନଷ୍ଟେଡ୍ ଚାଟ୍ ରେ ନିମ୍ନୋକ୍ତ କପି ପେଷ୍ଟ କରନ୍ତୁ ଏବଂ ପପ୍ ଅପ୍ କ୍ଲିକ୍ କରନ୍ତୁ \ n \ n` @ {} ultd` "
+
+# autopic
+autopic_1: "ହେୟା ମୋତେ କିଛି ଶବ୍ଦ ଦିଅ .."
+autopic_2: "କୌଣସି ଫଳାଫଳ ମିଳିଲା ନାହିଁ `{}`"
+autopic_3: "ତୁମର ସନ୍ଧାନ ସହିତ ଜଡିତ ଏକ ସଂଗ୍ରହ} {} ପାଇଛି !\nଅଟୋପିକ୍ ଆରମ୍ଭ ହାଉଚି !"
+
+# inline
+inline_1: "[ଅଲ୍ଟ୍ରଏଡ୍ ସମର୍ଥନ](t.me/ultroidsupport)\n\n
+**ସାହାଯ୍ୟ ମେନୁ {}.\n\n
+ପ୍ଲଗଇନ୍ସ ~ {}**"
+inline_2: "[ଅଲ୍ଟ୍ରଏଡ୍ ସମର୍ଥନ](t.me/ultroidsupport)\n\n
+**ସାହାଯ୍ୟ ମେନୁ {}.\n\n
+ଆଡନ୍ସ ~ {}**"
+inline_3: "[ଅଲ୍ଟ୍ରଏଡ୍ ସମର୍ଥନ](t.me/ultroidsupport)\n\n
+**ସାହାଯ୍ୟ ମେନୁ {}.\n\n
+ଆଡନ୍ସ ~ {}\n\n
+ଯାଅ ଏବଂ ଯୋଗ କରନ୍ତୁ `ADDONS` Vᴀʀ ଏବଂ Vᴀʟᴜᴇ `Tʀᴜᴇ` କରନ୍ତୁ**"
+inline_4: "** {} ର ବଟ୍\n\nମୁଖ୍ୟ ମେନୁ\n\nପ୍ଲଗଇନ୍ ~ {}\nଆଡନ୍ସ ~ {}\nସମୁଦାୟ Cᴏᴍᴍᴀɴᴅs ~ {}**"
+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: "`ଆଉ ଅଫଲାଇନ୍(AFK) ନୁହେଁ |\n\n
+ସମୟ ପାଇଁ ଅଫଲାଇନ୍(AFK) ଥିଲେ ~ {}`"
+afk_2: "`#AFK\n
+AFK ବନ୍ଦ ମୋଡ୍ ସେଟ୍.\n
+ସମୟ ପାଇଁ ଅଫଲାଇନ୍ ଥିଲେ {}`"
+afk_3: "ମୁଁ ବର୍ତ୍ତମାନ ଅଫଲାଇନ୍(AFK) ଅଛି |.\n
+ଶେଷ ଥର ପୂର୍ବରୁ ଦେଖାଯାଇଛି `{}` .\n\n
+**କାରଣ:** `{}`"
+afk_4: "`ମୁଁ ବର୍ତ୍ତମାନ ଅଫଲାଇନ୍(AFK) ଅଛି |ല.\n
+ଶେଷ ଥର ପୂର୍ବରୁ ଦେଖାଯାଇଛି {} |`"
+afk_5: "`ଅଫଲାଇନ୍(AFK) ଯାଉଛି |`\n\n
+**କାରଣ:** `{}`"
+afk_6: "ମୁଁ ଅଫଲାଇନ୍(AFK) ଯାଉଛି |"
+afk_7: "ବର୍ତ୍ତମାନ ଅଫଲାଇନ୍(AFK) ଅଛି | କାରଣ:{}"
+afk_8: "ବର୍ତ୍ତମାନ ଅଫଲାଇନ୍େ(AFK) ଅଛି |"
+
+# alive
+alive_1: "**The Ultroid userbot...**\n\n
+**{}**\n
+┏━━━━━━━━━━━━━━━━━━━━━\n
+┣ **ମାଲିକ**- `{}`\n
+┣ **ସଂସ୍କରଣ** - `{}`\n
+┣ **ଅପ୍ ଟାଇମ୍** - `{}`\n
+┣ **ପାଇଥନ୍** - `{}`\n
+┣ **ଟେଲିଥନ୍**- `{}`\n
+┣ **ଶାଖା** - `{}`\n
+┗━━━━━━━━━━━━━━━━━━━━━"
+
+log: "**ହିରୋକୁ ** ଇଲେକ୍ଟ୍ରୋଏଡ୍ ଲଗ୍।\n[ଏଠାରେ]({}) ମଧ୍ୟ ଲେପନ ହୋଇଛି!"
+ping: "**ପଙ୍ଗ !!** `{}ms`\n**ଅପ୍ ଟାଇମ୍** - `{}`"
+usage: "**⚙️ ଡାଇନୋ ବ୍ୟବହାର ⚙️**:\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: "Carbonised by [{}](tg://user?id={})"
+
+# chats
+chats_1: "`ପ୍ରକ୍ରିୟାକରଣ...`"
+chats_2: "`ଏହି ଚାଟ୍ ଡିଲିଟ୍ ହୋଇପାରିବ ନାହିଁ`"
+chats_3: "`ମୁଁ ଏକ ଆଡମିନ ନୁହେଁ`"
+chats_4: "#Deleted\nDeleted {}"
+chats_5: "ଆପଣଙ୍କର ଗୋଷ୍ଠୀ [{}]({}) ସଫଳତାର ସହିତ ସୃଷ୍ଟି ହୋଇଛି!"
+chats_6: "@TeamUltroid ରେ ଯୋଗ ଦିଅନ୍ତୁ"
+chats_6: "ତୁମର ଗୋଷ୍ଠୀ / ଚ୍ୟାନେଲ [{}]({}) ସଫଳତାର ସହିତ ସୃଷ୍ଟି ହୋଇଛି!"
+
+# converter
+cvt_1: "ଉତ୍ତର ଭାବରେ ଯେକୌଣସି ମିଡିଆ / ଡକ୍ୟୁମେଣ୍ଟ ଦିଅନ୍ତୁ|"
+cvt_2: "ଫାଇଲ୍ ର ନାମ ଏବଂ ଏକ୍ସଟେନ୍ସନ୍ ଦିଅନ୍ତୁ"
+cvt_3: "`ପ୍ରକ୍ରିୟାକରଣ...`"
+cvt_4: "ଉତ୍ତର ଭାବରେ ଯେକୌଣସି ମିଡିଆ ଦିଅନ୍ତୁ|"
+
+# core
+core_1: "ମଡ୍ୟୁଲ୍ ମିଳିଲା"
+core_2: "{}.py କୁ nekobin ଏବଂ raw ରେ ପେଷ୍ଟ କରିବାକୁ .paste ବ୍ୟବହାର କରନ୍ତୁ.."
+core_3: "ପୁନର୍ବାର ଖୋଜନ୍ତୁ..?"
+core_4: "ମଡ୍ୟୁଲ୍ {} ମିଳିଲା"
+core_5: "{}.py କୁ nekobin ଏବଂ raw ରେ ପେଷ୍ଟ କରିବାକୁ .paste ବ୍ୟବହାର କରନ୍ତୁ.."
+core_6: "ମଡ୍ୟୁଲ୍ {}.py ମିଳିଲା ନାହିଁ"
+core_7: "ଏପରି କିଛି ମଡ୍ୟୁଲ୍ ନାହିଁ"
+core_8: "{}.py ନାମିତ କୌଣସି ମଡ୍ୟୁଲ୍ ମିଳିଲା ନାହିଁ"
+core_9: "`ମଡ୍ୟୁଲ୍ ର ନାମ ଦିଅନ୍ତୁ ଯାହାକୁ ଆପଣ ଅନଲୋଡ୍ କରିବାକୁ ଚାହୁଁଛନ୍ତି`"
+core_10: "**ସଫଳତାର ସହିତ** `{}` **ଅନଲୋଡ୍ ହୋଇଛି|**"
+core_11: "**ଆପଣ ଅଫିସିଆଲ୍ ମଡ୍ୟୁଲ୍ ଅନଲୋଡ୍ କରିପାରିବେ ନାହିଁ **"
+core_12: "`{}` **ନାମିତ କୌଣସି ମଡ୍ୟୁଲ୍ ମିଳିଲା ନାହିଁ**"
+core_13: "`ମଡ୍ୟୁଲ୍ ର ନାମ ଦିଅନ୍ ଯାହାକୁ ଆପଣ ସଂସ୍ଥାପନ କରିବାକୁ ଚାହୁଁଛନ୍ତି`"
+core_14: "**ସଫଳତାର ସହିତ** `{}` **ସଂସ୍ଥାପିତ ହୋଇଛି|**"
+core_15: "**ଆପଣ ଅଫିସିଆଲ୍ ମଡ୍ୟୁଲ୍ ସଂସ୍ଥାପନ କରିପାରିବେ ନାହିଁ**"
+core_16: "`ମଡ୍ୟୁଲ୍ ର ନାମ ଦିଅନ୍ ଯାହାକୁ ଆପଣ ଲୋଡ୍ କରିବାକୁ ଚାହୁଁଛନ୍ତି`"
+core_17: "**ସଫଳତାର ସହିତ ଲୋଡ୍ ହୋଇଛି** `{}`"
+core_18: "**ନିମ୍ନଲିଖିତ ତ୍ରୁଟି ହେତୁ {} ଲୋଡ୍ ହୋଇପାରିଲା ନାହିଁ |**\n`{}`"
+
+# fedutils
+sf_1: "ଏକ ସମୂହ-ଫେଡବ୍ୟାନ ଆରମ୍ଭ ହେଉଛି..."
+sf_2: "`କୌଣସି ଉପଭୋକ୍ତା ନିଯୁକ୍ତ ନୁହଁନ୍ତି!`"
+sf_3: "ତୁମେ ମୋର ବିକାଶକାରୀଙ୍କୁ ବ୍ୟାନ କରିପାରିବ ନାହିଁ!!"
+sf_4: "`ମନେହେଉଛି Rose Bot ପ୍ରତିକ୍ରିୟା କରୁନାହିଁ, କିମ୍ବା, ପ୍ଲଗଇନ୍ ସଠିକ୍ ଭାବରେ କାମ କରୁନାହିଁ`"
+sf_5: "ପ୍ରତି 5 ମିନିଟରେ ଆପଣ କେବଳ ଫେଡ଼ କମାଣ୍ଡ୍ ବ୍ୟବହାର କରିପାରିବେ"
+sf_6: "5 ମିନିଟ୍ ପରେ ପୁନର୍ବାର ଚେଷ୍ଟା କରନ୍ତୁ|"
+sf_7: "FedAdminList ସଂଗ୍ରହ କରିବାରେ ଅସମର୍ଥ. ପୁନର୍ବାର ଚେଷ୍ଟା କରୁଛୁ ({}/3)..."
+sf_8: "ତ୍ରୁଟି"
+sf_9: "FedAdminList ସଂଗ୍ରହ କରିବାରେ ଅସମର୍ଥ|"
+sf_10: "FBaning in {} feds."
+sf_11: "ନିର୍ଦ୍ଦିଷ୍ଟ FBan Group ID ଭୁଲ ଅଟେ."
+sf_12: "{} ବାଦ ଦିଆଯାଇଛି|"
+sf_13: "FedAdmin ଫାଇଲ୍ ଡିଲିଟ୍ କରିବାରେ ତ୍ରୁଟି|\n{}"
+sf_14: "SuperFBan ସମାପ୍ତ.\nସମୁଦାୟ Feds - {}.\nବାଦ ଦିଆଯାଇଛି - {}.\n ପ୍ରଭାବିତ {} feds.\n#TB"
+sf_15: "ଏକ ସମୂହ-ଅନଫେଡ଼ବ୍ୟାନ ଆରମ୍ଭ ହେଉଛି..."
+sf_16: "SuperUnFBan ସମାପ୍ତ.\nସମୁଦାୟ Feds - {}.\nବାଦ ଦିଆଯାଇଛି - {}.\n ପ୍ରଭାବିତ {} feds.\n#TB"
+sf_17: "`ମୋତେ କିଛି ID ଦିଅ, କିମ୍ବା ତାଙ୍କ fedstat ଯାଞ୍ଚ କରିବାକୁ କିଛି ବାର୍ତ୍ତାକୁ ଉତ୍ତର ଦିଅ`"
+sf_18: "ନିମ୍ନଲିଖିତ Feds ରେ {} ବ୍ୟାନ ହୋଇଛନ୍ତି.\n\nUltroid ବ୍ୟବହାର କରି ସଂଗୃହିତ|"
+sf_19: "**Error**\n @MissRose_Bot `କୁ ଅନାବରଣ କରନ୍ତୁ ଏବଂ ପୁର୍ନବାର ଚେଷ୍ଟା କରନ୍ତୁ!`"
+sf_20: "`ସୂଚନା ବାହାର କରାଯାଉଛି...`"
+sf_21: "\n\nFedInfo Ultroid ଦ୍ୱାରା ବାହାର କରାଯାଇଛି"
+
+# gdrive
+gdrive_1: "`ଆପଣ ଗୁଗୁଲ୍ ଡ୍ରାଇଭ୍ ସହିତ ପୂର୍ବରୁ ପ୍ରାଧିକୃତ ହୋଇସାରିଛନ୍ତି`"
+gdrive_2: "[ଏଠାରେ](https://console.developers.google.com/flows/enableapi?apiid=drive) ଯାଆନ୍ତୁ ଏବଂ ଆପଣଙ୍କର `GDRIVE_CLIENT_ID` ଏବ `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: "`ସଫଳତା!\nUltroid Userbot ସହିତ ଗୁଗୁଲ୍ ଡ୍ରାଇଭ୍ ବ୍ୟବହାର କରିବାକୁ ଆପଣ ପୂର୍ଣ୍ଣ ପ୍ରସ୍ତୁତ ଅଛନ୍ତି.`"
+gdrive_6: "`{}` କୁ ଯାଆନ୍ତୁ ଏବଂ `/auth.` ପଠାନ୍ତୁ|"
+gdrive_7: "**ସଫଳତାର ସହିତ G-Drive ରେ ଫାଇଲ୍ ଅପଲୋଡ୍ ହୋଇଗଲା:**\n\n[{}]({})"
+
+# pmpermit
+pmperm_1: "ଦୟାକରି ମୋ ପ୍ରତିକ୍ରିୟା ପାଇଁ ଅପେକ୍ଷା କରନ୍ତୁ କିମ୍ବା ଆପଣ ଅବରୋଧ ହୋଇ ସ୍ପାମ୍ ଭାବରେ ରିପୋର୍ଟ ହେବେ |!"
+pmperm_2: "ତୁମେ ମୋର ଗୁରୁଙ୍କ PM କୁ ସ୍ପାମ୍ କରୁଥିଲ, ଯାହା ମୁଁ ପସନ୍ଦ କରେ ନାହିଁ."
+pmperm_3: "କାହାର ବାର୍ତ୍ତା କୁ ରିପ୍ଲାଏ କରନ୍ତୁ କିମ୍ବା PM ରେ ଏହି କମାଣ୍ଡ୍ ବ୍ୟବହାର କରନ୍ତୁ."
+
+# updater
+upd_1: "`ନୂତନ ଅଦ୍ୟତନ ପାଇଁ ଯାଞ୍ଚ କରୁଛି, ଦୟାକରି ଅପେକ୍ଷା କରନ୍ତୁ...`"
+upd_2: "`ଓହୋ.. କିଛି ସମସ୍ୟା ହେତୁ ଅପଡେଟର୍ ଜାରି ହୋଇପାରିବ ନାହିଁ.`\n\n**LOGTRACE:**\n"
+upd_3: "**[[{}]]({}/tree/{}) ପାଇଁ ନୂତନ ଅଦ୍ୟତନ ଉପଲବ୍ଧ:\n\nCHANGELOG**\n\n{}"
+upd_4: "`Changelog ବହୁତ ବଡ ଅଟେ, ଏହାକୁ ଦେଖିବା ପାଇଁ ନିମ୍ନଲିଖିତ ଫାଇଲଟି କୁ ଦେଖନ୍ତୁ|`"
+upd_5: "ଅଦ୍ୟତନ କରିବାକୁ `{}update now` ବ୍ୟବହାର କରନ୍ତୁ |"
+upd_6: "{}\n\nଅଦ୍ୟତନ କରିବାକୁ `{}update now` ବ୍ୟବହାର କରନ୍ତୁ"
+upd_7: "\n`ଆପଣଙ୍କର BOT` **[[{}]]({}/tree/{})** `ସହିତ` **up-to-date**\n"
+
+# upload download
+udl_1: "`ଆପଣ ଡାଉନଲୋଡ୍ କରିବାକୁ ଚାହୁଁଥିବା ଫାଇଲ୍ / ମିଡିଆକୁ ରିପ୍ଲାଏ କରନ୍ତୁ...`"
+udl_2: "ସଫଳତାର ସହିତ ଡାଉନଲୋଡ୍ ହୋଇଛି..\nTo\n`{}`\nin `{}`"
+udl_3: "`ଫାଇଲ୍ ର ଏକ ନିର୍ଦ୍ଦିଷ୍ଟ ପାଥ ଦିଅନ୍ତୁ`"
+
+# words
+wrd_1: "**ଶବ୍ଦ** - `{}`\n\n**ଅର୍ଥ** - \n"
+wrd_2: "**ଶବ୍ଦ** - `{}`\n\n**ସମବାୟ ଶବ୍ଦ** - \n"
+wrd_3: "**ଶବ୍ଦ** - `{}`\n\n**ବିପରୀତ ଶବ୍ଦ** - \n"
+
+# ---------------------------------------------------#
+
+# assisant
+ast_1: "ଆପଣ କେଉଁ API ସେଟ୍ କରିବାକୁ ଚାହୁଁଛନ୍ତି ତାହା ବାଛନ୍ତୁ|"
+ast_2: "**remove.bg API**\n remove.bg ରୁ ଆପଣଙ୍କର API କି ପ୍ରବେଶ କରନ୍|ତୁ\n\nଅପରେସନ୍ ବନ୍ଦ କରିବାକୁ ବ୍ୟବହାର /cancel କରନ୍ତୁ|"
+ast_3: "ନମସ୍କାର {}| ଦୟାକରି ବିକଳ୍ପଗୁଡିକ ମଧ୍ୟରେ ବ୍ରାଉଜ୍ କରନ୍ତୁ"
+
+
+
diff --git a/strings/strings/ta.yml b/strings/strings/ta.yml
new file mode 100644
index 0000000000..8ef527b29e
--- /dev/null
+++ b/strings/strings/ta.yml
@@ -0,0 +1,22 @@
+name: Tamil
+natively: தமிழ்
+
+authors:
+ - sppidy
+
+# commons
+com_1: "`காத்திரு...`"
+
+# help
+help_1: "`{}` சரியான Plugin அல்ல!"
+help_2: "`இன்லைன் வினவலுக்கு Bot பதிலளிக்கவில்லை.\n{}restart பயன்படுத்துவதைக் கருத்தில் கொள்ளுங்கள்`"
+help_3: "`உங்கள் போட் இன்லைன் பயன்முறையை` @Botfather `வழியாக இயக்கவும்`."
+help_4: "தங்கள் Bot பயன்முறையில் இருப்பதால் தங்களுக்கு நேரடியாக உதவி கிடைக்காது.... \nஅதற்கு பதிலாக அரட்டையில் பின்வரும்வற்றை நகலெடுக்கவும் மற்றும் Pop Upஐ கிளிக் செய்க \n\n `@{} ultd`"
+
+# autopic
+autopic_1: "எனக்கு சில வார்த்தைகளை கொடுங்கள் .."
+autopic_2: "`{}` இக்கு முடிவுகள் எதுவும் கிடைக்கவில்லை"
+autopic_3: "உங்கள் தேடுளளான `{}` தோகுப்பு கிடைத்தது !\nAutopic ஆறாம்பிக்கிறது !"# inline
+
+
+