Ultroid v0.5 Updates

Co-authored-by: Amit Sharma <48654350+buddhhu@users.noreply.github.com>
Co-authored-by: Aditya <xditya@ultroid.tech>
Co-authored-by: Kaif <88398455+kaif-00z@users.noreply.github.com>
Co-authored-by: Aditya <me@xditya.me>
Co-authored-by: 1Danish-00 <danish@ultroid.tech>
Co-authored-by: smartman_ru <bblkovo@gmail.com>
This commit is contained in:
Devesh Pal
2022-03-19 19:27:54 +00:00
committed by GitHub
parent f106c48423
commit 90ad5646ff
81 changed files with 1630 additions and 927 deletions

View File

@@ -7,7 +7,7 @@ staleLabel: inactive
# Comment to post when marking an issue as stale. Set to `false` to disable
markComment: >
This issue has been automatically marked as stale because it has not had
recent activity. It will be closed if no further activity occurs. Thank you
any recent activity. It will be closed if no further activity occurs. Thank you
for your contributions.
# Comment to post when closing a stale issue. Set to `false` to disable
closeComment: false
closeComment: false

1
.gitignore vendored
View File

@@ -2,6 +2,7 @@
*.session-journal
*.session
build
test*
*.mp3
*.webm
*.webp

View File

