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:
4
.github/stalebot.yml
vendored
4
.github/stalebot.yml
vendored
@@ -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
1
.gitignore
vendored
@@ -2,6 +2,7 @@
|
||||
*.session-journal
|
||||
*.session
|
||||
build
|
||||
test*
|
||||
*.mp3
|
||||
*.webm
|
||||
*.webp
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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")
|
||||
|
||||
@@ -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 *
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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
12
docker-compose.yml
Normal 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
16
install-termux
Normal 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
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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]:
|
||||
|
||||
@@ -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ᴀᴄᴋ",
|
||||
|
||||
@@ -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 = {}
|
||||
|
||||
@@ -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,
|
||||
)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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( (.*)|$)")
|
||||
|
||||
@@ -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
158
plugins/autoban.py
Normal 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)
|
||||
),
|
||||
)
|
||||
@@ -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)
|
||||
)
|
||||
|
||||
@@ -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.")
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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))
|
||||
@@ -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()
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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$")
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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(
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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"))
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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"):
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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),
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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 Set</strong>."
|
||||
@@ -477,4 +486,4 @@ async def ultiny(event):
|
||||
)
|
||||
os.remove(file)
|
||||
await xx.delete()
|
||||
os.remove(ik)
|
||||
os.remove(ik)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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']}"
|
||||
)
|
||||
)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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( (.*)|$)")
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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]
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
255
resources/startup/_termux.py
Normal file
255
resources/startup/_termux.py
Normal 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")
|
||||
@@ -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
|
||||
|
||||
19
resources/startup/termux.sh
Normal file
19
resources/startup/termux.sh
Normal 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
|
||||
@@ -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.
|
||||
@@ -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,,,,❌,,,❌,,,❌,,❌,❌,,❌,❌,,,❌,❌,❌
|
||||
|
@@ -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 = {}
|
||||
|
||||
@@ -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: "এই চ্যাটের জন্য ক্লিন অ্যাকশন সেটিংস যোগ করা হয়েছে"
|
||||
|
||||
@@ -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!"
|
||||
|
||||
@@ -1,4 +1,3 @@
|
||||
---
|
||||
name: Spanish
|
||||
natively: Español
|
||||
authors:
|
||||
|
||||
@@ -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: "`वॉयस चैट छोड़ दिया।`"
|
||||
|
||||
@@ -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: "`私は彼を蹴ることができません...`"
|
||||
|
||||
@@ -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: "चॅट मध्ये सर्व रांग साफ केले"
|
||||
|
||||
@@ -1,4 +1,3 @@
|
||||
---
|
||||
name: தமிழ்
|
||||
natively: தமிழ்
|
||||
authors:
|
||||
|
||||
@@ -1,4 +1,3 @@
|
||||
---
|
||||
name: Turkish
|
||||
natively: Türk
|
||||
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
|
||||
from telethon import Button
|
||||
|
||||
from . import *
|
||||
from . import vc_asst, asst, in_pattern
|
||||
|
||||
|
||||
@vc_asst("vchelp")
|
||||
|
||||
@@ -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,
|
||||
)
|
||||
|
||||
@@ -26,7 +26,7 @@
|
||||
|
||||
from pytgcalls.exceptions import NotConnectedError
|
||||
|
||||
from . import *
|
||||
from . import vc_asst, Player, get_string,CLIENTS,VIDEO_ON
|
||||
|
||||
|
||||
@vc_asst("joinvc")
|
||||
|
||||
@@ -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",
|
||||
)
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
Clear all queue in chat.
|
||||
"""
|
||||
|
||||
from . import *
|
||||
from . import vc_asst, get_string, list_queue, VC_QUEUE
|
||||
|
||||
|
||||
@vc_asst("queue")
|
||||
|
||||
@@ -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")
|
||||
|
||||
@@ -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")
|
||||
|
||||
@@ -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]}.",
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user