@@ -48,7 +48,7 @@ Get the [Necessary Variables](#Necessary-Variables) and then click the button be
### Local Deploy - Easy Method
- Linux - `wget -O locals.py https://git.io/JY9UM && python3 locals.py`
- Windows - `cd desktop ; wget https://git.io/JY9UM -o locals.py ; python locals.py`
- Termux - `wget -O locals.py https://git.io/JY9UM && python locals.py`
- Termux - `wget -O install-termux https://tiny.ultroid.tech/termux && bash install-termux`
### Local Deploy - Traditional Method
- Get your [Necessary Variables](#Necessary-Variables)

View File

@@ -7,10 +7,10 @@
from pyUltroid import *
from pyUltroid import _ult_cache
from pyUltroid._misc import owner_and_sudos
from pyUltroid._misc._assistant import asst_cmd, callback, in_pattern
from pyUltroid.functions.helper import *
from pyUltroid.functions.tools import get_stored_file
from pyUltroid.misc import owner_and_sudos
from pyUltroid.misc._assistant import asst_cmd, callback, in_pattern
from telethon import Button, custom
from plugins import ATRA_COL

View File

@@ -15,7 +15,11 @@ from os import execl, remove
from random import choice
from bs4 import BeautifulSoup as bs
from pyUltroid.functions.gDrive import GDriveManager
try:
from pyUltroid.functions.gDrive import GDriveManager
except ImportError:
GDriveManager = None
from pyUltroid.functions.helper import fast_download, progress, uploader
from pyUltroid.functions.tools import (
Carbon,
@@ -33,7 +37,7 @@ from . import *
# --------------------------------------------------------------------#
telegraph = telegraph_client()
GDrive = GDriveManager()
GDrive = GDriveManager() if GDriveManager else None
# --------------------------------------------------------------------#
@@ -1306,4 +1310,4 @@ async def fdroid_dler(event):
if msg and hasattr(msg, "media"):
FD_MEDIA.update({uri: msg.media})
os.remove(thumb)
os.remove(file)
os.remove(file)

View File

@@ -20,10 +20,17 @@ import uuid
from html import unescape
from random import choice, shuffle
import akinator
from . import LOGS
try:
import akinator
except ImportError:
akinator = None
LOGS.error("'akinator' not installed.")
from pyUltroid._misc._decorators import ultroid_cmd
from pyUltroid.functions.helper import inline_mention
from pyUltroid.functions.tools import async_searcher
from pyUltroid.misc._decorators import ultroid_cmd
from telethon.errors.rpcerrorlist import (
BotMethodInvalidError,
ChatSendStickersForbiddenError,
@@ -41,6 +48,8 @@ aki_photo = "https://telegra.ph/file/3cc8825c029fd0cab9edc.jpg"
@ultroid_cmd(pattern="akinator")
async def akina(e):
if not akinator:
return
sta = akinator.Akinator()
games.update({e.chat_id: {e.id: sta}})
try:

View File

@@ -6,6 +6,7 @@
# <https://www.github.com/TeamUltroid/Ultroid/blob/main/LICENSE/>.
import base64
import inspect
from datetime import datetime
from random import choice
from re import compile as re_compile
@@ -20,6 +21,7 @@ from pyUltroid.functions.tools import (
webuploader,
)
from telethon import Button
from telethon.tl.alltlobjects import LAYER, tlobjects
from telethon.tl.types import DocumentAttributeAudio as Audio
from telethon.tl.types import InputWebDocument as wb
@@ -158,7 +160,7 @@ async def _(e):
filename = filename.split("/")[-1]
await e.edit(f"Uploading `{filename}` on {host}")
link = (await webuploader(chat_id, msg_id, host)).strip().replace("\n", "")
await e.edit(f"Uploaded [{filename}]({link}) on {host}.")
await e.edit(f"Uploaded `{filename}` on {host}.", buttons=Button.url("View", link))
@in_pattern("repo", owner=True)
@@ -688,3 +690,197 @@ async def savn_s(event):
)
await event.answer(res, switch_pm=swi, switch_pm_param="start")
_savn_cache.update({query: res})
_OMG = {}
@in_pattern("omgu", owner=True)
async def omgubuntu(ult):
try:
match = ult.text.split(maxsplit=1)[1].lower()
except IndexError:
return await ult.answer(
[], switch_pm="Enter Query to search...", switch_pm_param="start"
)
if _OMG.get(match):
return await ult.answer(
_OMG[match], switch_pm="OMG Ubuntu Search :]", switch_pm_param="start"
)
get_web = "https://www.omgubuntu.co.uk/?s=" + match.replace(" ", "+")
get_ = await async_searcher(get_web, re_content=True)
BSC = bs(get_, "html.parser", from_encoding="utf-8")
res = []
for cont in BSC.find_all("div", "sbs-layout__item"):
img = cont.find("div", "sbs-layout__image")
url = img.find("a")["href"]
src = img.find("img")["src"]
con = cont.find("div", "sbs-layout__content")
tit = con.find("a", "layout__title-link")
title = tit.text.strip()
desc = con.find("p", "layout__description").text.strip()
text = f"[{title.strip()}]({url})\n\n{desc}"
img = wb(src, 0, "image/jpeg", [])
res.append(
await ult.builder.article(
title=title,
type="photo",
description=desc,
url=url,
text=text,
buttons=Button.switch_inline(
"Search Again", query=ult.text, same_peer=True
),
include_media=True,
content=img,
thumb=img,
)
)
await ult.answer(
res,
switch_pm=f"Showing {len(res)} results!" if res else "No Results Found :[",
switch_pm_param="start",
)
_OMG[match] = res
@in_pattern("tl", owner=True)
async def inline_tl(ult):
try:
match = ult.text.split(maxsplit=1)[1]
except IndexError:
text = f"**It is Telegram TlObjects Searcher.**\n__(Don't use if you don't know what it is!)__\n\n• Example Usage\n`@{asst.me.username} tl GetUserRequest`"
return await ult.answer(
[
await ult.builder.article(
title="How to Use?",
description="Tl Searcher by Ultroid",
url="https://t.me/TheUltroid",
text=text,
)
],
switch_pm="Tl Search 🔍",
switch_pm_param="start",
)
res = []
for key in tlobjects.values():
if match.lower() in key.__name__.lower():
tyyp = "Function" if "tl.functions." in str(key) else "Type"
text = f"**Name:** `{key.__name__}`\n"
text += f"**Category:** `{tyyp}`\n"
text += f"\n`from {key.__module__} import {key.__name__}`\n\n"
args = str(inspect.signature(key))[1:][:-1]
if args:
text += "**Parameter:**\n"
for para in args.split(","):
text += " " * 4 + "`" + para + "`\n"
text += f"\n**Layer:** `{LAYER}`"
res.append(
await ult.builder.article(
title=key.__name__,
description=tyyp,
url="https://t.me/TheUltroid",
text=text[:4000],
)
)
if not res:
mo = f"No Results for {match}!"
else:
mo = f"Showing {len(res)} results!"
await ult.answer(res[:50], switch_pm=mo, switch_pm_param="start")
@in_pattern("gh", owner=True)
async def gh_feeds(ult):
try:
username = ult.text.split(maxsplit=1)[1]
except IndexError:
return await ult.answer(
[],
switch_pm="Enter Github Username to see feeds...",
switch_pm_param="start",
)
if not username.endswith("."):
return await ult.answer(
[], switch_pm="End your query with . to search...", switch_pm_param="start"
)
username = username[:-1]
data = await async_searcher(
f"https://api.github.com/users/{username}/events", re_json=True
)
if not isinstance(data, list):
msg = ""
for ak in list(data.keys()):
msg += ak + ": `" + data[ak] + "`\n"
return await ult.answer(
[
await ult.builder.article(
title=data["message"], text=msg, link_preview=False
)
],
cache_time=300,
switch_pm="Error!!!",
switch_pm_param="start",
)
res = []
res_ids = []
for cont in data[:50]:
text = f"<b><a href='https://github.com/{username}'>@{username}</a></b>"
title = f"@{username}"
extra = None
if cont["type"] == "PushEvent":
text += " pushed in"
title += " pushed in"
dt = cont["payload"]["commits"][-1]
url = "https://github.com/" + dt["url"].split("/repos/")[-1]
extra = f"\n-> <b>message:</b> <code>{dt['message']}</code>"
elif cont["type"] == "IssueCommentEvent":
title += " commented at"
text += " commented at"
url = cont["payload"]["comment"]["html_url"]
elif cont["type"] == "CreateEvent":
title += " created"
text += " created"
url = "https://github.com/" + cont["repo"]["name"]
elif cont["type"] == "PullRequestEvent":
if (
cont["payload"]["pull_request"].get("user", {}).get("login")
!= username.lower()
):
continue
url = cont["payload"]["pull_request"]["html_url"]
text += " created a pull request in"
title += " created a pull request in"
elif cont["type"] == "ForkEvent":
text += " forked"
title += " forked"
url = cont["payload"]["forkee"]["html_url"]
else:
continue
repo = cont["repo"]["name"]
repo_url = "https://github.com/" + repo
title += " " + repo
text += f" <b><a href='{repo_url}'>{repo}</a></b>"
if extra:
text += extra
thumb = wb(cont["actor"]["avatar_url"], 0, "image/jpeg", [])
article = await ult.builder.article(
title=title,
text=text,
url=repo_url,
parse_mode="html",
link_preview=False,
thumb=thumb,
buttons=[
Button.url("View", url),
Button.switch_inline("Search again", query=ult.text, same_peer=True),
],
)
if article.id not in res_ids:
res_ids.append(article.id)
res.append(article)
if res:
msg = f"Showing {len(res)} feeds!"
else:
msg = "Nothing Found"
await ult.answer(res, cache_time=5000, switch_pm=msg, switch_pm_param="start")

View File

@@ -5,7 +5,7 @@
# PLease read the GNU Affero General Public License in
# <https://www.github.com/TeamUltroid/Ultroid/blob/main/LICENSE/>.
from pyUltroid._misc._decorators import ultroid_cmd
from pyUltroid.functions.helper import inline_mention
from pyUltroid.misc._decorators import ultroid_cmd
from .. import *

View File

@@ -7,7 +7,7 @@
import random
from pyUltroid.functions.misc import create_quotly
from pyUltroid.functions.misc import Quotly
from pyUltroid.functions.tools import TgConverter
from telethon import errors
from telethon.errors.rpcerrorlist import StickersetInvalidError
@@ -54,7 +54,7 @@ async def kang_cmd(ult):
image = TgConverter.resize_photo_sticker(dl)
image.save(name, "WEBP")
elif reply.text:
dl = await create_quotly(reply)
dl = await Quotly().create_quotly(reply)
else:
return await ult.eor("`Reply to sticker or text to add it in your pack...`")
if not emoji:

View File

@@ -8,9 +8,9 @@
from datetime import datetime
from pytz import timezone as tz
from pyUltroid._misc import SUDO_M, owner_and_sudos
from pyUltroid.dB.asst_fns import *
from pyUltroid.functions.helper import inline_mention
from pyUltroid.misc import SUDO_M, owner_and_sudos
from telethon import Button, events
from telethon.errors.rpcerrorlist import MessageDeleteForbiddenError
from telethon.utils import get_display_name

12
docker-compose.yml Normal file
View File

@@ -0,0 +1,12 @@
version: "3.9"
services:
worker:
build: .
environment:
REDIS_URI: $REDIS_URI
REDIS_PASSWORD: $REDIS_PASSWORD
SESSION: $SESSION
API_ID: $API_ID # defaults to None
API_HASH: $API_HASH # defaults to None
MONGO_URI: $MONGO_URI # defaults to None
DATABASE_URL: $DATABASE_URL # defaults to None

16
install-termux Normal file
View File

@@ -0,0 +1,16 @@
#!/usr/bin/env bash
# Ultroid - UserBot
# Copyright (C) 2021-2022 TeamUltroid
#
# This file is a part of < https://github.com/TeamUltroid/Ultroid/ >
# PLease read the GNU Affero General Public License in <https://www.github.com/TeamUltroid/Ultroid/blob/main/LICENSE/>.
if [ -d "resources" ]
then
echo "Current directory Identified.."
else
apt install git -y
git clone https://github.com/TeamUltroid/Ultroid
cd Ultroid
fi
bash resources/startup/termux.sh

View File

@@ -11,15 +11,16 @@ import os
import time
from random import choice
import requests
from pyUltroid import *
from pyUltroid._misc._assistant import asst_cmd, callback, in_pattern
from pyUltroid._misc._decorators import ultroid_cmd
from pyUltroid._misc._wrappers import eod, eor
from pyUltroid.dB import DEVLIST, ULTROID_IMAGES
from pyUltroid.functions.helper import *
from pyUltroid.functions.info import *
from pyUltroid.functions.misc import *
from pyUltroid.functions.tools import *
from pyUltroid.misc._assistant import asst_cmd, callback, in_pattern
from pyUltroid.misc._decorators import ultroid_cmd
from pyUltroid.misc._wrappers import eod, eor
from pyUltroid.version import __version__, ultroid_version
from telethon import Button, events
from telethon.tl import functions, types
@@ -28,6 +29,7 @@ from strings import get_string
Redis = udB.get_key
con = TgConverter
quotly = Quotly()
OWNER_NAME = ultroid_bot.full_name
OWNER_ID = ultroid_bot.uid

View File

@@ -36,7 +36,7 @@ async def Function(event):
async def DummyHandler(ult):
# clean chat actions
# clean chat actions
key = udB.get_key("CLEANCHAT") or []
if ult.chat_id in key:
try:

View File

@@ -5,8 +5,10 @@
# PLease read the GNU Affero General Public License in
# <https://www.github.com/TeamUltroid/Ultroid/blob/main/LICENSE/>.
from fuzzywuzzy.process import extractOne
try:
from fuzzywuzzy.process import extractOne
except ImportError:
extractOne = None
from pyUltroid.dB._core import HELP, LIST
from pyUltroid.functions.tools import cmd_regex_replace
from telethon.errors.rpcerrorlist import (
@@ -83,12 +85,11 @@ async def _help(ult):
break
if not file:
# the enter command/plugin name is not found
best_match = extractOne(plug, compare_strings)
return await ult.eor(
"`{}` is not a valid plugin!\nDid you mean `{}`?".format(
plug, best_match[0]
),
)
text = f"`{plug}` is not a valid plugin!"
if extractOne:
best_match = extractOne(plug, compare_strings)
text += "\nDid you mean `{}`?".format(best_match[0])
return await ult.eor(text)
output = f"**Command** `{plug}` **found in plugin** - `{file}`\n"
if file in HELP["Official"]:
for i in HELP["Official"][file]:

View File

@@ -11,10 +11,10 @@ from datetime import datetime
from os import remove
from git import Repo
from pyUltroid._misc._assistant import callback, in_pattern
from pyUltroid.dB._core import HELP, LIST
from pyUltroid.functions.helper import gen_chlog, time_formatter, updater
from pyUltroid.functions.misc import split_list
from pyUltroid.misc._assistant import callback, in_pattern
from telethon import Button
from telethon.tl.types import InputWebDocument, Message
from telethon.utils import resolve_bot_file_id
@@ -332,9 +332,14 @@ async def _(e):
[
Button.switch_inline(
"Fᴅʀɪᴅ Sᴇᴀʀʜ", query="fdroid telegram", same_peer=True
)
),
Button.switch_inline("Sᴀᴀɴ sᴇᴀʀʜ", query="saavn", same_peer=True),
],
[Button.switch_inline("Sᴀᴀɴ sᴇᴀʀʜ", query="saavn", same_peer=True)],
[
Button.switch_inline("Tʟ Sᴇᴀʀʜ", query="tl", same_peer=True),
Button.switch_inline("GɪᴛHʙ ғᴇᴇᴅs", query="gh", same_peer=True),
],
[Button.switch_inline("OᴍɢUʙɴᴛ", query="omgu cutefish", same_peer=True)],
[
Button.inline(
"« Bᴀ",

View File

@@ -21,7 +21,18 @@ from telethon.errors.rpcerrorlist import (
from telethon.tl.types import MessageEntityMention, MessageEntityMentionName, User
from telethon.utils import get_display_name
from . import ultroid_bot, asst, udB, inline_mention, Button, LOGS, get_string, LOG_CHANNEL, callback, events
from . import (
LOG_CHANNEL,
LOGS,
Button,
asst,
callback,
events,
get_string,
inline_mention,
udB,
ultroid_bot,
)
CACHE_SPAM = {}
TAG_EDITS = {}

View File

@@ -90,7 +90,7 @@ async def _(e):
]
us = logi.username or logi.first_name
sur = e.builder.article(
title=f"{logi.first_name}",
title=logi.first_name,
description=desc,
text=get_string("wspr_1").format(us),
buttons=button,
@@ -141,9 +141,11 @@ async def _(e):
same_peer=True,
),
]
sur = e.builder.article(
sur = e.builder.document(
title=user.first_name,
description=desc,
file=logi.full_user.profile_photo,
include_media=False,
text=text,
buttons=button,
)

View File

@@ -68,7 +68,11 @@ from . import (
@ultroid_cmd(
pattern="promote( (.*)|$)", admins_only=True, manager=True, require="add_admins"
pattern="promote( (.*)|$)",
admins_only=True,
manager=True,
require="add_admins",
fullsudo=True,
)
async def prmte(ult):
xx = await ult.eor(get_string("com_1"))
@@ -96,7 +100,11 @@ async def prmte(ult):
@ultroid_cmd(
pattern="demote( (.*)|$)", admins_only=True, manager=True, require="add_admins"
pattern="demote( (.*)|$)",
admins_only=True,
manager=True,
require="add_admins",
fullsudo=True,
)
async def dmote(ult):
xx = await ult.eor(get_string("com_1"))
@@ -127,6 +135,7 @@ async def dmote(ult):
admins_only=True,
manager=True,
require="ban_users",
fullsudo=True,
)
async def bban(ult):
something = await get_uinfo(ult)
@@ -152,7 +161,11 @@ async def bban(ult):
@ultroid_cmd(
pattern="unban( (.*)|$)", admins_only=True, manager=True, require="ban_users"
pattern="unban( (.*)|$)",
admins_only=True,
manager=True,
require="ban_users",
fullsudo=True,
)
async def uunban(ult):
xx = await ult.eor(get_string("com_1"))
@@ -181,6 +194,7 @@ async def uunban(ult):
pattern="kick( (.*)|$)",
manager=True,
require="ban_users",
fullsudo=True,
)
async def kck(ult):
if "kickme" in ult.text:
@@ -215,7 +229,11 @@ async def kck(ult):
@ultroid_cmd(
pattern="tban( (.*)|$)", admins_only=True, manager=True, require="ban_users"
pattern="tban( (.*)|$)",
admins_only=True,
manager=True,
require="ban_users",
fullsudo=True,
)
async def tkicki(e):
huh = e.text.split()
@@ -235,9 +253,9 @@ async def tkicki(e):
try:
user = await e.client.get_entity(userid)
except Exception as ex:
return await eor(d, f"`{ex}`")
return await eor(e, f"`{ex}`")
try:
bun = await ban_time(e, tme)
bun = ban_time(e, tme)
await e.client.edit_permissions(
e.chat_id, user.id, until_date=bun, view_messages=False
)
@@ -250,7 +268,13 @@ async def tkicki(e):
return await e.eor(str(m))
@ultroid_cmd(pattern="pin$", manager=True, require="pin_messages")
@ultroid_cmd(
pattern="pin$",
admins_only=True,
manager=True,
require="pin_messages",
fullsudo=True,
)
async def pin(msg):
if not msg.is_reply:
return await eor(msg, get_string("pin_1"))
@@ -273,6 +297,7 @@ async def pin(msg):
admins_only=True,
manager=True,
require="pin_messages",
fullsudo=True,
)
async def unp(ult):
xx = await ult.eor(get_string("com_1"))
@@ -292,7 +317,11 @@ async def unp(ult):
@ultroid_cmd(
pattern="tpin( (.*)|$)", admins_only=True, manager=True, require="pin_messages"
pattern="tpin( (.*)|$)",
admins_only=True,
manager=True,
require="pin_messages",
fullsudo=True,
)
async def pin_message(ult):
match = ult.pattern_match.group(1).strip()
@@ -301,7 +330,7 @@ async def pin_message(ult):
if not match:
return await ult.eor("`Please provide time..`", time=8)
msg = await ult.eor(get_string("com_1"))
time = await ban_time(msg, match)
time = ban_time(msg, match)
if not time:
return
msg_id = ult.reply_to_msg_id

View File

@@ -37,7 +37,7 @@ from . import (
old_afk_msg = []
@ultroid_cmd(pattern="afk( (.*)|$)", fullsudo=True)
@ultroid_cmd(pattern="afk( (.*)|$)", owner_only=True)
async def set_afk(event):
if event.client._bot or is_afk():
return

View File

@@ -18,12 +18,16 @@
"""
import os
from pyUltroid.dB.asstcmd_db import *
from pyUltroid.dB.asstcmd_db import add_cmd, cmd_reply, list_cmds, rem_cmd
from pyUltroid.functions.tools import create_tl_btn, format_btn, get_msg_button
from telegraph import upload_file as uf
try:
from telegraph import upload_file as uf
except ImportError:
uf = None
from telethon import events, utils
from . import asst, get_string, mediainfo, ultroid_cmd
from . import asst, get_string, mediainfo, udB, ultroid_cmd
@ultroid_cmd(pattern="addcmd( (.*)|$)")

View File

@@ -26,6 +26,7 @@ from datetime import datetime as dt
from pyUltroid.functions.tools import set_attributes
from . import (
LOGS,
bash,
downloader,
eod,

158
plugins/autoban.py Normal file
View File

@@ -0,0 +1,158 @@
# Ultroid - UserBot
# Copyright (C) 2021-2022 TeamUltroid
#
# This file is a part of < https://github.com/TeamUltroid/Ultroid/ >
# PLease read the GNU Affero General Public License in
# <https://www.github.com/TeamUltroid/Ultroid/blob/main/LICENSE/>.
"""
✘ Commands Available
• `{i}autokick <on/off>`
on - To enable.
off - To disable.
Automatically kick new joined users from the group.
• `{i}cban`
Enable/Disable autobanning send as channel in used chat.
• `{i}addwl <Username>`
Add Channel to channelban whitelist.
• `{i}remwl <Username>`
Remove Channel from channelban whitelist.
• `{i}listwl` : List all whitelist channels.
"""
from pyUltroid.dB import autoban_db, dnd_db
from pyUltroid.functions.admins import get_update_linked_chat
from telethon import events
from telethon.tl.types import Channel
from . import LOGS, asst, get_string, inline_mention, ultroid_bot, ultroid_cmd
async def dnd_func(event):
if event.chat_id in dnd_db.get_dnd_chats():
for user in event.users:
try:
await (
await event.client.kick_participant(event.chat_id, user)
).delete()
except Exception as ex:
LOGS.error("Error in DND:")
LOGS.exception(ex)
await event.delete()
async def channel_del(event):
if not autoban_db.is_autoban_enabled(event.chat_id):
return
if autoban_db.is_whitelisted(event.chat_id, event.sender_id):
return
linked = await get_update_linked_chat(event)
if linked == event.sender.id:
return
if event.chat.creator or event.chat.admin_rights.ban_users:
try:
await event.client.edit_permissions(
event.chat_id, event.sender_id, view_messages=False
)
except Exception as er:
LOGS.exception(er)
await event.try_delete()
@ultroid_cmd(
pattern="autokick (on|off)$",
admins_only=True,
manager=True,
require="ban_users",
fullsudo=True,
)
async def _(event):
match = event.pattern_match.group(1)
if match == "on":
if dnd_db.chat_in_dnd(event.chat_id):
return await event.eor("`Chat already in do not disturb mode.`", time=3)
dnd_db.add_dnd(event.chat_id)
event.client.add_handler(
dnd_func, events.ChatAction(func=lambda x: x.user_joined)
)
await event.eor("`Do not disturb mode activated for this chat.`", time=3)
elif match == "off":
if not dnd_db.chat_in_dnd(event.chat_id):
return await event.eor("`Chat is not in do not disturb mode.`", time=3)
dnd_db.del_dnd(event.chat_id)
await event.eor("`Do not disturb mode deactivated for this chat.`", time=3)
@ultroid_cmd(pattern="cban$", admins_only=True)
async def ban_cha(ult):
if autoban_db.is_autoban_enabled(ult.chat_id):
autoban_db.del_channel(ult.chat_id)
return await ult.eor("`Disabled Auto ChannelBan...`")
if not (
ult.chat.creator
or (ult.chat.admin_rights.delete_messages or ult.chat.admin_rights.ban_users)
):
return await ult.eor(
"You are missing required admin rights!\nYou can't use ChannelBan without Ban/del privilege..`"
)
autoban_db.add_channel(ult.chat_id)
await ult.eor("`Enabled Auto ChannelBan Successfully!`")
ult.client.add_handler(
channel_del,
events.NewMessage(
func=lambda x: not x.is_private and isinstance(x.sender, Channel)
),
)
@ultroid_cmd(pattern="(list|add|rem)wl( (.*)|$)")
async def do_magic(event):
match = event.pattern_match.group(1)
msg = await event.eor(get_string("com_1"))
if match == "list":
cha = autoban_db.get_whitelisted_channels(event.chat_id)
if not cha:
return await msg.edit("`No Whitelisted channels for current chat.`")
Msg = "**Whitelist Channels in Current Chat**\n\n"
for ch in cha:
Msg += f"(`{ch}`) "
try:
Msg += inline_mention(await event.client.get_entity(ch))
except Exception:
Msg += "\n"
return await msg.edit(Msg)
usea = event.pattern_match.group(2).strip()
if not usea:
return await Msg.edit(
"`Please provide a channel username/id to add/remove to/from whitelist..`"
)
try:
u_id = await event.client.parse_id(usea)
cha = await event.client.get_entity(u_id)
except Exception as er:
LOGS.exception(er)
return await msg.edit(f"Error Broke Out!\n`{er}`")
if match == "add":
autoban_db.add_to_whitelist(event.chat_id, u_id)
return await msg.edit(f"`Added` {inline_mention(cha)} `to WhiteList..`")
autoban_db.del_from_whitelist(event.chat_id, u_id)
await msg.edit(f"`Removed` {inline_mention(cha)} `from WhiteList.`")
if dnd_db.get_dnd_chats():
ultroid_bot.add_handler(dnd_func, events.ChatAction(func=lambda x: x.user_joined))
asst.add_handler(dnd_func, events.ChatAction(func=lambda x: x.user_joined))
if autoban_db.get_all_channels():
ultroid_bot.add_handler(
channel_del,
events.NewMessage(
func=lambda x: not x.is_private and isinstance(x.sender, Channel)
),
)

View File

@@ -13,13 +13,14 @@
import string
from . import udB # ignore: pylint
from . import HNDLR, get_string, ultroid_bot, ultroid_cmd
from . import HNDLR, LOGS, get_string, udB, ultroid_bot, ultroid_cmd # ignore: pylint
try:
from gingerit.gingerit import GingerIt
except ImportError:
LOGS.info("GingerIt not found")
GingerIt = None
from google_trans_new import google_translator
from telethon import events
@@ -54,7 +55,7 @@ async def gramme(event):
pass
if udB.get_key("AUTOCORRECT"):
if GingerIt and udB.get_key("AUTOCORRECT"):
ultroid_bot.add_handler(
gramme, events.NewMessage(outgoing=True, func=lambda x: x.text)
)

View File

@@ -92,8 +92,11 @@ if search := udB.get_key("AUTOPIC"):
await ultroid_bot(UploadProfilePhotoRequest(file))
shuffle(ok)
from apscheduler.schedulers.asyncio import AsyncIOScheduler
try:
from apscheduler.schedulers.asyncio import AsyncIOScheduler
schedule = AsyncIOScheduler()
schedule.add_job(autopic_func, "interval", seconds=sleep)
schedule.start()
schedule = AsyncIOScheduler()
schedule.add_job(autopic_func, "interval", seconds=sleep)
schedule.start()
except ModuleNotFoundError as er:
LOGS.error(f"autopic: '{er.name}' not installed.")

View File

@@ -38,13 +38,21 @@ import time
from platform import python_version as pyver
from random import choice
from git import Repo
from pyUltroid.version import __version__ as UltVer
from telethon import __version__
from telethon.errors.rpcerrorlist import (
BotMethodInvalidError,
ChatSendMediaForbiddenError,
)
from . import HOSTED_ON, LOGS
try:
from git import Repo
except ImportError:
LOGS.error("bot: 'gitpython' module not found!")
Repo = None
from telethon.utils import resolve_bot_file_id
from . import (
@@ -132,7 +140,7 @@ async def lol(ult):
parse = "html"
als = in_alive.format(
header,
ultroid_version,
ultroid_version + f" [{HOSTED_ON}]",
UltVer,
pyver(),
uptime,
@@ -145,7 +153,7 @@ async def lol(ult):
als = (get_string("alive_1")).format(
header,
OWNER_NAME,
ultroid_version,
ultroid_version + f" [{HOSTED_ON}]",
UltVer,
uptime,
pyver(),
@@ -272,7 +280,7 @@ async def inline_alive(ult):
kk = f"<a href={rep}>{y}</a>"
als = in_alive.format(
header,
ultroid_version,
ultroid_version + f" [{HOSTED_ON}]",
UltVer,
pyver(),
uptime,
@@ -319,9 +327,12 @@ async def inline_alive(ult):
@ultroid_cmd(pattern="update( (.*)|$)")
async def _(e):
xx = await e.eor(get_string("upd_1"))
if e.pattern_match.group(1).strip() and (
"fast" in e.pattern_match.group(1).strip()
or "soft" in e.pattern_match.group(1).strip()
if HOSTED_ON == "heroku" or (
e.pattern_match.group(1).strip()
and (
"fast" in e.pattern_match.group(1).strip()
or "soft" in e.pattern_match.group(1).strip()
)
):
await bash("git pull -f && pip3 install -r requirements.txt")
call_back()

View File

@@ -15,11 +15,12 @@ Format:- `{i}button Hey There! @UseUltroid 😎.
[TeamUltroid | t.me/TeamUltroid]`
"""
import os
from pyUltroid.functions.tools import create_tl_btn, get_msg_button
from telegraph import upload_file as uf
from telethon.utils import pack_bot_file_id
from . import HNDLR, ultroid_cmd, mediainfo, get_string
from . import HNDLR, get_string, mediainfo, ultroid_cmd
from ._inline import something

View File

@@ -11,6 +11,9 @@
Delete the group this cmd is used in.
• `{i}getlink`
• `{i}getlink r` - `create link with admin approval`
• `{i}getlink r title_here` - `admin approval with link title`
• `{i}getlink 10` - `usage limit in new link`
Get link of group this cmd is used in.
• `{i}create (g|b|c) <group_name> ; <optional-username>`
@@ -80,8 +83,9 @@ async def _(e):
int(udB.get_key("LOG_CHANNEL")), get_string("chats_6").format(e.chat_id)
)
@ultroid_cmd(
pattern="getlink",
pattern="getlink( (.*)|$)",
groups_only=True,
manager=True,
)
@@ -94,16 +98,34 @@ async def _(e):
chat = await e.get_chat()
if hasattr(chat, "username") and chat.username:
return await e.eor(f"Username: @{chat.username}")
request, usage = None, None
request, usage, title = None, None, None
if match:
split = match.split()
split = match.split(maxsplit=1)
request = bool(split[0] in ["r", "request"])
if len(split) > 1 and split[1].isdigit():
usage = int(split[1])
if request:
title = "Created by Ultroid"
if len(split) > 1:
match = split[1]
spli = match.split(maxsplit=1)
if spli[0].isdigit():
usage = int(spli[0])
if len(spli) > 1:
title = spli[1]
elif not request:
if match.isdigit():
usage = int(match)
else:
title = match
if request and usage:
usage = 0
if request or title:
try:
r = await e.client(
ExportChatInviteRequest(e.chat_id, request_needed=request, usage_limit=usage, title="Create via Ultroid"),
ExportChatInviteRequest(
e.chat_id,
request_needed=request,
usage_limit=usage,
title=title,
),
)
except no_admin:
return await e.eor(get_string("chats_2"), time=10)

View File

@@ -14,6 +14,7 @@
e.g :
`{i}setdb hi there`
`{i}setdb hi there | ultroid here`
`{i}setdb --extend variable value` or `{i}setdb -e variable value` to add the value to the exiting values in db.
• `{i}deldb key`
Delete Key from DB.

View File

@@ -9,6 +9,7 @@
✘ Commands Available -
• `{i}bash <cmds>`
• `{i}bash -c <cmds>` Carbon image as command output.
Run linux commands on telegram.
• `{i}eval <code>`
@@ -26,7 +27,6 @@
• `{i}sysinfo`
Shows System Info.
"""
from __future__ import print_function
import sys
import traceback
@@ -41,9 +41,16 @@ try:
import black
except ImportError:
black = None
from random import choice
try:
from telegraph import upload_file as uf
except ImportError:
uf = None
from . import *
_ignore_eval = []
@ultroid_cmd(
pattern="sysinfo$",
@@ -53,7 +60,7 @@ async def _(e):
x, y = await bash("neofetch|sed 's/\x1B\\[[0-9;\\?]*[a-zA-Z]//g' >> neo.txt")
with open("neo.txt", "r") as neo:
p = (neo.read()).replace("\n\n", "")
haa = await Carbon(code=p, file_name="neofetch")
haa = await Carbon(code=p, file_name="neofetch", backgroundColor=choice(ATRA_COL))
await e.reply(file=haa)
await xx.delete()
remove("neo.txt")
@@ -61,11 +68,19 @@ async def _(e):
@ultroid_cmd(pattern="bash", fullsudo=True, only_devs=True)
async def _(event):
carb = None
try:
cmd = event.text.split(" ", maxsplit=1)[1]
if cmd.split()[0] in ["-c", "--carbon"]:
cmd = cmd.split(maxsplit=1)[1]
carb = True
except IndexError:
return await event.eor(get_string("devs_1"), time=10)
xx = await event.eor(get_string("com_1"))
if event.sender_id in _ignore_eval:
return await xx.edit(
"`You cannot use this command now. Contact owner of this bot!`"
)
reply_to_id = event.reply_to_msg_id or event.id
stdout, stderr = await bash(cmd)
OUT = f"**☞ BASH\n\n• COMMAND:**\n`{cmd}` \n\n"
@@ -73,9 +88,23 @@ async def _(event):
if stderr:
err = f"**• ERROR:** \n`{stderr}`\n\n"
if stdout:
_o = stdout.split("\n")
o = "\n".join(_o)
out = f"**• OUTPUT:**\n`{o}`"
if (carb or udB.get_key("CARBON_ON_BASH")) and (
event.chat.admin_rights
or event.chat.creator
or event.chat.default_banned_rights.embed_links
):
li = await Carbon(
code=stdout,
file_name="bash",
download=True,
backgroundColor=choice(ATRA_COL),
)
url = "https://telegra.ph" + uf(li)[-1]
OUT = f"[\xad]({url})" + OUT
out = "**• OUTPUT:**"
remove(li)
else:
out = f"**• OUTPUT:**\n`{stdout}`"
if not stderr and not stdout:
out = "**• OUTPUT:**\n`Success`"
OUT += err + out
@@ -95,7 +124,7 @@ async def _(event):
await xx.delete()
else:
await xx.edit(OUT)
await xx.edit(OUT, link_preview=True)
pp = pprint # ignore: pylint
@@ -118,9 +147,6 @@ def _parse_eval(value=None):
return str(value)
_ignore_eval = []
@ultroid_cmd(pattern="eval", fullsudo=True, only_devs=True)
async def _(event):
try:
@@ -150,13 +176,13 @@ async def _(event):
# Consider it as Code Error, and move on to be shown ahead.
pass
reply_to_id = event.reply_to_msg_id or event
if event.sender_id in _ignore_eval:
return await xx.edit(
"`You cannot use this command now. Contact owner of this bot!`"
)
if any(item in cmd for item in KEEP_SAFE().All) and (
not (event.out or event.sender_id == ultroid_bot.uid)
):
if event.sender_id in _ignore_eval:
return await xx.edit(
"`You cannot use this command now. Contact owner of this bot!`"
)
warning = await event.forward_to(udB.get_key("LOG_CHANNEL"))
await warning.reply(
f"Malicious Activities suspected by {inline_mention(await event.get_sender())}"
@@ -259,7 +285,7 @@ async def doie(e):
open("cpp-ultroid.cpp", "w").write(match)
m = await bash("g++ -o CppUltroid cpp-ultroid.cpp")
o_cpp = f"• **Eval-Cpp**\n`{match}`"
if m[1] != "":
if m[1]:
o_cpp += f"\n\n**• Error :**\n`{m[1]}`"
if len(o_cpp) > 3000:
os.remove("cpp-ultroid.cpp")
@@ -272,7 +298,7 @@ async def doie(e):
m = await bash("./CppUltroid")
if m[0] != "":
o_cpp += f"\n\n**• Output :**\n`{m[0]}`"
if m[1] != "":
if m[1]:
o_cpp += f"\n\n**• Error :**\n`{m[1]}`"
if len(o_cpp) > 3000:
with BytesIO(str.encode(o_cpp)) as out_file:

View File

@@ -1,59 +0,0 @@
# Ultroid - UserBot
# Copyright (C) 2021-2022 TeamUltroid
#
# This file is a part of < https://github.com/TeamUltroid/Ultroid/ >
# PLease read the GNU Affero General Public License in
# <https://www.github.com/TeamUltroid/Ultroid/blob/main/LICENSE/>.
"""
✘ Commands Available
Do Not Disturb - As it says, activating this in your group will kick new users who joins the group.
• `{i}dnd`
To activate.
• `{i}deldnd`
To deactivate.
"""
from pyUltroid.dB.dnd_db import add_dnd, chat_in_dnd, del_dnd, get_dnd_chats
from telethon import events
from . import LOGS, asst, ultroid_bot, ultroid_cmd
async def dnd_func(event):
if event.chat_id in get_dnd_chats():
for user in event.users:
try:
await (
await event.client.kick_participant(event.chat_id, user)
).delete()
except Exception as ex:
LOGS.error("Error in DND:")
LOGS.exception(ex)
await event.delete()
@ultroid_cmd(pattern="dnd$", manager=True, admins_only=True, groups_only=True)
async def _(event):
if chat_in_dnd(event.chat_id):
return await event.eor("`Chat already in do not disturb mode.`", time=3)
add_dnd(event.chat_id)
event.client.add_handler(dnd_func, events.ChatAction(func=lambda x: x.user_joined))
await event.eor("`Do not disturb mode activated for this chat.`", time=3)
@ultroid_cmd(pattern="deldnd$", manager=True, admins_only=True, groups_only=True)
async def _(event):
if not chat_in_dnd(event.chat_id):
return await event.eor("`Chat is not in do not disturb mode.`", time=3)
del_dnd(event.chat_id)
await event.eor("`Do not disturb mode deactivated for this chat.`", time=3)
if get_dnd_chats():
ultroid_bot.add_handler(dnd_func, events.ChatAction(func=lambda x: x.user_joined))
asst.add_handler(dnd_func, events.ChatAction(func=lambda x: x.user_joined))

View File

@@ -23,6 +23,7 @@
"""
import asyncio
import glob
import os
import time
from datetime import datetime as dt
@@ -135,13 +136,12 @@ async def download(event):
pattern="ul( (.*)|$)",
)
async def _(event):
if len(event.text) >= 8:
if "ultroid" in event.text[:7]:
return
msg = await event.eor(get_string("com_1"))
match = event.pattern_match.group(1)
if match:
match = match.strip()
if not event.out and match == ".env":
return await event.reply("`You can't do this...`")
stream, force_doc, delete, thumb = (
False,
True,
@@ -163,57 +163,63 @@ async def _(event):
.replace("--no-thumb", "")
.strip()
)
if not os.path.exists(match):
if match.endswith("/"):
match += "*"
results = glob.glob(match)
if not results and os.path.exists(match):
results = [match]
if not results:
try:
await event.reply(file=match)
await event.try_delete()
return await event.try_delete()
except Exception as er:
LOGS.exception(er)
return await msg.eor("`File doesn't exist or path is incorrect!`")
if os.path.isdir(match):
c, s = 0, 0
for files in sorted(os.listdir(match)):
attributes = None
if stream:
for result in results:
if os.path.isdir(result):
c, s = 0, 0
for files in sorted(glob.glob(result + "/*")):
attributes = None
if stream:
try:
attributes = await set_attributes(files)
except KeyError as er:
LOGS.exception(er)
try:
attributes = await set_attributes(files)
except KeyError as er:
LOGS.exception(er)
file, _ = await event.client.fast_uploader(
files, show_progress=True, event=msg, to_delete=delete
)
await event.client.send_file(
event.chat_id,
file,
supports_streaming=stream,
force_document=force_doc,
thumb=thumb,
attributes=attributes,
caption=f"`Uploaded` `{files}` `in {time_formatter(_*1000)}`",
reply_to=event.reply_to_msg_id or event,
)
s += 1
except (ValueError, IsADirectoryError):
c += 1
break
attributes = None
if stream:
try:
file, _ = await event.client.fast_uploader(
match + "/" + files, show_progress=True, event=msg, to_delete=delete
)
await event.client.send_file(
event.chat_id,
file,
supports_streaming=stream,
force_document=force_doc,
thumb=thumb,
attributes=attributes,
caption=f"`Uploaded` `{match}/{files}` `in {time_formatter(_*1000)}`",
reply_to=event.reply_to_msg_id or event,
)
s += 1
except (ValueError, IsADirectoryError):
c += 1
return await msg.eor(f"`Uploaded {s} files, failed to upload {c}.`")
attributes = None
if stream:
try:
attributes = await set_attributes(match)
except KeyError as er:
LOGS.exception(er)
file, _ = await event.client.fast_uploader(
match, show_progress=True, event=msg, to_delete=delete
)
await event.client.send_file(
event.chat_id,
file,
supports_streaming=stream,
force_document=force_doc,
thumb=thumb,
attributes=attributes,
caption=f"`Uploaded` `{match}` `in {time_formatter(_*1000)}`",
reply_to=event.reply_to_msg_id or event,
)
attributes = await set_attributes(result)
except KeyError as er:
LOGS.exception(er)
file, _ = await event.client.fast_uploader(
result, show_progress=True, event=msg, to_delete=delete
)
await event.client.send_file(
event.chat_id,
file,
supports_streaming=stream,
force_document=force_doc,
thumb=thumb,
attributes=attributes,
caption=f"`Uploaded` `{result}` `in {time_formatter(_*1000)}`",
reply_to=event.reply_to_msg_id or event,
)
await msg.try_delete()

View File

@@ -56,7 +56,7 @@ async def _(e):
if t.isdigit():
t = int(t)
elif t.endswith(("s", "h", "d", "m")):
t = math.ceil((await ban_time(e, t)) - time.time())
t = math.ceil((ban_time(e, t)) - time.time())
else:
t = 60
await e.eor(get_string("fka_1").format(str(t)), time=5)

View File

@@ -24,7 +24,7 @@ import os
from pyUltroid.dB.filestore_db import del_stored, get_stored_msg, list_all_stored_msgs
from pyUltroid.functions.tools import get_file_link
from . import asst, get_string, in_pattern, udB, ultroid_bot, ultroid_cmd, HNDLR
from . import HNDLR, asst, get_string, in_pattern, udB, ultroid_bot, ultroid_cmd
@ultroid_cmd(pattern="store$")

View File

@@ -87,7 +87,7 @@ async def fcall(e):
spli = match.split("_")
user = await ultroid_bot.get_entity(int(spli[0]))
cl = await ultroid_bot.get_entity(int(spli[1]))
text = f"Hi [{inline_mention(user)}), You Need to Join"
text = f"Hi {inline_mention(user)}, You Need to Join"
text += f" {cl.title} in order to Chat in this Group."
if not cl.username:
el = (await ultroid_bot(ExportChatInviteRequest(cl))).link
@@ -131,7 +131,6 @@ async def diesoon(e):
async def force_sub(ult):
if not udB.get_key("FORCESUB"):
return
user = await ult.get_sender()
joinchat = get_forcesetting(ult.chat_id)
if (not joinchat) or (isinstance(user, User) and user.bot):
@@ -145,7 +144,7 @@ async def force_sub(ult):
CACHE.update({ult.chat_id: {user.id: 1}})
count = CACHE[ult.chat_id][user.id]
if count == 11:
CACHE[ult.chat_id][user.id].update(1)
CACHE[ult.chat_id][user.id] = 1
return
if count in range(2, 11):
return
@@ -167,6 +166,7 @@ async def force_sub(ult):
except ChatAdminRequiredError:
return
except Exception as e:
await ult.delete()
LOGS.info(e)
res = await ultroid_bot.inline_query(asst.me.username, f"fsub {user.id}_{joinchat}")
await res[0].click(ult.chat_id, reply_to=ult.id)

View File

@@ -291,7 +291,9 @@ async def _(e):
xx = await e.eor("`UnGbanning...`")
match = e.pattern_match.group(1).strip()
peer = None
if match:
if e.reply_to_msg_id:
userid = (await e.get_reply_message()).sender_id
elif match:
try:
userid = int(match)
except ValueError:
@@ -300,8 +302,6 @@ async def _(e):
userid = (await e.client.get_entity(userid)).id
except (ValueError, Exception) as er:
return await xx.edit(f"Failed to get User...\nError: {er}")
elif e.reply_to_msg_id:
userid = (await e.get_reply_message()).sender_id
elif e.is_private:
userid = e.chat_id
else:
@@ -354,7 +354,13 @@ async def _(e):
async def _(e):
xx = await e.eor("`Gbanning...`")
reason = ""
if e.pattern_match.group(1).strip():
if e.reply_to_msg_id:
userid = (await e.get_reply_message()).sender_id
try:
reason = e.text.split(" ", maxsplit=1)[1]
except IndexError:
pass
elif e.pattern_match.group(1).strip():
usr = e.text.split(maxsplit=2)[1]
try:
userid = await e.client.parse_id(usr)
@@ -364,12 +370,6 @@ async def _(e):
reason = e.text.split(maxsplit=2)[2]
except IndexError:
pass
elif e.reply_to_msg_id:
userid = (await e.get_reply_message()).sender_id
try:
reason = e.text.split(" ", maxsplit=1)[1]
except IndexError:
pass
elif e.is_private:
userid = e.chat_id
try:
@@ -503,8 +503,8 @@ async def gcast(event):
chat, msg, file=reply.media if reply else None
)
done += 1
except Exception as er:
err += f"{er}\n"
except Exception as rr:
err += f"{rr}\n"
er += 1
except BaseException as h:
err += "" + str(h) + "\n"

View File

@@ -52,13 +52,16 @@
• `{i}pixelator <reply image>`
Create a Pixelated Image..
"""
import asyncio
import os
import cv2
import numpy as np
from . import LOGS, con
from . import LOGS
try:
import cv2
except ImportError:
LOGS.error(f"{__file__}: OpenCv not Installed.")
import numpy as np
try:
from PIL import Image
@@ -94,22 +97,7 @@ async def sketch(e):
ultt = await ureply.download_media()
if ultt.endswith(".tgs"):
await xx.edit(get_string("sts_9"))
cmd = ["lottie_convert.py", ultt, "ult.png"]
file = "ult.png"
process = await asyncio.create_subprocess_exec(
*cmd,
stdout=asyncio.subprocess.PIPE,
stderr=asyncio.subprocess.PIPE,
)
stdout, stderr = await process.communicate()
stderr.decode().strip()
stdout.decode().strip()
else:
await xx.edit(get_string("com_1"))
img = cv2.VideoCapture(ultt)
heh, lol = img.read()
cv2.imwrite("ult.png", lol)
file = "ult.png"
file = await con.convert(ultt, convert_to="png", outname="ult")
img = cv2.imread(file)
gray_image = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
inverted_gray_image = 255 - gray_image
@@ -164,22 +152,7 @@ async def ultd(event):
ultt = await ureply.download_media()
if ultt.endswith(".tgs"):
xx = await event.eor(get_string("sts_9"))
cmd = ["lottie_convert.py", ultt, "ult.png"]
file = "ult.png"
process = await asyncio.create_subprocess_exec(
*cmd,
stdout=asyncio.subprocess.PIPE,
stderr=asyncio.subprocess.PIPE,
)
stdout, stderr = await process.communicate()
stderr.decode().strip()
stdout.decode().strip()
else:
xx = await event.eor(get_string("com_1"))
img = cv2.VideoCapture(ultt)
heh, lol = img.read()
cv2.imwrite("ult.png", lol)
file = "ult.png"
file = await con.convert(ultt, convert_to="png", outname="ult")
ult = cv2.imread(file)
ultroid = cv2.cvtColor(ult, cv2.COLOR_BGR2GRAY)
cv2.imwrite("ult.jpg", ultroid)
@@ -206,22 +179,7 @@ async def ultd(event):
ultt = await ureply.download_media()
if ultt.endswith(".tgs"):
xx = await event.eor(get_string("sts_9"))
cmd = ["lottie_convert.py", ultt, "ult.png"]
file = "ult.png"
process = await asyncio.create_subprocess_exec(
*cmd,
stdout=asyncio.subprocess.PIPE,
stderr=asyncio.subprocess.PIPE,
)
stdout, stderr = await process.communicate()
stderr.decode().strip()
stdout.decode().strip()
else:
xx = await event.eor(get_string("com_1"))
img = cv2.VideoCapture(ultt)
heh, lol = img.read()
cv2.imwrite("ult.png", lol)
file = "ult.png"
file = await con.convert(ultt, convert_to="png", outname="ult")
ult = cv2.imread(file)
ultroid = cv2.GaussianBlur(ult, (35, 35), 0)
cv2.imwrite("ult.jpg", ultroid)
@@ -249,22 +207,7 @@ async def ultd(event):
ultt = await ureply.download_media()
if ultt.endswith(".tgs"):
await xx.edit(get_string("sts_9"))
cmd = ["lottie_convert.py", ultt, "ult.png"]
file = "ult.png"
process = await asyncio.create_subprocess_exec(
*cmd,
stdout=asyncio.subprocess.PIPE,
stderr=asyncio.subprocess.PIPE,
)
stdout, stderr = await process.communicate()
stderr.decode().strip()
stdout.decode().strip()
else:
await xx.edit(get_string("com_1"))
img = cv2.VideoCapture(ultt)
heh, lol = img.read()
cv2.imwrite("ult.png", lol)
file = "ult.png"
file = await con.convert(ultt, convert_to="png", outname="ult")
ult = cv2.imread(file)
ultroid = cv2.bitwise_not(ult)
cv2.imwrite("ult.jpg", ultroid)
@@ -290,24 +233,7 @@ async def ultd(event):
await xx.edit(get_string("cvt_3"))
return
ultt = await ureply.download_media()
if ultt.endswith(".tgs"):
await xx.edit(get_string("sts_9"))
cmd = ["lottie_convert.py", ultt, "ult.png"]
file = "ult.png"
process = await asyncio.create_subprocess_exec(
*cmd,
stdout=asyncio.subprocess.PIPE,
stderr=asyncio.subprocess.PIPE,
)
stdout, stderr = await process.communicate()
stderr.decode().strip()
stdout.decode().strip()
else:
await xx.edit(get_string("com_1"))
img = cv2.VideoCapture(ultt)
heh, lol = img.read()
cv2.imwrite("ult.png", lol)
file = "ult.png"
file = await con.convert(ultt, convert_to="png", outname="ult")
ult = cv2.imread(file)
ish = cv2.flip(ult, 1)
ultroid = cv2.hconcat([ult, ish])
@@ -336,22 +262,7 @@ async def ultd(event):
ultt = await ureply.download_media()
if ultt.endswith(".tgs"):
await xx.edit(get_string("sts_9"))
cmd = ["lottie_convert.py", ultt, "ult.png"]
file = "ult.png"
process = await asyncio.create_subprocess_exec(
*cmd,
stdout=asyncio.subprocess.PIPE,
stderr=asyncio.subprocess.PIPE,
)
stdout, stderr = await process.communicate()
stderr.decode().strip()
stdout.decode().strip()
else:
await xx.edit(get_string("com_1"))
img = cv2.VideoCapture(ultt)
heh, lol = img.read()
cv2.imwrite("ult.png", lol)
file = "ult.png"
file = await con.convert(ultt, convert_to="png", outname="ult")
ult = cv2.imread(file)
trn = cv2.flip(ult, 1)
ish = cv2.rotate(trn, cv2.ROTATE_180)
@@ -381,22 +292,7 @@ async def ultd(event):
ultt = await ureply.download_media()
if ultt.endswith(".tgs"):
await xx.edit(get_string("sts_9"))
cmd = ["lottie_convert.py", ultt, "ult.png"]
file = "ult.png"
process = await asyncio.create_subprocess_exec(
*cmd,
stdout=asyncio.subprocess.PIPE,
stderr=asyncio.subprocess.PIPE,
)
stdout, stderr = await process.communicate()
stderr.decode().strip()
stdout.decode().strip()
else:
await xx.edit(get_string("com_1"))
img = cv2.VideoCapture(ultt)
heh, lol = img.read()
cv2.imwrite("ult.png", lol)
file = "ult.png"
file = await con.convert(ultt, convert_to="png", outname="ult")
ult = cv2.imread(file)
roid = cv2.flip(ult, 1)
mici = cv2.hconcat([ult, roid])
@@ -428,22 +324,7 @@ async def ultd(event):
ultt = await ureply.download_media()
if ultt.endswith(".tgs"):
await xx.edit(get_string("sts_9"))
cmd = ["lottie_convert.py", ultt, "ult.png"]
file = "ult.png"
process = await asyncio.create_subprocess_exec(
*cmd,
stdout=asyncio.subprocess.PIPE,
stderr=asyncio.subprocess.PIPE,
)
stdout, stderr = await process.communicate()
stderr.decode().strip()
stdout.decode().strip()
else:
await xx.edit(get_string("com_1"))
img = cv2.VideoCapture(ultt)
heh, lol = img.read()
cv2.imwrite("ult.png", lol)
file = "ult.png"
file = await con.convert(ultt, convert_to="png", outname="ult")
ult = cv2.imread(file)
height, width, channels = ult.shape
samples = np.zeros([height * width, 3], dtype=np.float32)
@@ -488,22 +369,7 @@ async def ultd(event):
ultt = await ureply.download_media()
if ultt.endswith(".tgs"):
await xx.edit(get_string("sts_9"))
cmd = ["lottie_convert.py", ultt, "ult.png"]
file = "ult.png"
process = await asyncio.create_subprocess_exec(
*cmd,
stdout=asyncio.subprocess.PIPE,
stderr=asyncio.subprocess.PIPE,
)
stdout, stderr = await process.communicate()
stderr.decode().strip()
stdout.decode().strip()
else:
await xx.edit(get_string("com_1"))
img = cv2.VideoCapture(ultt)
heh, lol = img.read()
cv2.imwrite("ult.png", lol)
file = "ult.png"
file = await con.convert(ultt, convert_to="png", outname="ult")
ult = cv2.imread(file)
dan = cv2.cvtColor(ult, cv2.COLOR_BGR2RGB)
ultroid = cv2.cvtColor(dan, cv2.COLOR_HSV2BGR)
@@ -553,22 +419,7 @@ async def ultd(event):
ultt = await ureply.download_media()
if ultt.endswith(".tgs"):
await xx.edit(get_string("sts_9"))
cmd = ["lottie_convert.py", ultt, "ult.png"]
file = "ult.png"
process = await asyncio.create_subprocess_exec(
*cmd,
stdout=asyncio.subprocess.PIPE,
stderr=asyncio.subprocess.PIPE,
)
stdout, stderr = await process.communicate()
stderr.decode().strip()
stdout.decode().strip()
else:
await xx.edit(get_string("com_1"))
img = cv2.VideoCapture(ultt)
heh, lol = img.read()
cv2.imwrite("ult.png", lol)
file = "ult.png"
file = await con.convert(ultt, convert_to="png", outname="ult")
got = upf(file)
lnk = f"https://telegra.ph{got[0]}"
r = await async_searcher(

View File

@@ -103,17 +103,13 @@ async def insta_dl(e):
e.media.webpage, WebPage
):
photo = e.media.webpage.photo or e.media.webpage.document
if not photo:
return await eor(
tt,
"Please Fill `INSTA_USERNAME` and `INSTA_PASSWORD` to Use This Comamand!",
if photo:
await tt.delete()
return await e.reply(
f"**Link** :{text}\n\nIf This Wasnt Excepted Result, Please Fill `INSTA_USERNAME` and `INSTA_PASSWORD`...",
file=photo,
)
await tt.delete()
return await e.reply(
f"**Link** :{text}\n\nIf This Wasnt Excepted Result, Please Fill `INSTA_USERNAME` and `INSTA_PASSWORD`...",
file=photo,
)
await eor(tt, "Please Fill Instagram Credential to Use this Command...")
# await eor(tt, "Please Fill Instagram Credential to Use this Command...")
@ultroid_cmd(pattern="instadata( (.*)|$)")
@@ -156,7 +152,7 @@ async def soon_(e):
async def insta_karbon(event):
cl = await create_instagram_client(event)
if not cl:
return await event.eor("`Please Fill Instagram Credentials to Use This...`")
return
msg = await event.eor(get_string("com_1"))
replied = await event.get_reply_message()
type_ = event.pattern_match.group(1).strip()

View File

@@ -22,13 +22,19 @@
Convert replied image into html.
"""
import calendar
import os
from datetime import datetime as dt
from bs4 import BeautifulSoup as bs
from htmlwebshot import WebShot
from img2html.converter import Img2HTMLConverter
try:
from htmlwebshot import WebShot
except ImportError:
WebShot = None
try:
from img2html.converter import Img2HTMLConverter
except ImportError:
Img2HTMLConverter = None
from . import async_searcher, get_random_user_data, get_string, re, ultroid_cmd
@@ -120,6 +126,8 @@ async def _gen_data(event):
pattern="ascii( (.*)|$)",
)
async def _(e):
if not Img2HTMLConverter:
return await e.eor("'img2html-converter' not installed!")
if not e.reply_to_msg_id:
return await e.eor(get_string("ascii_1"))
m = await e.eor(get_string("ascii_2"))

View File

@@ -31,7 +31,7 @@ from pyUltroid.functions.admins import ban_time
from telethon import events
from telethon.utils import get_display_name
from . import eod, get_string, inline_mention, ultroid_bot, ultroid_cmd
from . import asst, eod, get_string, inline_mention, ultroid_bot, ultroid_cmd
@ultroid_bot.on(events.NewMessage(incoming=True))
@@ -54,14 +54,17 @@ async def startmute(event):
except Exception as x:
return await xx.edit(str(x))
elif event.reply_to_msg_id:
userid = (await event.get_reply_message()).sender_id
reply = await event.get_reply_message()
userid = reply.sender_id
if reply.out or userid in [ultroid_bot.me.id, asst.me.id]:
return await xx.eor("`You cannot mute yourself or your assistant bot.`")
elif event.is_private:
userid = event.chat_id
else:
return await xx.eor("`Reply to a user or add their userid.`", time=5)
chat = await event.get_chat()
if "admin_rights" in vars(chat) and vars(chat)["admin_rights"] is not None:
if chat.admin_rights.delete_messages is not True:
if not chat.admin_rights.delete_messages:
return await xx.eor("`No proper admin rights...`", time=5)
elif "creator" not in vars(chat) and not event.is_private:
return await xx.eor("`No proper admin rights...`", time=5)
@@ -88,10 +91,9 @@ async def endmute(event):
userid = event.chat_id
else:
return await xx.eor("`Reply to a user or add their userid.`", time=5)
chat_id = event.chat_id
if not is_muted(chat_id, userid):
if not is_muted(event.chat_id, userid):
return await xx.eor("`This user is not muted in this chat.`", time=3)
unmute(chat_id, userid)
unmute(event.chat_id, userid)
await xx.eor("`Successfully unmuted...`", time=3)
@@ -124,7 +126,7 @@ async def _(e):
if userid == ultroid_bot.uid:
return await xx.eor("`I can't mute myself.`", time=3)
try:
bun = await ban_time(xx, tme)
bun = ban_time(xx, tme)
await e.client.edit_permissions(
chat.id,
userid,

View File

@@ -29,12 +29,19 @@ And Turn On auto at morning
Ex- `nmtime 01 00 06 30`
"""
from apscheduler.schedulers.asyncio import AsyncIOScheduler
from . import LOGS
try:
from apscheduler.schedulers.asyncio import AsyncIOScheduler
except ImportError:
LOGS.error("nightmode: 'apscheduler' not Installed!")
AsyncIOScheduler = None
from pyUltroid.dB.night_db import *
from telethon.tl.functions.messages import EditChatDefaultBannedRightsRequest
from telethon.tl.types import ChatBannedRights
from . import LOGS, get_string, ultroid_bot, ultroid_cmd, udB
from . import get_string, udB, ultroid_bot, ultroid_cmd
@ultroid_cmd(pattern="nmtime( (.*)|$)")
@@ -138,7 +145,7 @@ async def close_grp():
LOGS.info(er)
if night_grps():
if AsyncIOScheduler and night_grps():
try:
h1, m1, h2, m2 = 0, 0, 7, 0
if udB.get_key("NIGHT_TIME"):

View File

@@ -16,10 +16,16 @@
import os
from ProfanityDetector import detector
from . import LOGS
try:
from ProfanityDetector import detector
except ImportError:
detector = None
LOGS.error("nsfwfilter: 'Profanitydetector' not installed!")
from pyUltroid.dB.nsfw_db import is_nsfw, nsfw_chat, rem_nsfw
from . import HNDLR, LOGS, async_searcher, eor, events, udB, ultroid_bot, ultroid_cmd
from . import HNDLR, async_searcher, eor, events, udB, ultroid_bot, ultroid_cmd
@ultroid_cmd(pattern="addnsfw( (.*)|$)", admins_only=True)
@@ -56,7 +62,7 @@ async def nsfw_check(e):
pass
if e.file:
name = e.file.name
if name:
if detector and name:
x, y = detector(name)
if y:
nsfw += 1

View File

@@ -8,28 +8,28 @@
✘ Commands Available -
• `{i}a` or `{i}approve`
To Approve Someone In PM.
Approve someone to PM.
• `{i}da` or `{i}disapprove`
To Disapprove Someone In PM.
Disapprove someone to PM.
• `{i}block`
To Block Someone in PM.
Block someone.
• `{i}unblock` | `{i}unblock all`
To Unblock Someone in PM.
Unblock someone.
• `{i}nologpm`
To stop logging from that user.
Stop logging messages from the user.
• `{i}logpm`
Start logging again from that user.
Start logging messages from the user.
• `{i}startarchive`
Will start adding new PMs to archive.
Archive new PMs.
• `{i}stoparchive`
Will stop adding new PMs to archive.
Don't archive new PMs.
• `{i}cleararchive`
Unarchive all chats.
@@ -45,7 +45,11 @@ from os import remove
from pyUltroid.dB import DEVLIST
from pyUltroid.dB.logusers_db import *
from pyUltroid.dB.pmpermit_db import *
from tabulate import tabulate
try:
from tabulate import tabulate
except ImportError:
tabulate = None
from telethon import events
from telethon.errors import MessageNotModifiedError
from telethon.tl.functions.contacts import (
@@ -155,7 +159,7 @@ if udB.get_key("PMLOG"):
if udB.get_key("PMSETTING"):
if udB.get_key("AUTOAPPROVE") in [True, None]:
if udB.get_key("AUTOAPPROVE"):
@ultroid_bot.on(
events.NewMessage(
@@ -353,7 +357,7 @@ if udB.get_key("PMSETTING"):
COUNT_PM[user.id] = COUNT_PM[user.id] + 1
if COUNT_PM[user.id] >= WARNS:
await delete_pm_warn_msgs(user.id)
await event.respond(UNS)
_to_delete[user.id] = await event.respond(UNS)
try:
del COUNT_PM[user.id]
del LASTMSG[user.id]
@@ -516,7 +520,7 @@ async def blockpm(block):
)
await block.client(BlockRequest(user))
aname = await block.client.get_entity(user)
await block.eor(f"`{aname.first_name} has been blocked!`")
await block.eor(f"{inline_mention(aname)} `has been blocked!`")
try:
disapprove_user(user)
except AttributeError:
@@ -525,7 +529,7 @@ async def blockpm(block):
await asst.edit_message(
int(udB.get_key("LOG_CHANNEL")),
_not_approved[user],
f"#BLOCKED\n\n[{aname.first_name}](tg://user?id={user}) [`{user}`] has been **blocked**.",
f"#BLOCKED\n\n{inline_mention(aname)} [`{user}`] has been **blocked**.",
buttons=[
Button.inline("UnBlock", data=f"unblock_{user}"),
],
@@ -533,7 +537,7 @@ async def blockpm(block):
except KeyError:
_not_approved[user] = await asst.send_message(
int(udB.get_key("LOG_CHANNEL")),
f"#BLOCKED\n\n[{aname.first_name}](tg://user?id={user}) [`{user}`] has been **blocked**.",
f"#BLOCKED\n\n{inline_mention(aname)} [`{user}`] has been **blocked**.",
buttons=[
Button.inline("UnBlock", data=f"unblock_{user}"),
],
@@ -544,31 +548,38 @@ async def blockpm(block):
@ultroid_cmd(pattern="unblock( (.*)|$)")
async def unblockpm(event):
match = (
event.pattern_match.group(1).strip()
or (await event.get_reply_message()).sender_id
)
if not match:
return await event.eor(NO_REPLY + "`Or give it's username/id`", time=5)
if match == "all":
msg = await event.eor(get_string("com_1"))
u_s = await event.client(GetBlockedRequest(0, 0))
count = len(u_s.users)
if not count:
return await eor(msg, "__You have not blocked Anyone...__")
for user in u_s.users:
await asyncio.sleep(1)
await event.client(UnblockRequest(user.id))
# GetBlockedRequest return 20 users at most.
if count < 20:
return await eor(msg, f"__Unblocked {count} Users!__")
while u_s.users:
match = event.pattern_match.group(1).strip()
if event.reply_to_msg_id:
user = (await event.get_reply_message()).sender_id
elif match:
if match == "all":
msg = await event.eor(get_string("com_1"))
u_s = await event.client(GetBlockedRequest(0, 0))
count = len(u_s.users)
if not count:
return await eor(msg, "__You have not blocked Anyone...__")
for user in u_s.users:
await asyncio.sleep(3)
await asyncio.sleep(1)
await event.client(UnblockRequest(user.id))
count += len(u_s.users)
return await eor(msg, f"__Unblocked {count} users.__")
# GetBlockedRequest return 20 users at most.
if count < 20:
return await eor(msg, f"__Unblocked {count} Users!__")
while u_s.users:
u_s = await event.client(GetBlockedRequest(0, 0))
for user in u_s.users:
await asyncio.sleep(3)
await event.client(UnblockRequest(user.id))
count += len(u_s.users)
return await eor(msg, f"__Unblocked {count} users.__")
try:
user = await event.client.parse_id(match)
except Exception as er:
return await event.eor(str(er))
elif block.is_private:
user = (await event.get_chat()).id
else:
return await event.eor(NO_REPLY, time=10)
try:
user = await event.client.parse_id(match)
except Exception as er:
@@ -576,7 +587,7 @@ async def unblockpm(event):
try:
await event.client(UnblockRequest(user))
aname = await event.client.get_entity(user)
await event.eor(f"{inline_mention(aname)} [`user`] `has been UnBlocked!`")
await event.eor(f"{inline_mention(aname)} [`{user}`] `has been UnBlocked!`")
except Exception as et:
return await event.eor(f"ERROR - {et}")
try:
@@ -614,9 +625,15 @@ async def list_approved(event):
name = ""
users.append([name.strip(), str(i)])
with open("approved_pms.txt", "w") as list_appr:
list_appr.write(
tabulate(users, headers=["UserName", "UserID"], showindex="always")
)
if tabulate:
list_appr.write(
tabulate(users, headers=["UserName", "UserID"], showindex="always")
)
else:
text = ""
for user in users:
text += f"[{user[-1]}] - {user[0]}"
list_appr.write(text)
await event.reply(
"List of users approved by [{}](tg://user?id={})".format(OWNER_NAME, OWNER_ID),
file="approved_pms.txt",

View File

@@ -18,7 +18,11 @@
"""
import os
import cv2
try:
import cv2
except ImportError:
cv2 = None
import qrcode
from PIL import Image
from telethon.tl.types import MessageMediaDocument as doc

View File

@@ -33,7 +33,7 @@ async def _(e):
await e.eor(get_string("schdl_1"), time=5)
else:
try:
z = await ban_time(e, y)
z = ban_time(e, y)
await e.client.send_message(e.chat_id, k, schedule=z)
await e.eor(get_string("schdl_1"), time=5)
except BaseException:
@@ -46,7 +46,7 @@ async def _(e):
await e.eor(get_string("schdl_1"), time=5)
else:
try:
z = await ban_time(e, x)
z = ban_time(e, x)
await e.client.send_message(e.chat_id, xx, schedule=z)
await e.eor(get_string("schdl_1"), time=5)
except BaseException:

View File

@@ -42,7 +42,7 @@ from pyUltroid.functions.misc import google_search
from pyUltroid.functions.tools import saavn_search
from telethon.tl.types import DocumentAttributeAudio
from . import async_searcher, eod, fast_download, get_string, ultroid_cmd
from . import async_searcher, con, eod, fast_download, get_string, ultroid_cmd
@ultroid_cmd(
@@ -145,18 +145,13 @@ async def reverse(event):
return await event.eor("`Reply to an Image`")
ult = await event.eor(get_string("com_1"))
dl = await reply.download_media()
if reply.video:
img = cv2.VideoCapture(dl)
ult, roid = img.read()
os.remove(dl)
dl = "file.png"
cv2.imwrite(dl, roid)
img = Image.open(dl)
file = await con.convert(dl, convert_to="png")
img = Image.open(file)
x, y = img.size
file = {"encoded_image": (dl, open(dl, "rb"))}
files = {"encoded_image": (file, open(file, "rb"))}
grs = requests.post(
"https://www.google.com/searchbyimage/upload",
files=file,
files=files,
allow_redirects=False,
)
loc = grs.headers.get("Location")
@@ -188,7 +183,7 @@ async def reverse(event):
caption="Similar Images Realted to Search",
)
rmtree(f"./resources/downloads/{text}/")
os.remove(dl)
os.remove(file)
@ultroid_cmd(
@@ -214,9 +209,9 @@ async def siesace(e):
song, _ = await fast_download(url, filename=title + ".m4a")
thumb, _ = await fast_download(img, filename=title + ".jpg")
song, _ = await e.client.fast_uploader(song, to_delete=True)
await e.reply(
await eve.eor(
file=song,
message=f"`{title}`\n`From Saavn`",
text=f"`{title}`\n`From Saavn`",
attributes=[
DocumentAttributeAudio(
duration=int(duration),

View File

@@ -21,9 +21,9 @@
"""
import os
from pyUltroid._misc import sudoers
from pyUltroid.dB.snips_db import add_snip, get_snips, list_snip, rem_snip
from pyUltroid.functions.tools import create_tl_btn, format_btn, get_msg_button
from pyUltroid.misc import sudoers
from telegraph import upload_file as uf
from telethon.utils import pack_bot_file_id

View File

@@ -40,17 +40,18 @@ from shutil import rmtree
import pytz
from bs4 import BeautifulSoup as bs
from pyUltroid.functions.google_image import googleimagesdownload
from pyUltroid.functions.misc import create_quotly
from pyUltroid.functions.tools import metadata
from telethon.tl.types import DocumentAttributeVideo
from . import (
HNDLR,
async_searcher,
bash,
downloader,
eod,
get_string,
mediainfo,
quotly,
ultroid_bot,
ultroid_cmd,
uploader,
@@ -161,9 +162,8 @@ async def hbd(event):
s = kk[2]
day = int(p)
month = r
paida = q
try:
jn = dt.strptime(paida, "%d/%m/%Y")
jn = dt.strptime(match, "%d/%m/%Y")
except BaseException:
return await event.eor(get_string("spcltool_6"))
jnm = zn.localize(jn)
@@ -234,7 +234,7 @@ async def hbd(event):
f"""
Name -: {name}
D.O.B -: {paida}
D.O.B -: {match}
Lived -: {saal}yr, {mahina}m, {din}d, {ghanta}hr, {mi}min, {slive}sec
@@ -351,7 +351,9 @@ async def quott_(event):
if match == "random":
match = choice(all_col)
try:
file = await create_quotly(reply_, bg=match, reply=replied_to, sender=user)
file = await quotly.create_quotly(
reply_, bg=match, reply=replied_to, sender=user
)
except Exception as er:
return await msg.edit(str(er))
message = await reply.reply("Quotly by Ultroid", file=file)

View File

@@ -27,12 +27,19 @@ import os
import random
from os import remove
import cv2
import numpy as np
import requests
from PIL import Image, ImageDraw
from pyUltroid.functions.misc import create_quotly
from pyUltroid.functions.tools import TgConverter
try:
import cv2
except ImportError:
cv2 = None
try:
import numpy as np
except ImportError:
np = None
try:
from PIL import Image, ImageDraw
except ImportError:
pass
from telethon.errors import PeerIdInvalidError, YouBlockedUserError
from telethon.tl.types import DocumentAttributeFilename, DocumentAttributeSticker
from telethon.utils import get_input_document
@@ -41,12 +48,14 @@ from . import (
KANGING_STR,
LOGS,
asst,
async_searcher,
bash,
con,
functions,
get_string,
inline_mention,
mediainfo,
quotly,
types,
udB,
ultroid_cmd,
@@ -134,7 +143,7 @@ async def hehe(args):
xy = await message.download_media()
if (message.file.duration or 0) <= 10:
is_vid = True
photo = await TgConverter.create_webm(xy)
photo = await con.create_webm(xy)
else:
y = cv2.VideoCapture(xy)
heh, lol = y.read()
@@ -152,7 +161,7 @@ async def hehe(args):
is_anim = True
photo = 1
elif message.message:
photo = await create_quotly(message)
photo = await quotly.create_quotly(message)
else:
return await xx.edit(get_string("com_4"))
if not udB.get_key("language") or udB.get_key("language") == "en":
@@ -192,8 +201,8 @@ async def hehe(args):
file.name = "sticker.png"
image.save(file, "PNG")
response = requests.get(f"http://t.me/addstickers/{packname}")
htmlstr = response.text.split("\n")
response = await async_searcher(f"http://t.me/addstickers/{packname}")
htmlstr = response.split("\n")
if (
" A <strong>Telegram</strong> user has created the <strong>Sticker&nbsp;Set</strong>."
@@ -477,4 +486,4 @@ async def ultiny(event):
)
os.remove(file)
await xx.delete()
os.remove(ik)
os.remove(ik)

View File

@@ -17,7 +17,7 @@
List all sudo users.
"""
from pyUltroid.misc import sudoers
from pyUltroid._misc import sudoers
from telethon.tl.types import User
from . import get_string, inline_mention, udB, ultroid_bot, ultroid_cmd

View File

@@ -41,10 +41,20 @@ import io
import os
from asyncio.exceptions import TimeoutError as AsyncTimeout
import cv2
from google_trans_new import google_translator
from htmlwebshot import WebShot
from pyUltroid.functions.tools import TgConverter, metadata
try:
import cv2
except ImportError:
cv2 = None
try:
from google_trans_new import google_translator
except ImportError:
google_translator = None
try:
from htmlwebshot import WebShot
except ImportError:
WebShot = None
from pyUltroid.functions.tools import metadata
from telethon.errors.rpcerrorlist import MessageTooLongError, YouBlockedUserError
from telethon.tl.types import (
ChannelParticipantAdmin,
@@ -53,7 +63,7 @@ from telethon.tl.types import (
)
from telethon.utils import pack_bot_file_id
from . import HNDLR, async_searcher, bash, eor, get_string
from . import HNDLR, async_searcher, bash, con, eor, get_string
from . import humanbytes as hb
from . import inline_mention, is_url_ok, mediainfo, ultroid_cmd
@@ -220,7 +230,7 @@ async def _(e):
msg = await e.eor("**Creating video note**")
file = await reply.download_media("resources/downloads/")
if file.endswith(".webm"):
nfile = await TgConverter.ffmpeg_convert(file, "file.mp4")
nfile = await con.ffmpeg_convert(file, "file.mp4")
os.remove(file)
file = nfile
if file:
@@ -246,9 +256,9 @@ async def _(e):
if not files:
files = "*"
elif files.endswith("/"):
files = files + "*"
files += "*"
elif "*" not in files:
files = files + "/*"
files += "/*"
files = glob.glob(files)
if not files:
return await e.eor("`Directory Empty or Incorrect.`", time=5)
@@ -455,4 +465,4 @@ async def magic(event):
return await event.eor("**ERROR :** `{}`".format(response["message"]))
await event.eor(
f"• **Ultroid Tiny**\n• Given Url : {url}\n• Shorten Url : {data['response']['tinyUrl']}"
)
)

View File

@@ -21,26 +21,32 @@ import math
import shutil
from random import choice
import heroku3
import psutil
import requests
from pyUltroid.functions import some_random_headers
from . import HOSTED_ON, Var, get_string, humanbytes, udB, ultroid_cmd
from . import (
HOSTED_ON,
LOGS,
Var,
async_searcher,
get_string,
humanbytes,
udB,
ultroid_cmd,
)
HEROKU_API = None
HEROKU_APP_NAME = None
heroku_api, app_name = Var.HEROKU_API, Var.HEROKU_APP_NAME
try:
if heroku_api and app_name:
HEROKU_API = heroku_api
HEROKU_APP_NAME = app_name
Heroku = heroku3.from_key(heroku_api)
app = Heroku.app(app_name)
except BaseException:
HEROKU_API = None
HEROKU_APP_NAME = None
if HOSTED_ON == "heroku":
heroku_api, app_name = Var.HEROKU_API, Var.HEROKU_APP_NAME
try:
if heroku_api and app_name:
Heroku = heroku3.from_key(heroku_api)
app = Heroku.app(app_name)
HEROKU_API = heroku_api
HEROKU_APP_NAME = app_name
except BaseException as er:
LOGS.exception(er)
@ultroid_cmd(pattern="usage")
@@ -54,13 +60,17 @@ async def usage_finder(event):
if opt == "db":
await x.edit(db_usage())
elif opt == "heroku":
is_hk, hk = heroku_usage()
is_hk, hk = await heroku_usage()
await x.edit(hk)
else:
await x.edit(get_full_usage())
await x.edit(await get_full_usage())
def simple_usage():
try:
import psutil
except ImportError:
return "Install 'psutil' to use this..."
total, used, free = shutil.disk_usage(".")
cpuUsage = psutil.cpu_percent()
memory = psutil.virtual_memory().percent
@@ -82,7 +92,14 @@ def simple_usage():
)
def heroku_usage():
async def heroku_usage():
try:
import psutil
except ImportError:
return (
False,
"'psutil' not installed!\nPlease Install it to use this.\n`pip3 install psutil`",
)
if not (HEROKU_API and HEROKU_APP_NAME):
if HOSTED_ON == "heroku":
return False, "Please fill `HEROKU_API` and `HEROKU_APP_NAME`"
@@ -97,13 +114,10 @@ def heroku_usage():
"Accept": "application/vnd.heroku+json; version=3.account-quotas",
}
her_url = f"https://api.heroku.com/accounts/{user_id}/actions/get-quota"
r = requests.get(her_url, headers=headers)
if r.status_code != 200:
return (
True,
f"**ERROR**\n`{r.reason}`",
)
result = r.json()
try:
result = await async_searcher(her_url, headers=headers, re_json=True)
except Exception as er:
return False, str(er)
quota = result["account_quota"]
quota_used = result["quota_used"]
remaining_quota = quota - quota_used
@@ -164,8 +178,8 @@ def db_usage():
return f"**{udB.name}**\n\n**Storage Used**: `{a}`\n**Usage percentage**: **{b}**"
def get_full_usage():
is_hk, hk = heroku_usage()
async def get_full_usage():
is_hk, hk = await heroku_usage()
her = hk if is_hk else ""
rd = db_usage()
return her + "\n\n" + rd

View File

@@ -55,17 +55,19 @@ import os
import time
from datetime import datetime as dt
import pygments
try:
from PIL import Image
except ImportError:
Image = None
from pygments.formatters import ImageFormatter
from pygments.lexers import Python3Lexer
from pyUltroid._misc._assistant import asst_cmd
from pyUltroid.dB.gban_mute_db import is_gbanned
from pyUltroid.misc._assistant import asst_cmd
from telegraph import upload_file as uf
try:
from telegraph import upload_file as uf
except ImportError:
uf = None
from telethon.errors.rpcerrorlist import UserBotError
from telethon.events import NewMessage
from telethon.tl.custom import Dialog
@@ -515,7 +517,7 @@ async def _(event):
msg = getattr(msg, match)
if hasattr(msg, "to_json"):
try:
msg = json_parser(msg.to_json(), indent=1)
msg = json_parser(msg.to_json(ensure_ascii=False), indent=1)
except Exception as e:
LOGS.exception(e)
msg = str(msg)
@@ -670,6 +672,14 @@ async def thumb_dl(event):
@ultroid_cmd(pattern="ncode$")
async def coder_print(event):
try:
import pygments
from pygments.formatters import ImageFormatter
from pygments.lexers import Python3Lexer
except ImportError:
return await event.eor(
"`pygments` `not installed!`\nInstall it with `pip3 install pygments`"
)
if not event.reply_to_msg_id:
return await eod(event, "`Reply to a file or message!`", time=5)
msg = await event.get_reply_message()

View File

@@ -60,7 +60,7 @@ async def gen_sample(e):
)
await xxx.delete()
else:
await e.eor(get_string("videotools_8"), time=5)
await e.eor(get_string("audiotools_8"), time=5)
@ultroid_cmd(pattern="vshots( (.*)|$)")

View File

@@ -16,7 +16,7 @@ import os
from pyUltroid.functions.tools import _webupload_cache
from . import asst, get_string, ultroid_cmd
from . import Button, asst, get_string, ultroid_cmd
@ultroid_cmd(
@@ -38,7 +38,7 @@ async def _(event):
_webupload_cache[int(event.chat_id)][int(event.id)] = file
else:
file, _ = await event.client.fast_downloader(
reply.document, reply.file.name, show_progress=True, event=xx
reply.document, show_progress=True, event=xx
)
_webupload_cache[int(event.chat_id)][int(event.id)] = file.name
else:

View File

@@ -41,12 +41,12 @@ async def mean(event):
defi = out[0]["meanings"][0]["definitions"][0]
ex = "None" if not defi.get("example") else defi["example"]
text = get_string("wrd_1").format(wrd, defi["definition"], ex)
if defi["synonyms"]:
if defi.get("synonyms"):
text += (
f"\n\n• **{get_string('wrd_5')} :**"
+ "".join(f" {a}," for a in defi["synonyms"])[:-1][:10]
)
if defi["antonyms"]:
if defi.get("antonyms"):
text += (
f"\n\n**{get_string('wrd_6')} :**"
+ "".join(f" {a}," for a in defi["antonyms"])[:-1][:10]

View File

@@ -7,10 +7,10 @@
"""
✘ Commands Available -
• `{i}yta <(youtube) link>`
• `{i}yta <(youtube/any) link>`
Download audio from the link.
• `{i}ytv <(youtube) link>`
• `{i}ytv <(youtube/any) link>`
Download video from the link.
• `{i}ytsa <(youtube) search query>`
@@ -39,14 +39,6 @@ async def download_from_youtube_(event):
if opt == "a":
ytd["format"] = "bestaudio"
ytd["outtmpl"] = "%(id)s.m4a"
ytd["postprocessors"] = [
{
"key": "FFmpegExtractAudio",
"preferredcodec": "mp3",
"preferredquality": "128",
},
{"key": "FFmpegMetadata"},
]
url = event.pattern_match.group(2)
if not url:
return await xx.eor(get_string("youtube_1"))
@@ -68,19 +60,13 @@ async def download_from_youtube_(event):
elif opt == "sa":
ytd["format"] = "bestaudio"
ytd["outtmpl"] = "%(id)s.m4a"
ytd["postprocessors"] = [
{
"key": "FFmpegExtractAudio",
"preferredcodec": "mp3",
"preferredquality": "128",
},
{"key": "FFmpegMetadata"},
]
try:
query = event.text.split(" ", 1)[1]
except IndexError:
return await xx.eor(get_string("youtube_5"))
url = get_yt_link(query)
if not url:
return await xx.edit(get_string("unspl_1"))
await xx.eor(get_string("youtube_6"))
elif opt == "sv":
ytd["format"] = "best"
@@ -91,6 +77,8 @@ async def download_from_youtube_(event):
except IndexError:
return await xx.eor(get_string("youtube_7"))
url = get_yt_link(query)
if not url:
return await xx.edit(get_string("unspl_1"))
await xx.eor(get_string("youtube_8"))
else:
return

View File

@@ -1,5 +1,5 @@
# Important Requirements here.
https://github.com/New-dev0/Telethon/archive/Artifact.zip
py-Ultroid==2022.2.10
https://github.com/New-dev0/Telethon/archive/PlayTime.zip
py-Ultroid==2022.3.20
pytgcalls==3.0.0.dev21

View File

@@ -0,0 +1,255 @@
# /usr/bin/python3
# Ultroid - UserBot
# Copyright (C) 2021-2022 TeamUltroid
#
# This file is a part of < https://github.com/TeamUltroid/Ultroid/ >
# Please read the GNU Affero General Public License in
# <https://www.github.com/TeamUltroid/Ultroid/blob/main/LICENSE/>.
from os import system, path
from time import sleep
from datetime import datetime
from colorama import Style, Fore, Back
# clear screen
def clear():
system("clear")
MANDATORY_REQS = [
"https://github.com/New-dev0/Telethon/archive/PlayTime.zip",
"py-Ultroid==2022.3.20",
"gitpython",
"enhancer==0.3.4",
"telegraph",
"aiohttp"
]
OPT_PACKAGES = {
"bs4":"Used for site-scrapping (used in commands like - .gadget and many more)",
"yt-dlp": "Used for Youtuble Related Downloads...",
"youtube-search-python": "Used for youtube video search..",
"pillow": "Used for Image-Conversion related task. (size - approx 50mb ) (required for kang, convert and many more.)",
"psutil": "Used for .usage command.",
"lottie":"Used for animated sticker related conversion.",
"apscheduler":"Used in autopic/nightmode (scheduling tasks.)",
"git+https://github.com/1danish-00/google_trans_new.git": "Used for translation purposes."
}
APT_PACKAGES = [
"ffmpeg",
"neofetch",
"mediainfo"
]
DISCLAIMER_TEXT = ""
COPYRIGHT = f"©️ TeamUltroid {datetime.now().year}"
HEADER = f"""{Fore.MAGENTA}
╔╗ ╔╗╔╗ ╔╗ ╔╗
║║ ║║║║ ╔╝╚╗ ║║
║║ ║║║║ ╚╗╔╝╔═╗╔══╗╔╗╔═╝║
║║ ║║║║ ║║ ║╔╝║╔╗║╠╣║╔╗║
║╚═╝║║╚╗ ║╚╗║║ ║╚╝║║║║╚╝║
╚═══╝╚═╝ ╚═╝╚╝ ╚══╝╚╝╚══╝\n{Fore.RESET}
"""
INFO_TEXT = f"""
{Fore.GREEN}# Important points to know.
{Fore.YELLOW}1. This script will just install basic requirements because of which some command whose requirements are missing won't work. You can view all optional requirements in (./resources/startup/optional-requirements.txt)
2. You can install that requirement whenever you want with 'pip install' (a very basic python+bash knowledge is required.)
3. Some of the plugins are disabled for 'Termux Users' to save resources (by adding in EXCLUDE_OFFICIAL).
- Read More - https://t.me/UltroidUpdates/36
- Also, way to enable the disabled plugins is mentioned in that post.
# Disabled Plugins Name
- autocorrect - compressor
- Gdrive - instagram
- nsfwfilter - glitch
- pdftools - writer
- youtube - megadl
- autopic - nightmode
- blacklist - forcesubscribe
4. You can't use 'VCBOT' on Termux.
5. You can't use 'MongoDB' on Termux (Android).
{Fore.RESET}
* Hope you are smart enought to understand.
* Enter 'A' to Continue, 'E' to Exit..\n
"""
def ask_and_wait(text, header:bool=False):
if header:
text = with_header(text)
print(text + "\nPress 'ANY Key' to Continue or 'Ctrl+C' to exit...\n")
input("")
def with_header(text):
return HEADER + "\n\n" + text
def yes_no_apt():
yes_no = input("").strip().lower()
if yes_no in ["yes", "y"]:
return True
elif yes_no in ["no", "n"]:
return False
print("Invalid Input\nRe-Enter: ")
return yes_no_apt()
def ask_process_info_text():
strm = input("").lower().strip()
if strm == "e":
print("Exiting...")
exit(0)
elif strm == "a":
pass
else:
print("Invalid Input")
print("Enter 'A' to Continue or 'E' to exit...")
ask_process_info_text()
def ask_process_apt_install():
strm = input("").lower().strip()
if strm == "e":
print("Exiting...")
exit(0)
elif strm == "a":
for apt in APT_PACKAGES:
print(f"* Do you want to install '{apt}'? [Y/N] ")
if yes_no_apt():
print(f"Installing {apt}...")
system(f"apt install {apt} -y")
else:
print(f"- Discarded {apt}.\n")
elif strm == "i":
names = " ".join(APT_PACKAGES)
print("Installing all apt-packages...")
system(f"apt install {names} -y")
elif strm == "s":
pass
else:
print("Invalid Input\n* Enter Again...")
ask_process_apt_install()
def ask_and_wait_opt():
strm = input("").strip().lower()
if strm == "e":
print("Exiting...")
exit(0)
elif strm == "a":
for opt in OPT_PACKAGES.keys():
print(f"* {Fore.YELLOW}Do you want to install '{opt}'? [Y/N]\n- {OPT_PACKAGES[opt]}")
if yes_no_apt():
print(f"Installing {opt}...")
system(f"pip install {opt}")
else:
print(f"{Fore.YELLOW}- Discarded {opt}.\n")
elif strm == "i":
names = " ".join(OPT_PACKAGES.keys())
print(f"{Fore.YELLOW}Installing all packages...")
system(f"pip install {names}")
elif strm == "s":
pass
else:
print("Invalid Input\n* Enter Again...")
ask_and_wait_opt()
def ask_make_env():
strm = input("").strip().lower()
if strm in ["yes", "y"]:
print(f"{Fore.YELLOW}* Creating .env file..")
with open(".env", "a") as file:
for var in ["API_ID", "API_HASH", "SESSION", "REDIS_URI", "REDIS_PASSWORD"]:
inp = input(f"Enter {var}\n- ")
file.write(f"{var}={inp}\n")
print("* Created '.env' file successfully! 😃")
else:
print("OK!")
# ------------------------------------------------------------------------------------------ #
clear()
print(
f"""
{Fore.BLACK}{Back.WHITE} _____________
▄▄ ▄▄ ▄▄▄ ▄▄▄▄▄▄▄ ▄▄▄▄▄▄ ▄▄▄▄▄▄▄ ▄▄▄ ▄▄▄▄▄▄
█ █ █ █ █ █ █ ▄ █ █ █ █ █
█ █ █ █ █ █▄ ▄█ █ █ █ █ ▄ █ █ ▄ █
█ █▄█ █ █ █ █ █ █▄▄█▄█ █ █ █ █ █ █ █
█ █ █▄▄▄ █ █ █ ▄▄ █ █▄█ █ █ █▄█ █
█ █ █ █ █ █ █ █ █ █ █ █
█▄▄▄▄▄▄▄█▄▄▄▄▄▄▄█ █▄▄▄█ █▄▄▄█ █▄█▄▄▄▄▄▄▄█▄▄▄█▄▄▄▄▄▄█
{Style.RESET_ALL}
{Fore.GREEN}- ULTROID Termux Installation -
The Main Aim of this script is to deploy Ultroid with basic requirements and save your phone resources.
{Fore.RESET}
{COPYRIGHT}
"""
)
print("Press 'Any Key' to continue...")
input("")
clear()
print(with_header(INFO_TEXT))
ask_process_info_text()
clear()
print(with_header("Installing Mandatory requirements..."))
all_ = " ".join(MANDATORY_REQS)
system(f"pip install {all_}")
clear()
print(with_header(f"\n{Fore.GREEN}# Moving toward Installing Apt-Packages{Fore.RESET}\n\n"))
print("---Enter---")
print(" - A = 'Ask Y/N for each'.")
print(" - I = 'Install all'")
print(" - S = 'Skip Apt installation.'")
print(" - E = Exit.\n")
ask_process_apt_install()
clear()
print(
with_header(f"""
{Fore.YELLOW}# Installing other non mandatory requirements.
(You can Install them, if you want command using them to work!){Fore.RESET}
{'- '.join(list(OPT_PACKAGES.keys()))}
Enter [ A = Ask for each, I = Install all, S = Skip, E = Exit]""")
)
ask_and_wait_opt()
print(f"\n{Fore.RED}#EXTRA Features...\n")
print(f"{Fore.YELLOW}* Do you want to get Ultroid Logs in Colors? [Y/N] ")
inp = input("").strip().lower()
if inp in ["yes", "y"]:
print(f"{Fore.GREEN}*Spoking the Magical Mantras*")
system("pip install coloredlogs")
else:
print("Skipped!")
clear()
if not path.exists(".env"):
print(with_header("# Do you want to move toward creating .env file ? [y/N] "))
ask_make_env()
print(with_header(f"\n{Fore.GREEN}You are all Done! 🥳"))
sleep(0.2)
print(f"Use 'bash startup' to try running Ultroid.{Fore.RESET}")
sleep(0.5)
print("\nYou can head over to @UltroidSupport, if you get stuck somewhere, and need help.")
sleep(0.5)
print("\nMade with ❤️ by @TeamUltroid...")
system("pip3 uninstall colorama -y")

View File

@@ -3,40 +3,42 @@
akinator.py
apscheduler
aiohttp
aiofiles
bs4
cairosvg
cfscrape
enhancer==0.3.4
enhancer>=0.3.4
gingerit
git+https://github.com/1danish-00/google_trans_new.git
git+https://github.com/New-dev0/instagrapi.git
git+https://github.com/buddhhu/img2html.git
git+https://github.com/programmingerror/heroku3.py.git
gitpython==3.1.23
google-api-python-client==2.31.0
html-telegraph-poster==0.4.0
htmlwebshot==0.1.2
lottie==0.6.9
multiprocess==0.70.12.2
numpy==1.21.2
oauth2client==4.1.3
gitpython
google-api-python-client
html-telegraph-poster
htmlwebshot
lottie
multiprocess
numpy>=1.21.2
oauth2client
opencv-python-headless
pillow>=7.0.0
profanitydetector
psutil==5.8.0
psutil
psycopg2-binary
pygments
pymongo[srv]
pypdf2==1.26.0
pytz==2021.1
pyyaml==5.4.1
qrcode==7.3
requests==2.26.0
scikit-image==0.18.2
tabulate==0.8.9
pypdf2>=1.26.0
pytz
pyyaml>=5.4.1
qrcode
requests
scikit-image
tabulate
telegraph
tgcrypto
youtube-search-python==1.6.1
youtube-search-python
yt-dlp
pygments
python-Levenshtein

View File

@@ -0,0 +1,19 @@
printf "Updating System..\n\n"
pkg update -y
apt update
apt upgrade -y
python_not_installed="$(python -c 'exit()')"
# Install Python if n0t installed..
if [ python_not_installed ]
then
printf "Installing Python..\nThis may take some long...\n"
pkg install python3 -y
fi
printf "*Putting some magical effect...*"
pip install colorama
printf "Running up Installation tool.\n"
python resources/startup/_termux.py

View File

@@ -4,28 +4,28 @@
| Code | Language | Translated | Remaining |
|----|-------|-------|---|
| en | English [English] | 413 | 0 |
| ka | Kannada [ಕನ್ನಡ] | 114 | 299 |
| bn | bengoli [বাংলা] | 114 | 299 |
| od | Odia [ଓଡିଆ] | 114 | 299 |
| ru | Russian [Русский] | 413 | 0 |
| pt-br | Portuguese [Português] | 413 | 0 |
| my | Malay [Bahasa Melayu] | 114 | 299 |
| jp | Japanese [日本] | 416 | -3 |
| tr | Turkish [Türk] | 114 | 299 |
| si | sinhala [සිංහල] | 114 | 299 |
| ka | Kannada [ಕನ್ನಡ] | 112 | 301 |
| bn | Bengali [বাংলা] | 382 | 31 |
| od | Odia [ଓଡିଆ] | 112 | 301 |
| ru | Russian [Русский] | 411 | 2 |
| pt-br | Portuguese [Português] | 413 | NULL |
| my | Malay [Bahasa Melayu] | 112 | 301 |
| jp | Japanese [日本] | 413 | NULL |
| tr | Turkish [Türk] | 112 | 301 |
| si | sinhala [සිංහල] | 112 | 301 |
| fa | Persian [Farsi] | 391 | 22 |
| hi | Hindi [हिंदी] | 410 | 3 |
| hi | Hindi [हिंदी] | 413 | NULL |
| az | Azerbaijan [Azərbaycan] | 382 | 31 |
| id | Indonesia [Indonesia] | 413 | 0 |
| cn | Chinese [简体中文] | 114 | 299 |
| ta | தமிழ் [தமிழ்] | 114 | 299 |
| mr | Marathi [मराठी] | 114 | 299 |
| ar | Arabic [العربية] | 413 | 0 |
| it | Italian [italiano] | 113 | 300 |
| gu | Gujarati [ગુજરાતી] | 111 | 302 |
| ml | Malayalam [മലയാളം] | 114 | 299 |
| es | Spanish [Español] | 114 | 299 |
| id | Indonesia [Indonesia] | 413 | NULL |
| cn | Chinese [简体中文] | 112 | 301 |
| ta | தமிழ் [தமிழ்] | 112 | 301 |
| mr | Marathi [मराठी] | 131 | 282 |
| ar | Arabic [العربية] | 411 | 2 |
| it | Italian [italiano] | 111 | 302 |
| gu | Gujarati [ગુજરાતી] | 109 | 304 |
| ml | Malayalam [മലയാളം] | 112 | 301 |
| es | Spanish [Español] | 409 | 4 |
If Strings are not present, Google Translation will be used to Translate them at time of Usage.
<br>• Remaining Strings can be found [here](./remaining.csv) for easy sort out.
<br>• Remaining Strings can be found [here](./remaining.csv) for easy sort out.

View File

@@ -1,308 +1,310 @@
-,Arabic,Azerbaijan,bengoli,Chinese,Spanish,Persian,Gujarati,Hindi,Indonesia,Italian,Japanese,Kannada,Malayalam,Marathi,Malay,Odia,Portuguese,Russian,sinhala,தமிழ்,Turkish
com_3,,,,,,,,,,,,,,,,,,,,,
com_4,,,,,,,,,,,,,,,,,,,,,
com_5,,,,,,,,,,,,,,,,,,,,,
com_6,,,,,,,,,,,,,,,,,,,,,
com_7,,,,,,,,,,,,,,,,,,,,,
can_1,,,,,,,,,,,,,,,,,,,,,
can_2,,,,,,,,,,,,,,,,,,,,,
can_3,,,,,,,,,,,,,,,,,,,,,
can_4,,,,,,,,,,,,,,,,,,,,,
help_4,,,,,,,,,,,,,,,,,,,,,
help_5,,,,,,,,,,,,,,,,,,,,,
help_6,,,,,,,,,,,,,,,,,,,,,
help_7,,,,,,,,,,,,,,,,,,,,,
help_8,,,,,,,,,,,,,,,,,,,,,
help_9,,,,,,,,,,,,,,,,,,,,,
help_10,,,,,,,,,,,,,,,,,,,,,
help_11,,,,,,,,,,,,,,,,,,,,,
help_12,,,,,,,,,,,,,,,,,,,,,
help_13,,,,,,,,,,,,,,,,,,,,,
userlogs_1,,,,,,,,,,,,,,,,,,,,,
userlogs_2,,,,,,,,,,,,,,,,,,,,,
userlogs_3,,,,,,,,,,,,,,,,,,,,,
userlogs_4,,,,,,,,,,,,,,,,,,,,,
userlogs_5,,,,,,,,,,,,,,,,,,,,,
adm_1,,,,,,,,,,,,,,,,,,,,,
adm_2,,,,,,,,,,,,,,,,,,,,,
adm_3,,,,,,,,,,,,,,,,,,,,,
pro_1,,,,,,,,,,,,,,,,,,,,,
pro_2,,,,,,,,,,,,,,,,,,,,,
de_1,,,,,,,,,,,,,,,,,,,,,
de_2,,,,,,,,,,,,,,,,,,,,,
ban_1,,,,,,,,,,,,,,,,,,,,,
ban_2,,,,,,,,,,,,,,,,,,,,,
ban_3,,,,,,,,,,,,,,,,,,,,,
ban_4,,,,,,,,,,,,,,,,,,,,,
ban_5,,,,,,,,,,,,,,,,,,,,,
tban_1,,,,,,,,,,,,,,,,,,,,,
tban_2,,,,,,,,,,,,,,,,,,,,,
unban_1,,,,,,,,,,,,,,,,,,,,,
unban_2,,,,,,,,,,,,,,,,,,,,,
unban_3,,,,,,,,,,,,,,,,,,,,,
kick_1,,,,,,,,,,,,,,,,,,,,,
kick_2,,,,,,,,,,,,,,,,,,,,,
kick_3,,,,,,,,,,,,,,,,,,,,,
kick_4,,,,,,,,,,,,,,,,,,,,,
pin_1,,,,,,,,,,,,,,,,,,,,,
pinned_1,,,,,,,,,,,,,,,,,,,,,
pinned_2,,,,,,,,,,,,,,,,,,,,,
unpin_1,,,,,,,,,,,,,,,,,,,,,
listpin_1,,,,,,,,,,,,,,,,,,,,,
purge_1,,,,,,,,,,,,,,,,,,,,,
purgeall_1,,,,,,,,,,,,,,,,,,,,,
purgeall_2,,,,,,,,,,,,,,,,,,,,,
aki_1,,,,,,,,,,,,,,,,,,,,,
aki_2,,,,,,,,,,,,,,,,,,,,,
aki_3,,,,,,,,,,,,,,,,,,,,,
antiflood_1,,,,,,,,,,,,,,,,,,,,,
antiflood_2,,,,,,,,,,,,,,,,,,,,,
antiflood_3,,,,,,,,,,,,,,,,,,,,,
antiflood_4,,,,,,,,,,,,,,,,,,,,,
antiflood_5,,,,,,,,,,,,,,,,,,,,,
ascii_1,,,,,,,,,,,,,,,,,,,,,
ascii_2,,,,,,,,,,,,,,,,,,,,,
audiotools_1,,,,,,,,,,,,,,,,,,,,,
audiotools_2,,,,,,,,,,,,,,,,,,,,,
audiotools_3,,,,,,,,,,,,,,,,,,,,,
audiotools_4,,,,,,,,,,,,,,,,,,,,,
audiotools_5,,,,,,,,,,,,,,,,,,,,,
audiotools_6,,,,,,,,,,,,,,,,,,,,,
audiotools_7,,,,,,,,,,,,,,,,,,,,,
audiotools_8,,,,,,,,,,,,,,,,,,,,,
audiotools_9,,,,,,,,,,,,,,,,,,,,,
audiotools_10,,,,,,,,,,,,,,,,,,,,,
asstcmd_1,,,,,,,,,,,,,,,,,,,,,
asstcmd_2,,,,,,,,,,,,,,,,,,,,,
asstcmd_3,,,,,,,,,,,,,,,,,,,,,
asstcmd_4,,,,,,,,,,,,,,,,,,,,,
asstcmd_5,,,,,,,,,,,,,,,,,,,,,
asstcmd_6,,,,,,,,,,,,,,,,,,,,,
act_1,,,,,,,,,,,,,,,,,,,,,
act_2,,,,,,,,,,,,,,,,,,,,,
autopic_4,,,,,,,,,,,,,,,,,,,,,
autopic_5,,,,,,,,,,,,,,,,,,,,,
inline_6,,,,,,,,,,,,,,,,,,,,,
inline_7,,,,,,,,,,,,,,,,,,,,,
inline_8,,,,,,,,,,,,,,,,,,,,,
inline_9,,,,,,,,,,,,,,,,,,,,,
wspr_3,,,,,,,,,,,,,,,,,,,,,
wspr_4,,,,,,,,,,,,,,,,,,,,,
wspr_5,,,,,,,,,,,,,,,,,,,,,
bot_1,,,,,,,,,,,,,,,,,,,,,
bot_2,,,,,,,,,,,,,,,,,,,,,
bot_3,,,,,,,,,,,,,,,,,,,,,
bot_4,,,,,,,,,,,,,,,,,,,,,
bot_5,,,,,,,,,,,,,,,,,,,,,
-,Arabic,Azerbaijan,Bengali,Chinese,Spanish,Persian,Gujarati,Hindi,Indonesia,Italian,Japanese,Kannada,Malayalam,Marathi,Malay,Odia,Portuguese,Russian,sinhala,தமிழ்,Turkish
com_3,,,,,,,,,,,,,,,,,,,,,
com_4,,,,,,,,,,,,,,,,,,,,,
com_5,,,,,,,,,,,,,,,,,,,,,
com_6,,,,,,,,,,,,,,,,,,,,,
com_7,,,,,,,,,,,,,,,,,,,,,
can_1,,,,,,,,,,,,,,,,,,,,,
can_2,,,,,,,,,,,,,,,,,,,,,
can_3,,,,,,,,,,,,,,,,,,,,,
can_4,,,,,,,,,,,,,,,,,,,,,
help_4,,,,,,,,,,,,,,,,,,,,,
help_5,,,,,,,,,,,,,,,,,,,,,
help_6,,,,,,,,,,,,,,,,,,,,,
help_7,,,,,,,,,,,,,,,,,,,,,
help_8,,,,,,,,,,,,,,,,,,,,,
help_9,,,,,,,,,,,,,,,,,,,,,
help_10,,,,,,,,,,,,,,,,,,,,,
help_11,,,,,,,,,,,,,,,,,,,,,
help_12,,,,,,,,,,,,,,,,,,,,,
help_13,,,,,,,,,,,,,,,,,,,,,
userlogs_1,,,,,,,,,,,,,,,,,,,,,
userlogs_2,,,,,,,,,,,,,,,,,,,,,
userlogs_3,,,,,,,,,,,,,,,,,,,,,
userlogs_4,,,,,,,,,,,,,,,,,,,,,
userlogs_5,,,,,,,,,,,,,,,,,,,,,
adm_1,,,,,,,,,,,,,,,,,,,,,
adm_2,,,,,,,,,,,,,,,,,,,,,
adm_3,,,,,,,,,,,,,,,,,,,,,
pro_1,,,,,,,,,,,,,,,,,,,,,
pro_2,,,,,,,,,,,,,,,,,,,,,
de_1,,,,,,,,,,,,,,,,,,,,,
de_2,,,,,,,,,,,,,,,,,,,,,
ban_1,,,,,,,,,,,,,,,,,,,,,
ban_2,,,,,,,,,,,,,,,,,,,,,
ban_3,,,,,,,,,,,,,,,,,,,,,
ban_4,,,,,,,,,,,,,,,,,,,,,
ban_5,,,,,,,,,,,,,,,,,,,,,
tban_1,,,,,,,,,,,,,,,,,,,,,
tban_2,,,,,,,,,,,,,,,,,,,,,
unban_1,,,,,,,,,,,,,,,,,,,,,
unban_2,,,,,,,,,,,,,,,,,,,,,
unban_3,,,,,,,,,,,,,,,,,,,,,
kick_1,,,,,,,,,,,,,,,,,,,,,
kick_2,,,,,,,,,,,,,,,,,,,,,
kick_3,,,,,,,,,,,,,,,,,,,,,
kick_4,,,,,,,,,,,,,,,,,,,,,
pin_1,,,,,,,,,,,,,,,,,,,,,
pinned_1,,,,,,,,,,,,,,,,,,,,,
pinned_2,,,,,,,,,,,,,,,,,,,,,
unpin_1,,,,,,,,,,,,,,,,,,,,,
listpin_1,,,,,,,,,,,,,,,,,,,,,
purge_1,,,,,,,,,,,,,,,,,,,,,
purgeall_1,,,,,,,,,,,,,,,,,,,,,
purgeall_2,,,,,,,,,,,,,,,,,,,,,
aki_1,,,,,,,,,,,,,,,,,,,,,
aki_2,,,,,,,,,,,,,,,,,,,,,
aki_3,,,,,,,,,,,,,,,,,,,,,
antiflood_1,,,,,,,,,,,,,,,,,,,,,
antiflood_2,,,,,,,,,,,,,,,,,,,,,
antiflood_3,,,,,,,,,,,,,,,,,,,,,
antiflood_4,,,,,,,,,,,,,,,,,,,,,
antiflood_5,,,,,,,,,,,,,,,,,,,,,
ascii_1,,,,,,,,,,,,,,,,,,,,,
ascii_2,,,,,,,,,,,,,,,,,,,,,
audiotools_1,,,,,,,,,,,,,,,,,,,,,
audiotools_2,,,,,,,,,,,,,,,,,,,,,
audiotools_3,,,,,,,,,,,,,,,,,,,,,
audiotools_4,,,,,,,,,,,,,,,,,,,,,
audiotools_5,,,,,,,,,,,,,,,,,,,,,
audiotools_6,,,,,,,,,,,,,,,,,,,,,
audiotools_7,,,,,,,,,,,,,,,,,,,,,
audiotools_8,,,,,,,,,,,,,,,,,,,,,
audiotools_9,,,,,,,,,,,,,,,,,,,,,
audiotools_10,,,,,,,,,,,,,,,,,,,,,
asstcmd_1,,,,,,,,,,,,,,,,,,,,,
asstcmd_2,,,,,,,,,,,,,,,,,,,,,
asstcmd_3,,,,,,,,,,,,,,,,,,,,,
asstcmd_4,,,,,,,,,,,,,,,,,,,,,
asstcmd_5,,,,,,,,,,,,,,,,,,,,,
asstcmd_6,,,,,,,,,,,,,,,,,,,,,
act_1,,,,,,,,,,,,,,,,,,,,,
act_2,,,,,,,,,,,,,,,,,,,,,
autopic_4,,,,,,,,,,,,,,,,,,,,,
autopic_5,,,,,,,,,,,,,,,,,,,,,
inline_6,,,,,,,,,,,,,,,,,,,,,
inline_7,,,,,,,,,,,,,,,,,,,,,
inline_8,,,,,,,,,,,,,,,,,,,,,
inline_9,,,,,,,,,,,,,,,,,,,,,
wspr_3,,,,,,,,,,,,,,,,,,,,,
wspr_4,,,,,,,,,,,,,,,,,,,,,
wspr_5,,,,,,,,,,,,,,,,,,,,,
bot_1,,,,,,,,,,,,,,,,,,,,,
bot_2,,,,,,,,,,,,,,,,,,,,,
bot_3,,,,,,,,,,,,,,,,,,,,,
bot_4,,,,,,,,,,,,,,,,,,,,,
bot_5,,,,,,,,,,,,,,,,,,,,,
log,,,,,,,,,,,,,,,,,,,,,
ping,,,,,,,,,,,,,,,,,,,,,
usage,,,,,,,,,,,,,,,,,,,,,
usage_simple,,,,,,,,,,,,,,,,,,,,,
usage_simple,,,,,,,,,,,,,,,,,,,,,
shutdown,,,,,,,,,,,,,,,,,,,,,
blk_1,,,,,,,,,,,,,,,,,,,,,
blk_2,,,,,,,,,,,,,,,,,,,,,
blk_3,,,,,,,,,,,,,,,,,,,,,
blk_4,,,,,,,,,,,,,,,,,,,,,
blk_5,,,,,,,,,,,,,,,,,,,,,
blk_6,,,,,,,,,,,,,,,,,,,,,
bd_7,,,,,,,,,,,,,,,,,,,,,
bd_8,,,,,,,,,,,,,,,,,,,,,
bd_9,,,,,,,,,,,,,,,,,,,,,
calc_1,,,,,,,,,,,,,,,,,,,,,
calc_2,,,,,,,,,,,,,,,,,,,,,
cha_1,,,,,,,,,,,,,,,,,,,,,
cha_2,,,,,,,,,,,,,,,,,,,,,
cha_3,,,,,,,,,,,,,,,,,,,,,
cha_4,,,,,,,,,,,,,,,,,,,,,
cha_5,,,,,,,,,,,,,,,,,,,,,
cha_6,,,,,,,,,,,,,,,,,,,,,
cha_7,,,,,,,,,,,,,,,,,,,,,
cha_8,,,,,,,,,,,,,,,,,,,,,
carbon_3,,,,,,,,,,,,,,,,,,,,,
chab_1,,,,,,,,,,,,,,,,,,,,,
chab_2,,,,,,,,,,,,,,,,,,,,,
chab_3,,,,,,,,,,,,,,,,,,,,,
blk_1,,,,,,,,,,,,,,,,,,,,,
blk_2,,,,,,,,,,,,,,,,,,,,,
blk_3,,,,,,,,,,,,,,,,,,,,,
blk_4,,,,,,,,,,,,,,,,,,,,,
blk_5,,,,,,,,,,,,,,,,,,,,,
blk_6,,,,,,,,,,,,,,,,,,,,,
bd_7,,,,,,,,,,,,,,,,,,,,,
bd_8,,,,,,,,,,,,,,,,,,,,,
bd_9,,,,,,,,,,,,,,,,,,,,,
calc_1,,,,,,,,,,,,,,,,,,,,,
calc_2,,,,,,,,,,,,,,,,,,,,,
cha_1,,,,,,,,,,,,,,,,,,,,,
cha_2,,,,,,,,,,,,,,,,,,,,,
cha_3,,,,,,,,,,,,,,,,,,,,,
cha_4,,,,,,,,,,,,,,,,,,,,,
cha_5,,,,,,,,,,,,,,,,,,,,,
cha_6,,,,,,,,,,,,,,,,,,,,,
cha_7,,,,,,,,,,,,,,,,,,,,,
cha_8,,,,,,,,,,,,,,,,,,,,,
carbon_3,,,,,,,,,,,,,,,,,,,,,
chab_1,,,,,,,,,,,,,,,,,,,,,
chab_2,,,,,,,,,,,,,,,,,,,,,
chab_3,,,,,,,,,,,,,,,,,,,,,
chats_6,,,,,,,,,,,,,,,,,,,,,
clan_1,,,,,,,,,,,,,,,,,,,,,
clan_2,,,,,,,,,,,,,,,,,,,,,
clan_3,,,,,,,,,,,,,,,,,,,,,
clan_4,,,,,,,,,,,,,,,,,,,,,
clan_5,,,,,,,,,,,,,,,,,,,,,
cvt_5,,,,,,,,,,,,,,,,,,,,,
cvt_6,,,,,,,,,,,,,,,,,,,,,
cvt_7,,,,,,,,,,,,,,,,,,,,,
cvt_8,,,,,,,,,,,,,,,,,,,,,
eod_1,,,,,,,,,,,,,,,,,,,,,
eod_2,,,,,,,,,,,,,,,,,,,,,
devs_1,,,,,,,,,,,,,,,,,,,,,
devs_2,,,,,,,,,,,,,,,,,,,,,
devs_3,,,,,,,,,,,,,,,,,,,,,
dm_1,,,,,,,,,,,,,,,,,,,,,
dm_2,,,,,,,,,,,,,,,,,,,,,
dm_3,,,,,,,,,,,,,,,,,,,,,
dm_4,,,,,,,,,,,,,,,,,,,,,
dm_5,,,,,,,,,,,,,,,,,,,,,
dm_6,,,,,,,,,,,,,,,,,,,,,
echo_1,,,,,,,,,,,,,,,,,,,,,
fka_1,,,,,,,,,,,,,,,,,,,,,
sf_22,,,,,,,,,,,,,,,,,,,,,
sf_23,,,,,,,,,,,,,,,,,,,,,
flr_1,,,,,,,,,,,,,,,,,,,,,
flr_2,,,,,,,,,,,,,,,,,,,,,
flr_3,,,,,,,,,,,,,,,,,,,,,
flr_4,,,,,,,,,,,,,,,,,,,,,
flr_5,,,,,,,,,,,,,,,,,,,,,
flr_6,,,,,,,,,,,,,,,,,,,,,
fgn_1,,,,,,,,,,,,,,,,,,,,,
fsub_1,,,,,,,,,,,,,,,,,,,,,
fsub_2,,,,,,,,,,,,,,,,,,,,,
fsub_3,,,,,,,,,,,,,,,,,,,,,
fsub_4,,,,,,,,,,,,,,,,,,,,,
fsub_5,,,,,,,,,,,,,,,,,,,,,
fsub_6,,,,,,,,,,,,,,,,,,,,,
fsub_7,,,,,,,,,,,,,,,,,,,,,
fsub_8,,,,,,,,,,,,,,,,,,,,,
ex_1,,,,,,,,,,,,,,,,,,,,,
gas_1,,,,,,,,,,,,,,,,,,,,,
grt_1,,,,,,,,,,,,,,,,,,,,,
grt_2,,,,,,,,,,,,,,,,,,,,,
grt_3,,,,,,,,,,,,,,,,,,,,,
grt_4,,,,,,,,,,,,,,,,,,,,,
grt_5,,,,,,,,,,,,,,,,,,,,,
grt_6,,,,,,,,,,,,,,,,,,,,,
grt_7,,,,,,,,,,,,,,,,,,,,,
glitch_1,,,,,,,,,,,,,,,,,,,,,
mdi_1,,,,,,,,,,,,,,,,,,,,,
nightm_1,,,,,,,,,,,,,,,,,,,,,
nightm_2,,,,,,,,,,,,,,,,,,,,,
nightm_3,,,,,,,,,,,,,,,,,,,,,
nightm_4,,,,,,,,,,,,,,,,,,,,,
nightm_5,,,,,,,,,,,,,,,,,,,,,
schdl_1,,,,,,,,,,,,,,,,,,,,,
schdl_2,,,,,,,,,,,,,,,,,,,,,
srch_1,,,,,,,,,,,,,,,,,,,,,
srch_2,,,,,,,,,,,,,,,,,,,,,
srch_3,,,,,,,,,,,,,,,,,,,,,
snip_1,,,,,,,,,,,,,,,,,,,,,
snip_2,,,,,,,,,,,,,,,,,,,,,
snip_3,,,,,,,,,,,,,,,,,,,,,
spcltool_1,,,,,,,,,,,,,,,,,,,,,
spcltool_2,,,,,,,,,,,,,,,,,,,,,
spcltool_3,,,,,,,,,,,,,,,,,,,,,
spcltool_4,,,,,,,,,,,,,,,,,,,,,
spcltool_5,,,,,,,,,,,,,,,,,,,,,
spcltool_6,,,,,,,,,,,,,,,,,,,,,
spcltool_7,,,,,,,,,,,,,,,,,,,,,
spcltool_8,,,,,,,,,,,,,,,,,,,,,
spcltool_9,,,,,,,,,,,,,,,,,,,,,
sudo_1,,,,,,,,,,,,,,,,,,,,,
sudo_2,,,,,,,,,,,,,,,,,,,,,
sudo_3,,,,,,,,,,,,,,,,,,,,,
sudo_4,,,,,,,,,,,,,,,,,,,,,
unspl_1,,,,,,,,,,,,,,,,,,,,,
udl_4,,,,,,,,,,,,,,,,,,,,,
udl_5,,,,,,,,,,,,,,,,,,,,,
udl_6,,,,,,,,,,,,,,,,,,,,,
udl_7,,,,,,,,,,,,,,,,,,,,,
vct_1,,,,,,,,,,,,,,,,,,,,,
vct_2,,,,,,,,,,,,,,,,,,,,,
vct_3,,,,,,,,,,,,,,,,,,,,,
vct_4,,,,,,,,,,,,,,,,,,,,,
vct_5,,,,,,,,,,,,,,,,,,,,,
vct_6,,,,,,,,,,,,,,,,,,,,,
clan_1,,,,,,,,,,,,,,,,,,,,,
clan_2,,,,,,,,,,,,,,,,,,,,,
clan_3,,,,,,,,,,,,,,,,,,,,,
clan_4,,,,,,,,,,,,,,,,,,,,,
clan_5,,,,,,,,,,,,,,,,,,,,,
cvt_5,,,,,,,,,,,,,,,,,,,,,
cvt_6,,,,,,,,,,,,,,,,,,,,,
cvt_7,,,,,,,,,,,,,,,,,,,,,
cvt_8,,,,,,,,,,,,,,,,,,,,,
eod_1,,,,,,,,,,,,,,,,,,,,,
eod_2,,,,,,,,,,,,,,,,,,,,,
devs_1,,,,,,,,,,,,,,,,,,,,,
devs_2,,,,,,,,,,,,,,,,,,,,,
devs_3,,,,,,,,,,,,,,,,,,,,,
dm_1,,,,,,,,,,,,,,,,,,,,,
dm_2,,,,,,,,,,,,,,,,,,,,,
dm_3,,,,,,,,,,,,,,,,,,,,,
dm_4,,,,,,,,,,,,,,,,,,,,,
dm_5,,,,,,,,,,,,,,,,,,,,,
dm_6,,,,,,,,,,,,,,,,,,,,,
echo_1,,,,,,,,,,,,,,,,,,,,,
fka_1,,,,,,,,,,,,,,,,,,,,,
sf_22,,,,,,,,,,,,,,,,,,,,,
sf_23,,,,,,,,,,,,,,,,,,,,,
flr_1,,,,,,,,,,,,,,,,,,,,,
flr_2,,,,,,,,,,,,,,,,,,,,,
flr_3,,,,,,,,,,,,,,,,,,,,,
flr_4,,,,,,,,,,,,,,,,,,,,,
flr_5,,,,,,,,,,,,,,,,,,,,,
flr_6,,,,,,,,,,,,,,,,,,,,,
fgn_1,,,,,,,,,,,,,,,,,,,,,
fsub_1,,,,,,,,,,,,,,,,,,,,,
fsub_2,,,,,,,,,,,,,,,,,,,,,
fsub_3,,,,,,,,,,,,,,,,,,,,,
fsub_4,,,,,,,,,,,,,,,,,,,,,
fsub_5,,,,,,,,,,,,,,,,,,,,,
fsub_6,,,,,,,,,,,,,,,,,,,,,
fsub_7,,,,,,,,,,,,,,,,,,,,,
fsub_8,,,,,,,,,,,,,,,,,,,,,
ex_1,,,,,,,,,,,,,,,,,,,,,
gas_1,,,,,,,,,,,,,,,,,,,,,
grt_1,,,,,,,,,,,,,,,,,,,,,
grt_2,,,,,,,,,,,,,,,,,,,,,
grt_3,,,,,,,,,,,,,,,,,,,,,
grt_4,,,,,,,,,,,,,,,,,,,,,
grt_5,,,,,,,,,,,,,,,,,,,,,
grt_6,,,,,,,,,,,,,,,,,,,,,
grt_7,,,,,,,,,,,,,,,,,,,,,
glitch_1,,,,,,,,,,,,,,,,,,,,,
mdi_1,,,,,,,,,,,,,,,,,,,,,
nightm_1,,,,,,,,,,,,,,,,,,,,,
nightm_2,,,,,,,,,,,,,,,,,,,,,
nightm_3,,,,,,,,,,,,,,,,,,,,,
nightm_4,,,,,,,,,,,,,,,,,,,,,
nightm_5,,,,,,,,,,,,,,,,,,,,,
schdl_1,,,,,,,,,,,,,,,,,,,,,
schdl_2,,,,,,,,,,,,,,,,,,,,,
srch_1,,,,,,,,,,,,,,,,,,,,,
srch_2,,,,,,,,,,,,,,,,,,,,,
srch_3,,,,,,,,,,,,,,,,,,,,,
snip_1,,,,,,,,,,,,,,,,,,,,,
snip_2,,,,,,,,,,,,,,,,,,,,,
snip_3,,,,,,,,,,,,,,,,,,,,,
spcltool_1,,,,,,,,,,,,,,,,,,,,,
spcltool_2,,,,,,,,,,,,,,,,,,,,,
spcltool_3,,,,,,,,,,,,,,,,,,,,,
spcltool_4,,,,,,,,,,,,,,,,,,,,,
spcltool_5,,,,,,,,,,,,,,,,,,,,,
spcltool_6,,,,,,,,,,,,,,,,,,,,,
spcltool_7,,,,,,,,,,,,,,,,,,,,,
spcltool_8,,,,,,,,,,,,,,,,,,,,,
spcltool_9,,,,,,,,,,,,,,,,,,,,,
sudo_1,,,,,,,,,,,,,,,,,,,,,
sudo_2,,,,,,,,,,,,,,,,,,,,,
sudo_3,,,,,,,,,,,,,,,,,,,,,
sudo_4,,,,,,,,,,,,,,,,,,,,,
unspl_1,,,,,,,,,,,,,,,,,,,,,
upd_5,,,,,,,,,,,,,,,,,,,,,
upd_7,,,,,,,,,,,,,,,,,,,,,
udl_4,,,,,,,,,,,,,,,,,,,,,
udl_5,,,,,,,,,,,,,,,,,,,,,
udl_6,,,,,,,,,,,,,,,,,,,,,
udl_7,,,,,,,,,,,,,,,,,,,,,
vct_1,,,,,,,,,,,,,,,,,,,,,
vct_2,,,,,,,,,,,,,,,,,,,,,
vct_3,,,,,,,,,,,,,,,,,,,,,
vct_4,,,,,,,,,,,,,,,,,,,,,
vct_5,,,,,,,,,,,,,,,,,,,,,
vct_6,,,,,,,,,,,,,,,,,,,,,
wrd_1,,,,,,,,,,,,,,,,,,,,,
wrd_2,,,,,,,,,,,,,,,,,,,,,
wrd_3,,,,,,,,,,,,,,,,,,,,,
wrd_4,,,,,,,,,,,,,,,,,,,,,
wrd_5,,,,,,,,,,,,,,,,,,,,,
wrd_6,,,,,,,,,,,,,,,,,,,,,
wrd_7,,,,,,,,,,,,,,,,,,,,,
wrd_8,,,,,,,,,,,,,,,,,,,,,
prof_1,,,,,,,,,,,,,,,,,,,,,
prof_2,,,,,,,,,,,,,,,,,,,,,
notes_1,,,,,,,,,,,,,,,,,,,,,
notes_2,,,,,,,,,,,,,,,,,,,,,
notes_3,,,,,,,,,,,,,,,,,,,,,
notes_4,,,,,,,,,,,,,,,,,,,,,
notes_5,,,,,,,,,,,,,,,,,,,,,
sts_1,,,,,,,,,,,,,,,,,,,,,
sts_2,,,,,,,,,,,,,,,,,,,,,
sts_3,,,,,,,,,,,,,,,,,,,,,
sts_4,,,,,,,,,,,,,,,,,,,,,
sts_5,,,,,,,,,,,,,,,,,,,,,
sts_6,,,,,,,,,,,,,,,,,,,,,
sts_7,,,,,,,,,,,,,,,,,,,,,
sts_8,,,,,,,,,,,,,,,,,,,,,
sts_9,,,,,,,,,,,,,,,,,,,,,
sts_10,,,,,,,,,,,,,,,,,,,,,
sts_11,,,,,,,,,,,,,,,,,,,,,
sts_12,,,,,,,,,,,,,,,,,,,,,
sts_13,,,,,,,,,,,,,,,,,,,,,
whs_1,,,,,,,,,,,,,,,,,,,,,
whs_2,,,,,,,,,,,,,,,,,,,,,
whs_3,,,,,,,,,,,,,,,,,,,,,
whs_4,,,,,,,,,,,,,,,,,,,,,
wbl_1,,,,,,,,,,,,,,,,,,,,,
writer_1,,,,,,,,,,,,,,,,,,,,,
wbs_1,,,,,,,,,,,,,,,,,,,,,
wbs_2,,,,,,,,,,,,,,,,,,,,,
wbs_3,,,,,,,,,,,,,,,,,,,,,
youtube_1,,,,,,,,,,,,,,,,,,,,,
youtube_2,,,,,,,,,,,,,,,,,,,,,
youtube_3,,,,,,,,,,,,,,,,,,,,,
youtube_4,,,,,,,,,,,,,,,,,,,,,
youtube_5,,,,,,,,,,,,,,,,,,,,,
youtube_6,,,,,,,,,,,,,,,,,,,,,
youtube_7,,,,,,,,,,,,,,,,,,,,,
youtube_8,,,,,,,,,,,,,,,,,,,,,
zip_1,,,,,,,,,,,,,,,,,,,,,
zip_2,,,,,,,,,,,,,,,,,,,,,
zip_3,,,,,,,,,,,,,,,,,,,,,
fsh_1,,,,,,,,,,,,,,,,,,,,,
fsh_2,,,,,,,,,,,,,,,,,,,,,
fsh_3,,,,,,,,,,,,,,,,,,,,,
fsh_4,,,,,,,,,,,,,,,,,,,,,
instu_1,,,,,,,,,,,,,,,,,,,,,
instu_2,,,,,,,,,,,,,,,,,,,,,
instu_3,,,,,,,,,,,,,,,,,,,,,
instu_4,,,,,,,,,,,,,,,,,,,,,
games_1,,,,,,,,,,,,,,,,,,,,,
games_2,,,,,,,,,,,,,,,,,,,,,
games_3,,,,,,,,,,,,,,,,,,,,,
games_4,,,,,,,,,,,,,,,,,,,,,
games_5,,,,,,,,,,,,,,,,,,,,,
games_6,,,,,,,,,,,,,,,,,,,,,
clst_1,,,,,,,,,,,,,,,,,,,,,
clst_2,,,,,,,,,,,,,,,,,,,,,
clst_3,,,,,,,,,,,,,,,,,,,,,
clst_4,,,,,,,,,,,,,,,,,,,,,
clst_5,,,,,,,,,,,,,,,,,,,,,
pmbot_1,,,,,,,,,,,,,,,,,,,,,
pmbot_2,,,,,,,,,,,,,,,,,,,,,
pmbot_3,,,,,,,,,,,,,,,,,,,,,
pmbot_4,,,,,,,,,,,,,,,,,,,,,
pmbot_5,,,,,,,,,,,,,,,,,,,,,
pmbot_6,,,,,,,,,,,,,,,,,,,,,
pmbot_7,,,,,,,,,,,,,,,,,,,,,
vcbot_1,,,,,,,,,,,,,,,,,,,,,
vcbot_2,,,,,,,,,,,,,,,,,,,,,
vcbot_3,,,,,,,,,,,,,,,,,,,,,
vcbot_4,,,,,,,,,,,,,,,,,,,,,
vcbot_5,,,,,,,,,,,,,,,,,,,,,
vcbot_6,,,,,,,,,,,,,,,,,,,,,
vcbot_7,,,,,,,,,,,,,,,,,,,,,
vcbot_8,,,,,,,,,,,,,,,,,,,,,
vcbot_9,,,,,,,,,,,,,,,,,,,,,
vcbot_10,,,,,,,,,,,,,,,,,,,,,
vcbot_11,,,,,,,,,,,,,,,,,,,,,
vcbot_12,,,,,,,,,,,,,,,,,,,,,
vcbot_13,,,,,,,,,,,,,,,,,,,,,
vcbot_14,,,,,,,,,,,,,,,,,,,,,
vcbot_15,,,,,,,,,,,,,,,,,,,,,
vcbot_16,,,,,,,,,,,,,,,,,,,,,
vcbot_17,,,,,,,,,,,,,,,,,,,,,
vcbot_18,,,,,,,,,,,,,,,,,,,,,
vcbot_19,,,,,,,,,,,,,,,,,,,,,
vcbot_20,,,,,,,,,,,,,,,,,,,,,
vcbot_21,,,,,,,,,,,,,,,,,,,,,
vcbot_22,,,,,,,,,,,,,,,,,,,,,
wrd_4,,,,,,,,,,,,,,,,,,,,,
wrd_5,,,,,,,,,,,,,,,,,,,,,
wrd_6,,,,,,,,,,,,,,,,,,,,,
wrd_7,,,,,,,,,,,,,,,,,,,,,
wrd_8,,,,,,,,,,,,,,,,,,,,,
prof_1,,,,,,,,,,,,,,,,,,,,,
prof_2,,,,,,,,,,,,,,,,,,,,,
notes_1,,,,,,,,,,,,,,,,,,,,,
notes_2,,,,,,,,,,,,,,,,,,,,,
notes_3,,,,,,,,,,,,,,,,,,,,,
notes_4,,,,,,,,,,,,,,,,,,,,,
notes_5,,,,,,,,,,,,,,,,,,,,,
sts_1,,,,,,,,,,,,,,,,,,,,,
sts_2,,,,,,,,,,,,,,,,,,,,,
sts_3,,,,,,,,,,,,,,,,,,,,,
sts_4,,,,,,,,,,,,,,,,,,,,,
sts_5,,,,,,,,,,,,,,,,,,,,,
sts_6,,,,,,,,,,,,,,,,,,,,,
sts_7,,,,,,,,,,,,,,,,,,,,,
sts_8,,,,,,,,,,,,,,,,,,,,,
sts_9,,,,,,,,,,,,,,,,,,,,,
sts_10,,,,,,,,,,,,,,,,,,,,,
sts_11,,,,,,,,,,,,,,,,,,,,,
sts_12,,,,,,,,,,,,,,,,,,,,,
sts_13,,,,,,,,,,,,,,,,,,,,,
whs_1,,,,,,,,,,,,,,,,,,,,,
whs_2,,,,,,,,,,,,,,,,,,,,,
whs_3,,,,,,,,,,,,,,,,,,,,,
whs_4,,,,,,,,,,,,,,,,,,,,,
wbl_1,,,,,,,,,,,,,,,,,,,,,
writer_1,,,,,,,,,,,,,,,,,,,,,
wbs_1,,,,,,,,,,,,,,,,,,,,,
wbs_2,,,,,,,,,,,,,,,,,,,,,
wbs_3,,,,,,,,,,,,,,,,,,,,,
youtube_1,,,,,,,,,,,,,,,,,,,,,
youtube_2,,,,,,,,,,,,,,,,,,,,,
youtube_3,,,,,,,,,,,,,,,,,,,,,
youtube_4,,,,,,,,,,,,,,,,,,,,,
youtube_5,,,,,,,,,,,,,,,,,,,,,
youtube_6,,,,,,,,,,,,,,,,,,,,,
youtube_7,,,,,,,,,,,,,,,,,,,,,
youtube_8,,,,,,,,,,,,,,,,,,,,,
zip_1,,,,,,,,,,,,,,,,,,,,,
zip_2,,,,,,,,,,,,,,,,,,,,,
zip_3,,,,,,,,,,,,,,,,,,,,,
fsh_1,,,,,,,,,,,,,,,,,,,,,
fsh_2,,,,,,,,,,,,,,,,,,,,,
fsh_3,,,,,,,,,,,,,,,,,,,,,
fsh_4,,,,,,,,,,,,,,,,,,,,,
instu_1,,,,,,,,,,,,,,,,,,,,,
instu_2,,,,,,,,,,,,,,,,,,,,,
instu_3,,,,,,,,,,,,,,,,,,,,,
instu_4,,,,,,,,,,,,,,,,,,,,,
games_1,,,,,,,,,,,,,,,,,,,,,
games_2,,,,,,,,,,,,,,,,,,,,,
games_3,,,,,,,,,,,,,,,,,,,,,
games_4,,,,,,,,,,,,,,,,,,,,,
games_5,,,,,,,,,,,,,,,,,,,,,
games_6,,,,,,,,,,,,,,,,,,,,,
clst_1,,,,,,,,,,,,,,,,,,,,,
clst_2,,,,,,,,,,,,,,,,,,,,,
clst_3,,,,,,,,,,,,,,,,,,,,,
clst_4,,,,,,,,,,,,,,,,,,,,,
clst_5,,,,,,,,,,,,,,,,,,,,,
pmbot_1,,,,,,,,,,,,,,,,,,,,,
pmbot_2,,,,,,,,,,,,,,,,,,,,,
pmbot_3,,,,,,,,,,,,,,,,,,,,,
pmbot_4,,,,,,,,,,,,,,,,,,,,,
pmbot_5,,,,,,,,,,,,,,,,,,,,,
pmbot_6,,,,,,,,,,,,,,,,,,,,,
pmbot_7,,,,,,,,,,,,,,,,,,,,,
vcbot_1,,,,,,,,,,,,,,,,,,,,,
vcbot_2,,,,,,,,,,,,,,,,,,,,,
vcbot_3,,,,,,,,,,,,,,,,,,,,,
vcbot_4,,,,,,,,,,,,,,,,,,,,,
vcbot_5,,,,,,,,,,,,,,,,,,,,,
vcbot_6,,,,,,,,,,,,,,,,,,,,,
vcbot_7,,,,,,,,,,,,,,,,,,,,,
vcbot_8,,,,,,,,,,,,,,,,,,,,,
vcbot_9,,,,,,,,,,,,,,,,,,,,,
vcbot_10,,,,,,,,,,,,,,,,,,,,,
vcbot_11,,,,,,,,,,,,,,,,,,,,,
vcbot_12,,,,,,,,,,,,,,,,,,,,,
vcbot_13,,,,,,,,,,,,,,,,,,,,,
vcbot_14,,,,,,,,,,,,,,,,,,,,,
vcbot_15,,,,,,,,,,,,,,,,,,,,,
vcbot_16,,,,,,,,,,,,,,,,,,,,,
vcbot_17,,,,,,,,,,,,,,,,,,,,,
vcbot_18,,,,,,,,,,,,,,,,,,,,,
vcbot_19,,,,,,,,,,,,,,,,,,,,,
vcbot_20,,,,,,,,,,,,,,,,,,,,,
vcbot_21,,,,,,,,,,,,,,,,,,,,,
vcbot_22,,,,,,,,,,,,,,,,,,,,,
1 - Arabic Azerbaijan bengoli Bengali Chinese Spanish Persian Gujarati Hindi Indonesia Italian Japanese Kannada Malayalam Marathi Malay Odia Portuguese Russian sinhala தமிழ் Turkish
2 com_3
3 com_4
4 com_5
5 com_6
6 com_7
7 can_1
8 can_2
9 can_3
10 can_4
11 help_4
12 help_5
13 help_6
14 help_7
15 help_8
16 help_9
17 help_10
18 help_11
19 help_12
20 help_13
21 userlogs_1
22 userlogs_2
23 userlogs_3
24 userlogs_4
25 userlogs_5
26 adm_1
27 adm_2
28 adm_3
29 pro_1
30 pro_2
31 de_1
32 de_2
33 ban_1
34 ban_2
35 ban_3
36 ban_4
37 ban_5
38 tban_1
39 tban_2
40 unban_1
41 unban_2
42 unban_3
43 kick_1
44 kick_2
45 kick_3
46 kick_4
47 pin_1
48 pinned_1
49 pinned_2
50 unpin_1
51 listpin_1
52 purge_1
53 purgeall_1
54 purgeall_2
55 aki_1
56 aki_2
57 aki_3
58 antiflood_1
59 antiflood_2
60 antiflood_3
61 antiflood_4
62 antiflood_5
63 ascii_1
64 ascii_2
65 audiotools_1
66 audiotools_2
67 audiotools_3
68 audiotools_4
69 audiotools_5
70 audiotools_6
71 audiotools_7
72 audiotools_8
73 audiotools_9
74 audiotools_10
75 asstcmd_1
76 asstcmd_2
77 asstcmd_3
78 asstcmd_4
79 asstcmd_5
80 asstcmd_6
81 act_1
82 act_2
83 autopic_4
84 autopic_5
85 inline_6
86 inline_7
87 inline_8
88 inline_9
89 wspr_3
90 wspr_4
91 wspr_5
92 bot_1
93 bot_2
94 bot_3
95 bot_4
96 bot_5
97 log
98 ping
99 usage
100 usage_simple
101 shutdown
102 blk_1
103 blk_2
104 blk_3
105 blk_4
106 blk_5
107 blk_6
108 bd_7
109 bd_8
110 bd_9
111 calc_1
112 calc_2
113 cha_1
114 cha_2
115 cha_3
116 cha_4
117 cha_5
118 cha_6
119 cha_7
120 cha_8
121 carbon_3
122 chab_1
123 chab_2
124 chab_3
125 chats_6
126 clan_1
127 clan_2
128 clan_3
129 clan_4
130 clan_5
131 cvt_5
132 cvt_6
133 cvt_7
134 cvt_8
135 eod_1
136 eod_2
137 devs_1
138 devs_2
139 devs_3
140 dm_1
141 dm_2
142 dm_3
143 dm_4
144 dm_5
145 dm_6
146 echo_1
147 fka_1
148 sf_22
149 sf_23
150 flr_1
151 flr_2
152 flr_3
153 flr_4
154 flr_5
155 flr_6
156 fgn_1
157 fsub_1
158 fsub_2
159 fsub_3
160 fsub_4
161 fsub_5
162 fsub_6
163 fsub_7
164 fsub_8
165 ex_1
166 gas_1
167 grt_1
168 grt_2
169 grt_3
170 grt_4
171 grt_5
172 grt_6
173 grt_7
174 glitch_1
175 mdi_1
176 nightm_1
177 nightm_2
178 nightm_3
179 nightm_4
180 nightm_5
181 schdl_1
182 schdl_2
183 srch_1
184 srch_2
185 srch_3
186 snip_1
187 snip_2
188 snip_3
189 spcltool_1
190 spcltool_2
191 spcltool_3
192 spcltool_4
193 spcltool_5
194 spcltool_6
195 spcltool_7
196 spcltool_8
197 spcltool_9
198 sudo_1
199 sudo_2
200 sudo_3
201 sudo_4
202 unspl_1
203 udl_4 upd_5
204 udl_5 upd_7
205 udl_6 udl_4
206 udl_7 udl_5
207 vct_1 udl_6
208 vct_2 udl_7
209 vct_3 vct_1
210 vct_4 vct_2
211 vct_5 vct_3
212 vct_6 vct_4
213 vct_5
214 vct_6
215 wrd_1
216 wrd_2
217 wrd_3
218 wrd_4
219 wrd_5
220 wrd_6
221 wrd_7
222 wrd_8
223 prof_1
224 prof_2
225 notes_1
226 notes_2
227 notes_3
228 notes_4
229 notes_5
230 sts_1
231 sts_2
232 sts_3
233 sts_4
234 sts_5
235 sts_6
236 sts_7
237 sts_8
238 sts_9
239 sts_10
240 sts_11
241 sts_12
242 sts_13
243 whs_1
244 whs_2
245 whs_3
246 whs_4
247 wbl_1
248 writer_1
249 wbs_1
250 wbs_2
251 wbs_3
252 youtube_1
253 youtube_2
254 youtube_3
255 youtube_4
256 youtube_5
257 youtube_6
258 youtube_7
259 youtube_8
260 zip_1
261 zip_2
262 zip_3
263 fsh_1
264 fsh_2
265 fsh_3
266 fsh_4
267 instu_1
268 instu_2
269 instu_3
270 instu_4
271 games_1
272 games_2
273 games_3
274 games_4
275 games_5
276 games_6
277 clst_1
278 clst_2
279 clst_3
280 clst_4
281 clst_5
282 pmbot_1
283 pmbot_2
284 pmbot_3
285 pmbot_4
286 pmbot_5
287 pmbot_6
288 pmbot_7
289 vcbot_1
290 vcbot_2
291 vcbot_3
292 vcbot_4
293 vcbot_5
294 vcbot_6
295 vcbot_7
296 vcbot_8
297 vcbot_9
298 vcbot_10
299 vcbot_11
300 vcbot_12
301 vcbot_13
302 vcbot_14
303 vcbot_15
304 vcbot_16
305 vcbot_17
306 vcbot_18
307 vcbot_19
308 vcbot_20
309 vcbot_21
310 vcbot_22

View File

@@ -7,14 +7,38 @@ try:
from google_trans_new import google_translator
Trs = google_translator()
except ImportError:
LOGS.info("'google_trans_new' not installed!")
LOGS.error("'google_trans_new' not installed!")
Trs = None
try:
from yaml import safe_load
except ModuleNotFoundError:
LOGS.info("'pyYaml' not installed!\nPlease install it to use Ultroid.")
sys.exit()
def _get_value(stri):
try:
value = eval(stri.strip())
except Exception as er:
LOGS.debug(er)
value = stri.strip()
return value
def safe_load(file, *args, **kwargs):
read = file.readlines()
out = {}
for line in read:
if ":" in line: # Ignores Empty & Invalid lines
spli = line.split(":", maxsplit=1)
key = spli[0].strip()
value = _get_value(spli[1])
out.update({key: value or []})
elif "-" in line:
spli = line.split("-", maxsplit=1)
where = out[list(out.keys())[-1]]
if isinstance(where, list):
value = _get_value(spli[1])
if value:
where.append(value)
return out
language = [udB.get_key("language") or "en"]
languages = {}

View File

@@ -121,7 +121,7 @@ autopic_5: "Autopic বন্ধ!"
# inline
inline_1: "[Uʟᴛʀɪᴅ Sᴘᴘʀᴛ](t.me/ultroidsupport)\n\n**Hᴇʟᴘ Mᴇɴ Oғ {}.\n\nPʟɢɪɴs ~ {}**"
inline_2: "[Uʟᴛʀɪᴅ Sᴘᴘʀᴛ](t.me/ultroidsupport)\n\n**Hᴇʟᴘ Mᴇɴ Oғ {}.\n\nAᴅᴅɴs ~ {}**"
inline_3: "[Uʟᴛʀɪᴅ Sᴘᴘʀᴛ](t.me/ultroidsupport)\n\n**Hᴇʟᴘ Mᴇɴ Oғ {}.\n\nAᴅᴅɴs ~ {}\n\nD **`.setredis ADDONS True`** ᴀɴᴅ ʀᴇsᴛᴀʀᴛ ᴛᴏ ɢᴇᴛ ᴀᴅᴅɴs.**"
inline_3: "[Uʟᴛʀɪᴅ Sᴘᴘʀᴛ](t.me/ultroidsupport)\n\n**Hᴇʟᴘ Mᴇɴ Oғ {}.\n\nAᴅᴅɴs ~ {}\n\nD **`.setdb ADDONS True`** ᴀɴᴅ ʀᴇsᴛᴀʀᴛ ᴛᴏ ɢᴇᴛ ᴀᴅᴅɴs.**"
inline_4: "** Bᴛ Oғ {}\n\nMᴀɪɴ Mᴇɴ\n\nPʟɢɪɴs ~ {}\nAᴅᴅɴs ~ {}\nTᴛᴀʟ Cᴍᴍᴀɴᴅs ~ {}**"
inline_5: "**Mᴇɴ Hᴀs Bᴇᴇɴ Cʟsᴇᴅ**"
inline_6: "**ভয়েস চ্যাট হেল্প মেনু জন্য {}**\n**উপলব্ধ কমান্ড:** `{}`\n\n@TeamUltroid"
@@ -210,7 +210,7 @@ chats_2: "`আমি অ্যাডমিন নই `"
chats_3: "#মোছা\nমোছা {}"
chats_4: "তোমার [{}]({}) গ্রুপ তৈরি বস!!"
chats_5: "যোগ দিন@TeamUltroid"
chats_6: "তোমার [{}]({}) গ্রুপ/চ্যানেল তৈরি করা হয়েছে বস!"!"
chats_6: "তোমার [{}]({}) গ্রুপ/চ্যানেল তৈরি করা হয়েছে বস!"
# clean action
clan_1: "এই চ্যাটের জন্য ক্লিন অ্যাকশন সেটিংস যোগ করা হয়েছে"

View File

@@ -211,7 +211,7 @@ chab_2: "`No user has AI added.`"
chab_3: "**Total List Of AI Enabled Users In This Chat :**\n\n"
# chats
chats_1: "`Cant delete this chat`"
chats_1: "`Cant delete this chat.`"
chats_2: "`I m not an admin`"
chats_3: "#Deleted\nDeleted {}"
chats_4: "Your [{}]({}) Group Made Boss!"

View File

@@ -1,4 +1,3 @@
---
name: Spanish
natively: Español
authors:

View File

@@ -426,7 +426,9 @@ upd_1: "`अपडेट खोजा जा रहा है, कृपया
upd_2: "`ओह .. अपडेटर कुछ समस्याओं के कारण जारी नहीं रह सकता.`\n\n**उपदेश:**\n"
upd_3: "**[[{}]]({}/tree/{}) के लिए नया अपडेट उपलब्ध है :\n\nबदलाव :**\n\n{}"
upd_4: "`बदलाव बहुत बड़ा है, इसे देखने के लिए फ़ाइल देखें.`"
upd_5: "`अपडेट करने के लिए नीचे दिए गए बटन पर क्लिक करें।`"
upd_6: "\n`आपका बॉट` **अपडेटेड है** **[[{}]]({}/tree/{})** `के साथ`\n"
upd_7: "`फास्ट सॉफ्ट अपडेटिंग...`"
# upload download
udl_1: "`उस फ़ाइल / मीडिया का उत्तर दें जिसे आप डाउनलोड करना चाहते हैं...`"
@@ -553,10 +555,14 @@ games_1: "खेल चुनें 🎮"
games_2: "श्रेणी का चयन करें!"
games_3: "कठिनाई का स्तर चुने"
games_4: "प्रश्नों की संख्या चुनें.."
games_5: "समय अंतराल चुनें... "
games_6: "**• 5 सेकंड में क्विज़ शुरू करना।**\n**• स्तर :**`{}`\n**• QS:** `{}`"
# akinator
aki_1 : "खेल समाप्त कर दिया गया है...."
aki_2 : "खेल शुरू"
aki_3: "समय समाप्त!"
# VcBot
vcbot_1: "`वॉयस चैट छोड़ दिया।`"

View File

@@ -59,9 +59,6 @@ tban_2: "` {} `の{}で` `{}` `が正常に禁止されました"
unban_1: "`ユーザーに返信するか、ユーザー名を指定して禁止を解除してください!`"
unban_2: "「 `ユーザーの禁止を解除する権利はありません。`」"
unban_3: "{} **禁止解除された** {} ** in **` {} `"
kill_1: "「 `私にはユーザーを蹴る権利がありません。`」"
kill_3: "「 `私は彼を蹴ることができません...`」"
kill_4: "{} **キックされた** {} ** in **` {} `"
kick_1: "`私 しないでください ユーザーを蹴る権利がある.`"
kick_2: "「 `笑、開発者を蹴ることはできません`😂」"
kick_3: "`私は彼を蹴ることができません...`"

View File

@@ -204,3 +204,23 @@ ast_1: "तुम्हाला कोणता API स्थापित क
ast_2: "**remove.bg API**\nremove.bg इकडे जाऊन आपला API मिळवा आणि खाली प्रविष्ट करा.\n\nअथवा रद्द करण्यासाठी /cancel लिहा"
ast_3: "नमस्कार🙏 {}. पर्याय ब्राऊज करा.."
# vcbot
vcbot_1: "व्हॉइस चॅट सोडले."
vcbot_2: "**त्रुटी:** `{}`"
vcbot_3: "• व्हॉल्यूम बदलले `{}`% •"
vcbot_4: "`कृपया 1 ते 200 पासून व्हॉल्यूम निर्दिष्ट करा!`"
vcbot_5: "`या व्हॉइस चॅट पुन्हा सामील व्हा.`"
vcbot_6: "`आपण व्हॉईस चॅटशी कनेक्ट केलेले नाही!`"
vcbot_7: "`धैर्य ठेवा...\nते काही वेळ लागेल.`"
vcbot_8: "`फक्त YouTube प्लेलिस्ट द्या!`"
vcbot_9: "`तू मला मजा करत आहेस का?\nकाय खेळायचे?`"
vcbot_10: "`व्हीसी ऑथ ग्रुपमधून चॅट काढला!`"
vcbot_11: "`व्हॉइस चॅट बॉट वापरकर्त्यांची यादी मिळवणे...`"
vcbot_13: "`या चॅट मध्ये प्लेबॅक पुन्हा सुरू केले.`"
vcbot_14: "`या चॅट मध्ये प्लेबॅक थांबवा.`"
vcbot_15: "`कृपया गाणे नाव निर्दिष्ट करा किंवा व्हिडिओ फाइलला प्रत्युत्तर द्या!`"
vcbot_17: "`वापरकर्त्याच्या संदेशास प्रत्युत्तर द्या किंवा ID / वापरकर्तानाव जोडा ... "
vcbot_18: "• व्हीसी ऑथ यादी रिक्त आहे..."
vcbot_20: "`डाउनलोड करणे आणि रूपांतरित करणे...`"
vcbot_21: "• रांगेत काहीही नाही!"
vcbot_22: "चॅट मध्ये सर्व रांग साफ केले"

View File

@@ -1,4 +1,3 @@
---
name: தமிழ்
natively: தமிழ்
authors:

View File

@@ -1,4 +1,3 @@
---
name: Turkish
natively: Türk

View File

@@ -30,6 +30,7 @@ from telethon.errors.rpcerrorlist import (
ChatSendMediaForbiddenError,
)
from pyUltroid import HNDLR, LOGS, asst, udB, vcClient
from pyUltroid._misc._decorators import compile_pattern
from pyUltroid.functions.helper import (
bash,
downloader,
@@ -40,9 +41,9 @@ from pyUltroid.functions.helper import (
from pyUltroid.functions.admins import admin_check
from pyUltroid.functions.tools import is_url_ok
from pyUltroid.functions.ytdl import get_videos_link
from pyUltroid.misc import owner_and_sudos, sudoers
from pyUltroid.misc._assistant import in_pattern
from pyUltroid.misc._wrappers import eod, eor
from pyUltroid._misc import owner_and_sudos, sudoers
from pyUltroid._misc._assistant import in_pattern
from pyUltroid._misc._wrappers import eod, eor
from pyUltroid.version import __version__ as UltVer
from telethon import events
from telethon.tl import functions, types
@@ -52,9 +53,12 @@ try:
from yt_dlp import YoutubeDL
except ImportError:
YoutubeDL = None
LOGS.info("'yt-dlp' not found!")
LOGS.error("'yt-dlp' not found!")
from youtubesearchpython import Playlist, ResultMode, Video, VideosSearch
try:
from youtubesearchpython import VideosSearch
except ImportError:
VideosSearch = None
from strings import get_string
@@ -219,7 +223,7 @@ def vc_asst(dec, **kwargs):
lambda e: not e.is_private and not e.via_bot_id and not e.fwd_from
)
handler = udB.get_key("VC_HNDLR") or HNDLR
kwargs["pattern"] = re.compile(f"\\{handler}" + dec)
kwargs["pattern"] = compile_pattern(dec, handler)
vc_auth = kwargs.get("vc_auth", True)
key = udB.get_key("VC_AUTH_GROUPS") or {}
if "vc_auth" in kwargs:

View File

@@ -7,7 +7,7 @@
from telethon import Button
from . import *
from . import vc_asst, asst, in_pattern
@vc_asst("vchelp")

View File

@@ -28,8 +28,7 @@
"""
from pyUltroid.dB.vc_sudos import add_vcsudo, del_vcsudo, get_vcsudos, is_vcsudo
from . import *
from . import vc_asst, owner_and_sudos, get_string, udB
@vc_asst("addauth", from_users=owner_and_sudos(), vc_auth=False)
@@ -49,8 +48,7 @@ async def auth_group(event):
key.update({chat: {"admins": admins}})
udB.set_key("VC_AUTH_GROUPS", key)
kem = "Admins" if admins else "All"
await eor(
event,
await event.eor(
f"• Added to AUTH Groups Successfully For <code>{kem}</code>.",
parse_mode="html",
)
@@ -118,15 +116,14 @@ async def _(e):
else:
return await xx.edit(get_string("vcbot_17"), time=3)
if not is_vcsudo(userid):
return await eod(
return await xx.eor(
xx,
f"[{name}](tg://user?id={userid})` is not approved to use my Voice Chat Bot.`",
time=5,
)
try:
del_vcsudo(userid)
await eod(
xx,
await xx.eor(
f"[{name}](tg://user?id={userid})` is removed from Voice Chat Bot Users.`",
time=5,
)
@@ -150,15 +147,14 @@ async def _(e):
else:
return await xx.eor(get_string("vcbot_17"), time=3)
if is_vcsudo(userid):
return await eod(
xx,
return await xx.eor(
f"[{name}](tg://user?id={userid})` is already approved to use my Voice Chat Bot.`",
time=5,
)
try:
add_vcsudo(userid)
await eod(
xx,
await xx.eor(
f"[{name}](tg://user?id={userid})` is added to Voice Chat Bot Users.`",
time=5,
)

View File

@@ -26,7 +26,7 @@
from pytgcalls.exceptions import NotConnectedError
from . import *
from . import vc_asst, Player, get_string,CLIENTS,VIDEO_ON
@vc_asst("joinvc")

View File

@@ -21,8 +21,9 @@
Stream Live YouTube
"""
from . import *
import re,os
from telethon.tl import types
from . import vc_asst, get_string, inline_mention, add_to_queue, mediainfo, file_download, LOGS, is_url_ok, bash, download, Player, VC_QUEUE
from telethon.errors.rpcerrorlist import ChatSendMediaForbiddenError, MessageIdInvalidError
@@ -59,8 +60,7 @@ async def play_music_(event):
else:
song = input
if not (reply or song):
return await eor(
xx, "Please specify a song name or reply to a audio file !", time=5
return await xx.eor("Please specify a song name or reply to a audio file !", time=5
)
await xx.eor(get_string("vcbot_20"), parse_mode="md")
if reply and reply.media and mediainfo(reply.media).startswith(("audio", "video")):
@@ -134,8 +134,8 @@ async def play_music_(event):
try:
fromchat = (await event.client.get_entity(input)).id
except Exception as er:
return await eor(msg, str(er))
await eor(msg, "`• Started Playing from Channel....`")
return await msg.eor(str(er))
await msg.eor("`• Started Playing from Channel....`")
send_message = True
ultSongs = Player(chat, event)
count = 0
@@ -168,8 +168,7 @@ async def play_music_(event):
else:
add_to_queue(chat, song, song_name, link, thumb, from_user, duration)
if send_message and count == 1:
await eor(
msg,
await msg.eor(
f"▶ Added 🎵 <strong><a href={link}>{song_name}</a></strong> to queue at <strong>#{list(VC_QUEUE[chat].keys())[-1]}.</strong>",
parse_mode="html",
)

View File

@@ -15,7 +15,7 @@
Clear all queue in chat.
"""
from . import *
from . import vc_asst, get_string, list_queue, VC_QUEUE
@vc_asst("queue")

View File

@@ -23,7 +23,7 @@
• `{i}replay`
Re-play the current song from the beginning.
"""
from . import *
from . import vc_asst, Player, get_string
@vc_asst("mutevc")

View File

@@ -14,9 +14,9 @@
like `{i}videoplay @chat <input/reply>`
"""
import re, asyncio
from telethon.errors.rpcerrorlist import ChatSendMediaForbiddenError
from . import *
from . import vc_asst, Player, get_string, inline_mention, is_url_ok, mediainfo, vid_download, file_download,LOGS
@vc_asst("videoplay")

View File

@@ -13,7 +13,8 @@
"""
from . import *
import re
from . import vc_asst, get_string, inline_mention, Player, dl_playlist, add_to_queue, is_url_ok, VC_QUEUE
@vc_asst("ytplaylist")
@@ -26,7 +27,7 @@ async def live_stream(e):
chat = int(input[1])
song = e.text.split(maxsplit=2)[2]
elif input[1].startswith("@"):
cid_moosa = (await vcClient.get_entity(input[1])).id
cid_moosa = (await e.client.get_entity(input[1])).id
chat = int("-100" + str(cid_moosa))
song = e.text.split(maxsplit=2)[2]
else:
@@ -57,7 +58,6 @@ async def live_stream(e):
else:
from_user = inline_mention(e)
add_to_queue(chat, file, title, link, thumb, from_user, duration)
return await eor(
xx,
return await xx.eor(
f"▶ Added 🎵 **[{title}]({link})** to queue at #{list(VC_QUEUE[chat].keys())[-1]}.",
)