diff --git a/Dockerfile b/Dockerfile index b0d5e86..9d21a08 100644 --- a/Dockerfile +++ b/Dockerfile @@ -7,18 +7,12 @@ FROM theteamultroid/ultroid:main # set timezone ENV TZ=Asia/Kolkata +RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone -RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone \ - # cloning the repo and installing requirements. - && git clone https://github.com/TeamUltroid/Ultroid.git /root/TeamUltroid/ \ - && pip3 install --no-cache-dir -r root/TeamUltroid/requirements.txt \ - && pip3 install av --no-binary av - -# Railway's banned dependency -RUN if [ ! $RAILWAY_STATIC_URL ]; then pip3 install --no-cache-dir yt-dlp; fi +RUN bash installer.sh # changing workdir -WORKDIR /root/TeamUltroid/ +WORKDIR "/root/TeamUltroid" -# start the bot +# start the bot. CMD ["bash", "startup"] diff --git a/README.md b/README.md index f2ce5a2..4055712 100644 --- a/README.md +++ b/README.md @@ -7,11 +7,11 @@ A stable pluggable Telegram userbot + Voice & Video Call music bot, based on Telethon. -[![](https://img.shields.io/badge/Ultroid-v0.5-blue)](#) +[![](https://img.shields.io/badge/Ultroid-v0.6-darkblue)](#) [![Stars](https://img.shields.io/github/stars/TeamUltroid/Ultroid?style=flat-square&color=yellow)](https://github.com/TeamUltroid/Ultroid/stargazers) [![Forks](https://img.shields.io/github/forks/TeamUltroid/Ultroid?style=flat-square&color=orange)](https://github.com/TeamUltroid/Ultroid/fork) [![Size](https://img.shields.io/github/repo-size/TeamUltroid/Ultroid?style=flat-square&color=green)](https://github.com/TeamUltroid/Ultroid/) -[![Python](https://img.shields.io/badge/Python-v3.10.2-blue)](https://www.python.org/) +[![Python](https://img.shields.io/badge/Python-v3.10.3-blue)](https://www.python.org/) [![CodeFactor](https://www.codefactor.io/repository/github/teamultroid/ultroid/badge/main)](https://www.codefactor.io/repository/github/teamultroid/ultroid/overview/main) [![Maintenance](https://img.shields.io/badge/Maintained%3F-yes-green.svg)](https://github.com/TeamUltroid/Ultroid/graphs/commit-activity) [![Docker Pulls](https://img.shields.io/docker/pulls/theteamultroid/ultroid?style=flat-square)](https://img.shields.io/docker/pulls/theteamultroid/ultroid?style=flat-square) @@ -23,8 +23,9 @@ ---- # Deploy -- [Heroku](#Deploy-to-Heroku) -- [Local Machine](#Deploy-Locally) +- [Heroku](#deploy-to-heroku) +- [Okteto](#deploy-to-okteto) +- [Local Machine](#deploy-locally) # Documentation [![Documentation](https://img.shields.io/badge/Documentation-Ultroid-blue)](http://ultroid.tech/) @@ -40,10 +41,15 @@ Get the [Necessary Variables](#Necessary-Variables) and then click the button be [![Deploy](https://www.herokucdn.com/deploy/button.svg)](https://deploy.ultroid.tech) +## Deploy to Okteto +Get the [Necessary Variables](#Necessary-Variables) and then click the button below! + +[![Develop on Okteto](https://okteto.com/develop-okteto.svg)](https://cloud.okteto.com/deploy?repository=https://github.com/TeamUltroid/Ultroid) + ## Deploy Locally - [Traditional Method](#local-deploy---traditional-method) - [Easy Method](#local-deploy---easy-method) -- [Ultroid CLI](#Ultroid-CLI) +- [Ultroid CLI](#ultroid-cli) ### Local Deploy - Easy Method - Linux - `wget -O locals.py https://git.io/JY9UM && python3 locals.py` diff --git a/assistant/callbackstuffs.py b/assistant/callbackstuffs.py index 9b94fce..1e64f02 100644 --- a/assistant/callbackstuffs.py +++ b/assistant/callbackstuffs.py @@ -20,7 +20,7 @@ try: from pyUltroid.functions.gDrive import GDriveManager except ImportError: GDriveManager = None -from pyUltroid.functions.helper import fast_download, progress, uploader +from pyUltroid.functions.helper import fast_download, progress from pyUltroid.functions.tools import ( Carbon, async_searcher, @@ -1284,8 +1284,10 @@ async def fdroid_dler(event): ) ), ) - tt = time.time() - n_file = await uploader(file, file, tt, event, "Uploading...") + time.time() + n_file = await event.client.fast_uploader( + file, show_progress=True, event=event, message="Uploading...", to_delete=True + ) buttons = Button.switch_inline("Search Back", query="fdroid", same_peer=True) try: msg = await event.edit( @@ -1304,10 +1306,8 @@ async def fdroid_dler(event): ) except Exception as er: os.remove(thumb) - os.remove(file) LOGS.exception(er) return await event.edit(f"**ERROR**: `{er}`", buttons=buttons) if msg and hasattr(msg, "media"): FD_MEDIA.update({uri: msg.media}) os.remove(thumb) - os.remove(file) diff --git a/assistant/inlinestuff.py b/assistant/inlinestuff.py index b8398da..3d547ce 100644 --- a/assistant/inlinestuff.py +++ b/assistant/inlinestuff.py @@ -180,7 +180,7 @@ async def repo(e): @in_pattern("go", owner=True) async def gsearch(q_event): try: - match = q_event.text.split(" ", maxsplit=1)[1] + match = q_event.text.split(maxsplit=1)[1] except IndexError: return await q_event.answer( [], switch_pm="Google Search. Enter a query!", switch_pm_param="start" @@ -273,7 +273,7 @@ async def _(e): @in_pattern("xda", owner=True) async def xda_dev(event): - QUERY = event.text.split(" ", maxsplit=1) + QUERY = event.text.split(maxsplit=1) try: query = QUERY[1] except IndexError: @@ -749,7 +749,7 @@ 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`" + text = f"**Telegram TlObjects Searcher.**\n__(Don't use if you don't know what it is!)__\n\n• Example Usage\n`@{asst.me.username} tl GetFullUserRequest`" return await ult.answer( [ await ult.builder.article( diff --git a/assistant/manager/misc.py b/assistant/manager/misc.py index c36929a..c411a35 100644 --- a/assistant/manager/misc.py +++ b/assistant/manager/misc.py @@ -10,6 +10,7 @@ import random import aiohttp from pyUltroid.dB import DEVLIST +from pyUltroid.functions.admins import admin_check from . import * @@ -24,6 +25,8 @@ async def dheh(e): @asst_cmd(pattern="echo( (.*)|$)") async def oqha(e): + if not await admin_check(e): + return match = e.pattern_match.group(1).strip() if match: text = match diff --git a/docker-compose.yml b/docker-compose.yml index 9b9828e..8362b2e 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -9,4 +9,7 @@ services: API_ID: $API_ID # defaults to None API_HASH: $API_HASH # defaults to None MONGO_URI: $MONGO_URI # defaults to None + BOT_TOKEN: $BOT_TOKEN # Not mandatory + LOG_CHANNEL: $LOG_CHANNEL # Not mandatory DATABASE_URL: $DATABASE_URL # defaults to None + OKTETO_TOKEN: $OKTETO_TOKEN diff --git a/installer.sh b/installer.sh new file mode 100644 index 0000000..8fdc269 --- /dev/null +++ b/installer.sh @@ -0,0 +1,54 @@ +#!/usr/bin/env bash + +REPO="https://github.com/TeamUltroid/Ultroid.git" +DIR="/root/TeamUltroid" + +spinner(){ + local pid=$! + while [ "$(ps a | awk '{print $1}' | grep $pid)" ]; + do + for i in "Ooooo" "oOooo" "ooOoo" "oooOo" "ooooO" "oooOo" "ooOoo" "oOooo" "Ooooo" + do + echo -ne "\r• $i" + sleep 0.2 + done + done +} + +clone_repo(){ + if [ ! $BRANCH ] + then export BRANCH="main" + fi + echo -e "\n\nCloning Ultroid ${BRANCH}... " + git clone -b $BRANCH $REPO $DIR +} + +install_requirements(){ + echo -e "\n\nInstalling requirements... " + pip3 install -q --no-cache-dir -r $DIR/requirements.txt && pip3 install av -q --no-binary av +} + +railways_dep(){ + if [ ! $RAILWAY_STATIC_URL ] + then + echo -e "\n\nInstalling YouTube dependency... " + pip3 install -q --no-cache-dir yt-dlp + fi +} + +install_okteto_cli(){ + if [ $OKTETO_TOKEN ] + then + echo -e "\n\nInstalling Okteto-CLI... " + curl https://get.okteto.com -sSfL | sh + fi +} + +main(){ + (clone_repo) & spinner + (install_requirements) & spinner + (railways_dep) & spinner + (install_okteto_cli) & spinner +} + +main diff --git a/okteto-pipeline.yml b/okteto-pipeline.yml new file mode 100644 index 0000000..c14afbd --- /dev/null +++ b/okteto-pipeline.yml @@ -0,0 +1,3 @@ +icon: https://raw.githubusercontent.com/TeamUltroid/Ultroid/main/resources/extras/logo_readme.jpg +deploy: + - okteto stack deploy --build -f docker-compose.yml diff --git a/plugins/__init__.py b/plugins/__init__.py index f89a58a..c32c498 100644 --- a/plugins/__init__.py +++ b/plugins/__init__.py @@ -5,7 +5,6 @@ # PLease read the GNU Affero General Public License in # . - import asyncio import os import time diff --git a/plugins/_inline.py b/plugins/_inline.py index a1ad3d0..cf103f2 100644 --- a/plugins/_inline.py +++ b/plugins/_inline.py @@ -19,7 +19,17 @@ from telethon import Button from telethon.tl.types import InputWebDocument, Message from telethon.utils import resolve_bot_file_id -from . import HNDLR, INLINE_PIC, LOGS, OWNER_NAME, asst, get_string, start_time, udB +from . import ( + HNDLR, + INLINE_PIC, + LOGS, + OWNER_NAME, + asst, + get_string, + split_list, + start_time, + udB, +) from ._help import _main_help_menu # ================================================# @@ -270,83 +280,38 @@ async def _(event): await event.answer(pin, cache_time=0, alert=True) +InPlugin = { + "Pʟᴀʏ Sᴛᴏʀᴇ Aᴘᴘs": "app telegram", + "Mᴏᴅᴅᴇᴅ Aᴘᴘs": "mods minecraft", + "Sᴇᴀʀᴄʜ Oɴ Gᴏᴏɢʟᴇ": "go TeamUltroid", + "Search on XDA": "xda telegram", + "WʜɪSᴘᴇʀ": "wspr @username Hello🎉", + "YᴏᴜTᴜʙᴇ Dᴏᴡɴʟᴏᴀᴅᴇʀ": "yt Ed Sheeran Perfect", + "Piston Eval": "run javascript console.log('Hello Ultroid')", + "OʀᴀɴɢᴇFᴏx🦊": "ofox beryllium", + "Tᴡɪᴛᴛᴇʀ Usᴇʀ": "twitter theultroid", + "Kᴏᴏ Sᴇᴀʀᴄʜ": "koo @__kumar__amit", + "Fᴅʀᴏɪᴅ Sᴇᴀʀᴄʜ": "fdroid telegram", + "Sᴀᴀᴠɴ sᴇᴀʀᴄʜ": "saavn", + "Tʟ Sᴇᴀʀᴄʜ": "tl", + "GɪᴛHᴜʙ ғᴇᴇᴅs": "gh", + "OᴍɢUʙᴜɴᴛᴜ": "omgu cutefish", +} +_InButtons = [Button.switch_inline(_, query=InPlugin[_]) for _ in list(InPlugin.keys())] +InButtons = split_list(_InButtons, 2) + + @callback(data="inlone", owner=True) async def _(e): - button = [ - [ - Button.switch_inline( - "Pʟᴀʏ Sᴛᴏʀᴇ Aᴘᴘs", - query="app telegram", - same_peer=True, - ), - Button.switch_inline( - "Mᴏᴅᴅᴇᴅ Aᴘᴘs", - query="mods minecraft", - same_peer=True, - ), - ], - [ - Button.switch_inline( - "Sᴇᴀʀᴄʜ Oɴ Gᴏᴏɢʟᴇ", - query="go TeamUltroid", - same_peer=True, - ), - Button.switch_inline( - "Search on XDA", - query="xda telegram", - same_peer=True, - ), - ], - [ - Button.switch_inline( - "WʜɪSᴘᴇʀ", - query="wspr @username Hello🎉", - same_peer=True, - ), - Button.switch_inline( - "YᴏᴜTᴜʙᴇ Dᴏᴡɴʟᴏᴀᴅᴇʀ", - query="yt Ed Sheeran Perfect", - same_peer=True, - ), - ], - [ - Button.switch_inline( - "Piston Eval", - query="run javascript console.log('Hello Ultroid')", - same_peer=True, - ), - Button.switch_inline( - "OʀᴀɴɢᴇFᴏx🦊", - query="ofox beryllium", - same_peer=True, - ), - ], - [ - Button.switch_inline( - "Tᴡɪᴛᴛᴇʀ Usᴇʀ", query="twitter theultroid", same_peer=True - ), - Button.switch_inline( - "Kᴏᴏ Sᴇᴀʀᴄʜ", query="koo @__kumar__amit", same_peer=True - ), - ], - [ - Button.switch_inline( - "Fᴅʀᴏɪᴅ Sᴇᴀʀᴄʜ", query="fdroid telegram", 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 = InButtons.copy() + button.append( [ Button.inline( "« Bᴀᴄᴋ", data="open", ), ], - ] + ) await e.edit(buttons=button, link_preview=False) diff --git a/plugins/_wspr.py b/plugins/_wspr.py index 84edcb1..795df7c 100644 --- a/plugins/_wspr.py +++ b/plugins/_wspr.py @@ -39,7 +39,8 @@ async def _(e): okk = await e.get_reply_message() if okk.sender.username: put = f"@{okk.sender.username}" - put = okk.sender_id + else: + put = okk.sender_id else: put = e.pattern_match.group(1).strip() if put: @@ -72,7 +73,8 @@ async def _(e): text="You Didn't Type Username or id.", ) return await e.answer([sur]) - except ValueError: + except ValueError as er: + LOGS.exception(er) sur = e.builder.article( title="User Not Found", description="Make sure username or id is correct.", @@ -141,11 +143,9 @@ async def _(e): same_peer=True, ), ] - sur = e.builder.document( + sur = e.builder.article( title=user.first_name, description=desc, - file=logi.full_user.profile_photo, - include_media=False, text=text, buttons=button, ) diff --git a/plugins/admintools.py b/plugins/admintools.py index f1fd082..a7dccd7 100644 --- a/plugins/admintools.py +++ b/plugins/admintools.py @@ -48,7 +48,7 @@ from pyUltroid.dB import DEVLIST from pyUltroid.functions.admins import ban_time from telethon.errors import BadRequestError from telethon.errors.rpcerrorlist import ChatNotModifiedError, UserIdInvalidError -from telethon.tl.functions.channels import GetFullChannelRequest +from telethon.tl.functions.channels import EditAdminRequest, GetFullChannelRequest from telethon.tl.functions.messages import GetFullChatRequest, SetHistoryTTLRequest from telethon.tl.types import InputMessagesFilterPinned from telethon.utils import get_display_name @@ -62,7 +62,6 @@ from . import ( get_uinfo, inline_mention, types, - ultroid_bot, ultroid_cmd, ) @@ -79,19 +78,31 @@ async def prmte(ult): await ult.get_chat() user, rank = await get_uinfo(ult) rank = rank or "Admin" + FullRight = False if not user: return await xx.edit(get_string("pro_1")) + if rank.split()[0] == "-f": + try: + rank = rank.split(maxsplit=1)[1] + except IndexError: + rank = "Admin" + FullRight = True try: - await ult.client.edit_admin( - ult.chat_id, - user.id, - invite_users=True, - ban_users=True, - delete_messages=True, - pin_messages=True, - manage_call=True, - title=rank, - ) + if FullRight: + await ult.client( + EditAdminRequest(ult.chat_id, user.id, ult.chat.admin_rights, rank) + ) + else: + await ult.client.edit_admin( + ult.chat_id, + user.id, + invite_users=True, + ban_users=True, + delete_messages=True, + pin_messages=True, + manage_call=True, + title=rank, + ) await eod( xx, get_string("pro_2").format(inline_mention(user), ult.chat.title, rank) ) @@ -220,6 +231,7 @@ async def kck(ult): return await xx.edit(get_string("kick_1")) except Exception as e: LOGS.exception(e) + return text = get_string("kick_4").format( inline_mention(user), inline_mention(await ult.get_sender()), ult.chat.title ) @@ -268,13 +280,7 @@ async def tkicki(e): return await e.eor(str(m)) -@ultroid_cmd( - pattern="pin$", - admins_only=True, - manager=True, - require="pin_messages", - fullsudo=True, -) +@ultroid_cmd(pattern="pin$", manager=True, require="pin_messages", fullsudo=True) async def pin(msg): if not msg.is_reply: return await eor(msg, get_string("pin_1")) @@ -294,7 +300,6 @@ async def pin(msg): @ultroid_cmd( pattern="unpin($| (.*))", - admins_only=True, manager=True, require="pin_messages", fullsudo=True, @@ -387,7 +392,7 @@ async def fastpurger(purg): ) async def fastpurgerme(purg): num = purg.pattern_match.group(1).strip() - if num and not purg.is_reply: + if num: try: nnt = int(num) except BaseException: @@ -401,32 +406,27 @@ async def fastpurgerme(purg): mp += 1 await eor(purg, f"Purged {mp} Messages!", time=5) return - chat = await purg.get_input_chat() - msgs = [] - count = 0 - if not (purg.reply_to_msg_id or num): + elif purg.reply_to_msg_id: + pass + else: return await eod( purg, "`Reply to a message to purge from or use it like ``purgeme `", time=10, ) + chat = await purg.get_input_chat() + msgs = [] async for msg in purg.client.iter_messages( chat, from_user="me", min_id=purg.reply_to_msg_id, ): msgs.append(msg) - count += 1 - msgs.append(purg.reply_to_msg_id) - if len(msgs) == 100: - await ultroid_bot.delete_messages(chat, msgs) - msgs = [] - if msgs: await purg.client.delete_messages(chat, msgs) await eod( purg, - "__Fast purge complete!__\n**Purged** `" + str(count) + "` **messages.**", + "__Fast purge complete!__\n**Purged** `" + str(len(msgs)) + "` **messages.**", ) @@ -516,7 +516,7 @@ async def autodelte(ult): try: await ult.client(SetHistoryTTLRequest(ult.chat_id, period=tt)) except ChatNotModifiedError: - return await eor( - ult, f"Auto Delete Setting is Already same to `{match}`", time=5 + return await ult.eor( + f"Auto Delete Setting is Already same to `{match}`", time=5 ) await ult.eor(f"Auto Delete Status Changed to `{match}` !") diff --git a/plugins/beautify.py b/plugins/beautify.py new file mode 100644 index 0000000..4c1a07d --- /dev/null +++ b/plugins/beautify.py @@ -0,0 +1,140 @@ +# 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 +# . +""" +✘ Commands Available - + +• `{i}carbon ` + Carbonise the text with default settings. + +• `{i}rcarbon ` + Carbonise the text, with random bg colours. + +• `{i}ccarbon ` + Carbonise the text, with custom bg colours. + +• `{i}rayso /` + `{i}rayso list` - `Get list of themes.` +""" + +import random + +from telethon.utils import get_display_name + +from . import Carbon, eor, get_string, inline_mention, os, ultroid_cmd + +_colorspath = "resources/colorlist.txt" + +if os.path.exists(_colorspath): + with open(_colorspath, "r") as f: + all_col = f.read().split() +else: + all_col = [] + + +@ultroid_cmd( + pattern="(rc|c)arbon", +) +async def crbn(event): + xxxx = await event.eor(get_string("com_1")) + te = event.pattern_match.group(1) + col = random.choice(all_col) if te[0] == "r" else "White" + if event.reply_to_msg_id: + temp = await event.get_reply_message() + if temp.media: + b = await event.client.download_media(temp) + with open(b) as a: + code = a.read() + os.remove(b) + else: + code = temp.message + else: + try: + code = event.text.split(" ", maxsplit=1)[1] + except IndexError: + return await eor(xxxx, get_string("carbon_2")) + xx = await Carbon(code=code, file_name="ultroid_carbon", backgroundColor=col) + await xxxx.delete() + await event.reply( + f"Carbonised by {inline_mention(event.sender)}", + file=xx, + ) + + +@ultroid_cmd( + pattern="ccarbon( (.*)|$)", +) +async def crbn(event): + match = event.pattern_match.group(1).strip() + if not match: + return await event.eor(get_string("carbon_3")) + msg = await event.eor(get_string("com_1")) + if event.reply_to_msg_id: + temp = await event.get_reply_message() + if temp.media: + b = await event.client.download_media(temp) + with open(b) as a: + code = a.read() + os.remove(b) + else: + code = temp.message + else: + try: + match = match.split(" ", maxsplit=1) + code = match[1] + match = match[0] + except IndexError: + return await eor(msg, get_string("carbon_2")) + xx = await Carbon(code=code, backgroundColor=match) + await msg.delete() + await event.reply( + f"Carbonised by {inline_mention(event.sender)}", + file=xx, + ) + + +RaySoTheme = [ + "meadow", + "breeze", + "raindrop", + "candy", + "crimson", + "falcon", + "sunset", + "midnight", +] + + +@ultroid_cmd(pattern="rayso") +async def pass_on(ult): + spli = ult.text.split() + theme, dark, title, text = None, True, get_display_name(ult.chat), None + if len(spli) > 2: + if spli[1] in RaySoTheme: + theme = spli[1] + dark = bool(spli[2].lower().strip() in ["true", "t"]) + elif len(spli) > 1: + if spli[1] in RaySoTheme: + theme = spli[1] + elif spli[1] == "list": + text = "**List of Rayso Themes:**\n" + text += "\n".join([f"- `{th_}`" for th_ in RaySoTheme]) + await ult.eor(text) + return + else: + try: + text = ult.text.split(maxsplit=1)[1] + except IndexError: + pass + if not theme: + theme = random.choice(RaySoTheme) + if ult.is_reply: + msg = await ult.get_reply_message() + text = msg.text + title = get_display_name(msg.sender) + await ult.reply( + file=await Carbon(text, rayso=True, title=title, theme=theme, darkMode=dark) + ) diff --git a/plugins/carbon.py b/plugins/carbon.py deleted file mode 100644 index 8790cb2..0000000 --- a/plugins/carbon.py +++ /dev/null @@ -1,233 +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 -# . -""" -✘ Commands Available - - -• `{i}carbon ` - Carbonise the text with default settings. - -• `{i}rcarbon ` - Carbonise the text, with random bg colours. - -• `{i}ccarbon ` - Carbonise the text, with custom bg colours. -""" -import random - -from . import Carbon, eor, get_string, inline_mention, os, ultroid_cmd - -all_col = [ - "Black", - "Navy", - "DarkBlue", - "MediumBlue", - "Blue", - "DarkGreen", - "Green", - "Teal", - "DarkCyan", - "DeepSkyBlue", - "DarkTurquoise", - "MediumSpringGreen", - "Lime", - "SpringGreen", - "Aqua", - "Cyan", - "MidnightBlue", - "DodgerBlue", - "LightSeaGreen", - "ForestGreen", - "SeaGreen", - "DarkSlateGray", - "DarkSlateGrey", - "LimeGreen", - "MediumSeaGreen", - "Turquoise", - "RoyalBlue", - "SteelBlue", - "DarkSlateBlue", - "MediumTurquoise", - "Indigo ", - "DarkOliveGreen", - "CadetBlue", - "CornflowerBlue", - "RebeccaPurple", - "MediumAquaMarine", - "DimGray", - "DimGrey", - "SlateBlue", - "OliveDrab", - "SlateGray", - "SlateGrey", - "LightSlateGray", - "LightSlateGrey", - "MediumSlateBlue", - "LawnGreen", - "Chartreuse", - "Aquamarine", - "Maroon", - "Purple", - "Olive", - "Gray", - "Grey", - "SkyBlue", - "LightSkyBlue", - "BlueViolet", - "DarkRed", - "DarkMagenta", - "SaddleBrown", - "DarkSeaGreen", - "LightGreen", - "MediumPurple", - "DarkViolet", - "PaleGreen", - "DarkOrchid", - "YellowGreen", - "Sienna", - "Brown", - "DarkGray", - "DarkGrey", - "LightBlue", - "GreenYellow", - "PaleTurquoise", - "LightSteelBlue", - "PowderBlue", - "FireBrick", - "DarkGoldenRod", - "MediumOrchid", - "RosyBrown", - "DarkKhaki", - "Silver", - "MediumVioletRed", - "IndianRed ", - "Peru", - "Chocolate", - "Tan", - "LightGray", - "LightGrey", - "Thistle", - "Orchid", - "GoldenRod", - "PaleVioletRed", - "Crimson", - "Gainsboro", - "Plum", - "BurlyWood", - "LightCyan", - "Lavender", - "DarkSalmon", - "Violet", - "PaleGoldenRod", - "LightCoral", - "Khaki", - "AliceBlue", - "HoneyDew", - "Azure", - "SandyBrown", - "Wheat", - "Beige", - "WhiteSmoke", - "MintCream", - "GhostWhite", - "Salmon", - "AntiqueWhite", - "Linen", - "LightGoldenRodYellow", - "OldLace", - "Red", - "Fuchsia", - "Magenta", - "DeepPink", - "OrangeRed", - "Tomato", - "HotPink", - "Coral", - "DarkOrange", - "LightSalmon", - "Orange", - "LightPink", - "Pink", - "Gold", - "PeachPuff", - "NavajoWhite", - "Moccasin", - "Bisque", - "MistyRose", - "BlanchedAlmond", - "PapayaWhip", - "LavenderBlush", - "SeaShell", - "Cornsilk", - "LemonChiffon", - "FloralWhite", - "Snow", - "Yellow", - "LightYellow", - "Ivory", - "White", -] - - -@ultroid_cmd( - pattern="(rc|c)arbon", -) -async def crbn(event): - xxxx = await event.eor(get_string("com_1")) - te = event.text - col = random.choice(all_col) if te[1] == "r" else "White" - if event.reply_to_msg_id: - temp = await event.get_reply_message() - if temp.media: - b = await event.client.download_media(temp) - with open(b) as a: - code = a.read() - os.remove(b) - else: - code = temp.message - else: - try: - code = event.text.split(" ", maxsplit=1)[1] - except IndexError: - return await eor(xxxx, get_string("carbon_2")) - xx = await Carbon(code=code, file_name="ultroid_carbon", backgroundColor=col) - await xxxx.delete() - await event.reply( - f"Carbonised by {inline_mention(event.sender)}", - file=xx, - ) - - -@ultroid_cmd( - pattern="ccarbon( (.*)|$)", -) -async def crbn(event): - match = event.pattern_match.group(1).strip() - if not match: - return await event.eor(get_string("carbon_3")) - msg = await event.eor(get_string("com_1")) - if event.reply_to_msg_id: - temp = await event.get_reply_message() - if temp.media: - b = await event.client.download_media(temp) - with open(b) as a: - code = a.read() - os.remove(b) - else: - code = temp.message - else: - try: - match = match.split(" ", maxsplit=1) - code = match[1] - match = match[0] - except IndexError: - return await eor(msg, get_string("carbon_2")) - xx = await Carbon(code=code, backgroundColor=match) - await msg.delete() - await event.reply( - f"Carbonised by {inline_mention(event.sender)}", - file=xx, - ) diff --git a/plugins/chats.py b/plugins/chats.py index 90ce699..53259d0 100644 --- a/plugins/chats.py +++ b/plugins/chats.py @@ -98,7 +98,7 @@ 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, title = None, None, None + request, usage, title, link = None, None, None, None if match: split = match.split(maxsplit=1) request = bool(split[0] in ["r", "request"]) diff --git a/plugins/core.py b/plugins/core.py index cab6d8d..24dce2b 100644 --- a/plugins/core.py +++ b/plugins/core.py @@ -24,19 +24,15 @@ • `{i}help ` Shows you a help menu (like this) for every plugin. -• `{i}pick addons` - `{i}pick vcbot` - Instantly load 'Addons' or 'VcBot'. - • `{i}getaddons ` Load Plugins from the given raw link. """ import os -from pyUltroid.startup.loader import Loader, load_addons +from pyUltroid.startup.loader import load_addons -from . import async_searcher, eod, get_string, safeinstall, udB, ultroid_cmd, un_plug +from . import async_searcher, eod, get_string, safeinstall, ultroid_cmd, un_plug @ultroid_cmd(pattern="install", fullsudo=True) @@ -115,27 +111,6 @@ async def load(event): ) -@ultroid_cmd(pattern="pick( (.*)|$)", fullsudo=True) -async def pickup_call(ult): - match_ = ult.pattern_match.group(1).strip() - match = match_.lower() - proc = await ult.eor(get_string("com_1")) - if match == "addons": - if udB.get_key("ADDONS"): - return await proc.eor("`Addons are Already Enabled!`", time=8) - udB.set_key("ADDONS", True) - Loader(path="addons", key="Addons").load(func=load_addons) - elif match == "vcbot": - if udB.get_key("VCBOT"): - return await proc.eor("`VcBot is Already Active!`", time=8) - Loader(path="vcbot", key="VCBot").load() - else: - return await proc.eor( - "`Found Nothing to pick!\nSpecify what to pick..`", time=8 - ) - await proc.eor(f"`Successfully Activated {match_}`", time=8) - - @ultroid_cmd(pattern="getaddons( (.*)|$)", fullsudo=True) async def get_the_addons_lol(event): thelink = event.pattern_match.group(1).strip() diff --git a/plugins/devtools.py b/plugins/devtools.py index 267ddc0..70cf8b4 100644 --- a/plugins/devtools.py +++ b/plugins/devtools.py @@ -28,8 +28,10 @@ Shows System Info. """ +import inspect import sys import traceback +from datetime import datetime from io import BytesIO, StringIO from os import remove from pprint import pprint @@ -58,6 +60,8 @@ _ignore_eval = [] async def _(e): xx = await e.eor(get_string("com_1")) x, y = await bash("neofetch|sed 's/\x1B\\[[0-9;\\?]*[a-zA-Z]//g' >> neo.txt") + if y and y.endswith("NOT_FOUND"): + return await xx.edit(f"Error: `{y}`") with open("neo.txt", "r") as neo: p = (neo.read()).replace("\n\n", "") haa = await Carbon(code=p, file_name="neofetch", backgroundColor=choice(ATRA_COL)) @@ -68,7 +72,7 @@ async def _(e): @ultroid_cmd(pattern="bash", fullsudo=True, only_devs=True) async def _(event): - carb = None + carb, yamlf = None, False try: cmd = event.text.split(" ", maxsplit=1)[1] if cmd.split()[0] in ["-c", "--carbon"]: @@ -82,14 +86,15 @@ async def _(event): "`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) + stdout, stderr = await bash(cmd, run_code=1) OUT = f"**☞ BASH\n\n• COMMAND:**\n`{cmd}` \n\n" err, out = "", "" if stderr: err = f"**• ERROR:** \n`{stderr}`\n\n" if stdout: if (carb or udB.get_key("CARBON_ON_BASH")) and ( - event.chat.admin_rights + event.is_private + or event.chat.admin_rights or event.chat.creator or event.chat.default_banned_rights.embed_links ): @@ -104,7 +109,24 @@ async def _(event): out = "**• OUTPUT:**" remove(li) else: - out = f"**• OUTPUT:**\n`{stdout}`" + if all(":" in line for line in stdout.split("\n")): + try: + from strings.strings import safe_load + + load = safe_load(stdout) + stdout = "" + for data in list(load.keys()): + res = load[data] or "" + if res and "http" not in str(res): + res = f"`{res}`" + stdout += f"**{data}** : {res}\n" + yamlf = True + except Exception as er: + stdout = f"`{stdout}`" + LOGS.exception(er) + else: + stdout = f"`{stdout}`" + out = f"**• OUTPUT:**\n{stdout}" if not stderr and not stdout: out = "**• OUTPUT:**\n`Success`" OUT += err + out @@ -124,7 +146,7 @@ async def _(event): await xx.delete() else: - await xx.edit(OUT, link_preview=True) + await xx.edit(OUT, link_preview=not yamlf) pp = pprint # ignore: pylint @@ -153,21 +175,30 @@ async def _(event): cmd = event.text.split(" ", maxsplit=1)[1] except IndexError: return await event.eor(get_string("devs_2"), time=5) - silent = False - if cmd.split()[0] in ["-s", "--silent"]: + silent, gsource, xx = False, False, None + spli = cmd.split() + + async def get_(): try: - cmd = cmd.split(maxsplit=1)[1] + cm = cmd.split(maxsplit=1)[1] except IndexError: - return await event.eor("->> Wrong Format <<-") + await event.eor("->> Wrong Format <<-") + cm = None + return cm + + if spli[0] in ["-s", "--silent"]: await event.delete() silent = True - elif cmd.split()[0] in ["-n", "-noedit"]: - try: - cmd = cmd.split(maxsplit=1)[1] - except IndexError: - return await event.eor("->> Wrong Format <<-") + cmd = await get_() + elif spli[0] in ["-n", "-noedit"]: + cmd = await get_() xx = await event.reply(get_string("com_1")) - else: + elif spli[0] in ["-gs", "--source"]: + gsource = True + cmd = await get_() + if not cmd: + return + if not silent and not xx: xx = await event.eor(get_string("com_1")) if black: try: @@ -195,15 +226,23 @@ async def _(event): old_stdout = sys.stdout redirected_output = sys.stdout = StringIO() redirected_error = sys.stderr = StringIO() - stdout, stderr, exc = None, None, None + stdout, stderr, exc, timeg = None, None, None, None try: + start = datetime.now() value = await aexec(cmd, event) + timeg = time_formatter((datetime.now() - start).microseconds / 1000) except Exception: + value = None exc = traceback.format_exc() stdout = redirected_output.getvalue() stderr = redirected_error.getvalue() sys.stdout = old_stdout sys.stderr = old_stderr + if value and gsource: + try: + exc = inspect.getsource(value) + except Exception: + exc = traceback.format_exc() evaluation = exc or stderr or stdout or _parse_eval(value) or get_string("instu_4") if silent: if exc: @@ -219,11 +258,13 @@ async def _(event): await event.client.send_message(log_chat, msg, parse_mode="html") return final_output = ( - "__►__ **EVALPy**\n```{}``` \n\n __►__ **OUTPUT**: \n```{}``` \n".format( + "__►__ **EVAL**\n```{}``` \n\n __►__ **OUTPUT**: \n```{}``` \n".format( cmd, evaluation, ) ) + if timeg: + final_output += f"Time Taken: `{timeg}`" if len(final_output) > 4096: final_output = evaluation with BytesIO(str.encode(final_output)) as out_file: diff --git a/plugins/downloadupload.py b/plugins/downloadupload.py index d3b217e..97992d1 100644 --- a/plugins/downloadupload.py +++ b/plugins/downloadupload.py @@ -38,6 +38,7 @@ from . import ( downloader, eor, fast_download, + get_all_files, get_string, progress, time_formatter, @@ -178,7 +179,7 @@ async def _(event): for result in results: if os.path.isdir(result): c, s = 0, 0 - for files in sorted(glob.glob(result + "/*")): + for files in get_all_files(result): attributes = None if stream: try: @@ -220,6 +221,5 @@ async def _(event): 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() diff --git a/plugins/extra.py b/plugins/extra.py index 6ebbce0..52c2af9 100644 --- a/plugins/extra.py +++ b/plugins/extra.py @@ -32,11 +32,8 @@ async def delete_it(delme): msg_src = await delme.get_reply_message() if not msg_src: return - try: - await msg_src.delete() - await delme.delete() - except Exception as e: - await delme.eor(f"Couldn't delete the message.\n\n**ERROR:**\n`{e}`", time=5) + await msg_src.try_delete() + await delme.try_delete() @ultroid_cmd( diff --git a/plugins/fontgen.py b/plugins/fontgen.py index 9fa11e9..b7b3293 100644 --- a/plugins/fontgen.py +++ b/plugins/fontgen.py @@ -12,15 +12,17 @@ To get list of fonts """ +import string from . import HNDLR, eod, ultroid_cmd -fonts = ["small caps", "monospace", "double stroke", "script royal"] -_default = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ" -_small_caps = "ᴀʙᴄᴅᴇғɢʜɪᴊᴋʟᴍɴᴏᴘϙʀsᴛᴜᴠᴡxʏᴢABCDEFGHIJKLMNOPQRSTUVWXYZ" -_monospace = "𝚊𝚋𝚌𝚍𝚎𝚏𝚐𝚑𝚒𝚓𝚔𝚕𝚖𝚗𝚘𝚙𝚚𝚛𝚜𝚝𝚞𝚟𝚠𝚡𝚢𝚣𝙰𝙱𝙲𝙳𝙴𝙵𝙶𝙷𝙸𝙹𝙺𝙻𝙼𝙽𝙾𝙿𝚀𝚁𝚂𝚃𝚄𝚅𝚆𝚇𝚈𝚉" -_double_stroke = "𝕒𝕓𝕔𝕕𝕖𝕗𝕘𝕙𝕚𝕛𝕜𝕝𝕞𝕟𝕠𝕡𝕢𝕣𝕤𝕥𝕦𝕧𝕨𝕩𝕪𝕫𝔸𝔹ℂ𝔻𝔼𝔽𝔾ℍ𝕀𝕁𝕂𝕃𝕄ℕ𝕆ℙℚℝ𝕊𝕋𝕌𝕍𝕎𝕏𝕐ℤ" -_script_royal = "𝒶𝒷𝒸𝒹𝑒𝒻𝑔𝒽𝒾𝒿𝓀𝓁𝓂𝓃𝑜𝓅𝓆𝓇𝓈𝓉𝓊𝓋𝓌𝓍𝓎𝓏𝒜ℬ𝒞𝒟ℰℱ𝒢ℋℐ𝒥𝒦ℒℳ𝒩𝒪𝒫𝒬ℛ𝒮𝒯𝒰𝒱𝒲𝒳𝒴𝒵" +_default = string.ascii_letters +Fonts = { + "small caps": "ᴀʙᴄᴅᴇғɢʜɪᴊᴋʟᴍɴᴏᴘϙʀsᴛᴜᴠᴡxʏᴢABCDEFGHIJKLMNOPQRSTUVWXYZ", + "monospace": "𝚊𝚋𝚌𝚍𝚎𝚏𝚐𝚑𝚒𝚓𝚔𝚕𝚖𝚗𝚘𝚙𝚚𝚛𝚜𝚝𝚞𝚟𝚠𝚡𝚢𝚣𝙰𝙱𝙲𝙳𝙴𝙵𝙶𝙷𝙸𝙹𝙺𝙻𝙼𝙽𝙾𝙿𝚀𝚁𝚂𝚃𝚄𝚅𝚆𝚇𝚈𝚉", + "double stroke": "𝕒𝕓𝕔𝕕𝕖𝕗𝕘𝕙𝕚𝕛𝕜𝕝𝕞𝕟𝕠𝕡𝕢𝕣𝕤𝕥𝕦𝕧𝕨𝕩𝕪𝕫𝔸𝔹ℂ𝔻𝔼𝔽𝔾ℍ𝕀𝕁𝕂𝕃𝕄ℕ𝕆ℙℚℝ𝕊𝕋𝕌𝕍𝕎𝕏𝕐ℤ", + "script royal": "𝒶𝒷𝒸𝒹𝑒𝒻𝑔𝒽𝒾𝒿𝓀𝓁𝓂𝓃𝑜𝓅𝓆𝓇𝓈𝓉𝓊𝓋𝓌𝓍𝓎𝓏𝒜ℬ𝒞𝒟ℰℱ𝒢ℋℐ𝒥𝒦ℒℳ𝒩𝒪𝒫𝒬ℛ𝒮𝒯𝒰𝒱𝒲𝒳𝒴𝒵", +} @ultroid_cmd( @@ -32,7 +34,7 @@ async def _(e): help = __doc__.format(i=HNDLR) if not input: m = "**Available Fonts**\n\n" - for x in fonts: + for x in Fonts.keys(): m += f"• `{x}`\n" return await e.eor(m, time=5) if not reply: @@ -47,16 +49,9 @@ async def _(e): else: font = input text = reply.message - if font not in fonts: + if font not in Fonts.keys(): return await e.eor(f"`{font} not in font list`.", time=5) - if font == "small caps": - msg = gen_font(text, _small_caps) - elif font == "monospace": - msg = gen_font(text, _monospace) - elif font == "double stroke": - msg = gen_font(text, _double_stroke) - elif font == "script royal": - msg = gen_font(text, _script_royal) + msg = gen_font(text, Fonts[font]) await e.eor(msg) diff --git a/plugins/imagetools.py b/plugins/imagetools.py index 197ee7b..b1528a0 100644 --- a/plugins/imagetools.py +++ b/plugins/imagetools.py @@ -85,32 +85,6 @@ from . import ( ) -@ultroid_cmd( - pattern="sketch$", -) -async def sketch(e): - ureply = await e.get_reply_message() - xx = await e.eor("`...`") - if not (ureply and (ureply.media)): - await xx.edit(get_string("cvt_3")) - return - ultt = await ureply.download_media() - if ultt.endswith(".tgs"): - await xx.edit(get_string("sts_9")) - 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 - blurred_img = cv2.GaussianBlur(inverted_gray_image, (21, 21), 0) - inverted_blurred_img = 255 - blurred_img - pencil_sketch_IMG = cv2.divide(gray_image, inverted_blurred_img, scale=256.0) - cv2.imwrite("ultroid.png", pencil_sketch_IMG) - await e.reply(file="ultroid.png") - await xx.delete() - os.remove(file) - os.remove("ultroid.png") - - @ultroid_cmd(pattern="color$") async def _(event): reply = await event.get_reply_message() @@ -141,20 +115,67 @@ async def _(event): await xx.delete() -@ultroid_cmd( - pattern="grey$", -) -async def ultd(event): +@ultroid_cmd(pattern="(grey|blur|negative|danger|mirror|quad|sketch|flip|toon)$") +async def ult_tools(event): + match = event.pattern_match.group(1) ureply = await event.get_reply_message() if not (ureply and (ureply.media)): await event.eor(get_string("cvt_3")) return ultt = await ureply.download_media() + xx = await event.eor(get_string("com_1")) if ultt.endswith(".tgs"): - xx = await event.eor(get_string("sts_9")) + xx = await xx.edit(get_string("sts_9")) file = await con.convert(ultt, convert_to="png", outname="ult") ult = cv2.imread(file) - ultroid = cv2.cvtColor(ult, cv2.COLOR_BGR2GRAY) + if match == "grey": + ultroid = cv2.cvtColor(ult, cv2.COLOR_BGR2GRAY) + elif match == "blur": + ultroid = cv2.GaussianBlur(ult, (35, 35), 0) + elif match == "negative": + ultroid = cv2.bitwise_not(ult) + elif match == "danger": + dan = cv2.cvtColor(ult, cv2.COLOR_BGR2RGB) + ultroid = cv2.cvtColor(dan, cv2.COLOR_HSV2BGR) + elif match == "mirror": + ish = cv2.flip(ult, 1) + ultroid = cv2.hconcat([ult, ish]) + elif match == "flip": + trn = cv2.flip(ult, 1) + ish = cv2.rotate(trn, cv2.ROTATE_180) + ultroid = cv2.vconcat([ult, ish]) + elif match == "quad": + ult = cv2.imread(file) + roid = cv2.flip(ult, 1) + mici = cv2.hconcat([ult, roid]) + fr = cv2.flip(mici, 1) + trn = cv2.rotate(fr, cv2.ROTATE_180) + ultroid = cv2.vconcat([mici, trn]) + elif match == "sketch": + gray_image = cv2.cvtColor(ult, cv2.COLOR_BGR2GRAY) + inverted_gray_image = 255 - gray_image + blurred_img = cv2.GaussianBlur(inverted_gray_image, (21, 21), 0) + inverted_blurred_img = 255 - blurred_img + ultroid = cv2.divide(gray_image, inverted_blurred_img, scale=256.0) + elif match == "toon": + height, width, _ = ult.shape + samples = np.zeros([height * width, 3], dtype=np.float32) + count = 0 + for x in range(height): + for y in range(width): + samples[count] = ult[x][y] + count += 1 + _, labels, centers = cv2.kmeans( + samples, + 12, + None, + (cv2.TERM_CRITERIA_EPS + cv2.TERM_CRITERIA_MAX_ITER, 10000, 0.0001), + 5, + cv2.KMEANS_PP_CENTERS, + ) + centers = np.uint8(centers) + ish = centers[labels.flatten()] + ultroid = ish.reshape(ult.shape) cv2.imwrite("ult.jpg", ultroid) await event.client.send_file( event.chat_id, @@ -163,227 +184,8 @@ async def ultd(event): reply_to=event.reply_to_msg_id, ) await xx.delete() - os.remove("ult.png") os.remove("ult.jpg") - os.remove(ultt) - - -@ultroid_cmd( - pattern="blur$", -) -async def ultd(event): - ureply = await event.get_reply_message() - if not (ureply and (ureply.media)): - await event.eor(get_string("cvt_3")) - return - ultt = await ureply.download_media() - if ultt.endswith(".tgs"): - xx = await event.eor(get_string("sts_9")) - 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) - await event.client.send_file( - event.chat_id, - "ult.jpg", - force_document=False, - reply_to=event.reply_to_msg_id, - ) - await xx.delete() - for i in ["ult.png", "ult.jpg", ultt]: - if os.path.exists(i): - os.remove(i) - - -@ultroid_cmd( - pattern="negative$", -) -async def ultd(event): - ureply = await event.get_reply_message() - xx = await event.eor("`...`") - if not (ureply and (ureply.media)): - await xx.edit(get_string("cvt_3")) - return - ultt = await ureply.download_media() - if ultt.endswith(".tgs"): - await xx.edit(get_string("sts_9")) - file = await con.convert(ultt, convert_to="png", outname="ult") - ult = cv2.imread(file) - ultroid = cv2.bitwise_not(ult) - cv2.imwrite("ult.jpg", ultroid) - await event.client.send_file( - event.chat_id, - "ult.jpg", - force_document=False, - reply_to=event.reply_to_msg_id, - ) - await xx.delete() - os.remove("ult.png") - os.remove("ult.jpg") - os.remove(ultt) - - -@ultroid_cmd( - pattern="mirror$", -) -async def ultd(event): - ureply = await event.get_reply_message() - xx = await event.eor("`...`") - if not (ureply and (ureply.media)): - await xx.edit(get_string("cvt_3")) - return - ultt = await ureply.download_media() - file = await con.convert(ultt, convert_to="png", outname="ult") - ult = cv2.imread(file) - ish = cv2.flip(ult, 1) - ultroid = cv2.hconcat([ult, ish]) - cv2.imwrite("ult.jpg", ultroid) - await event.client.send_file( - event.chat_id, - "ult.jpg", - force_document=False, - reply_to=event.reply_to_msg_id, - ) - await xx.delete() - os.remove("ult.png") - os.remove("ult.jpg") - os.remove(ultt) - - -@ultroid_cmd( - pattern="flip$", -) -async def ultd(event): - ureply = await event.get_reply_message() - xx = await event.eor("`...`") - if not (ureply and (ureply.media)): - await xx.edit(get_string("cvt_3")) - return - ultt = await ureply.download_media() - if ultt.endswith(".tgs"): - await xx.edit(get_string("sts_9")) - 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) - ultroid = cv2.vconcat([ult, ish]) - cv2.imwrite("ult.jpg", ultroid) - await event.client.send_file( - event.chat_id, - "ult.jpg", - force_document=False, - reply_to=event.reply_to_msg_id, - ) - await xx.delete() - os.remove("ult.png") - os.remove("ult.jpg") - os.remove(ultt) - - -@ultroid_cmd( - pattern="quad$", -) -async def ultd(event): - ureply = await event.get_reply_message() - xx = await event.eor("`...`") - if not (ureply and (ureply.media)): - await xx.edit(get_string("cvt_3")) - return - ultt = await ureply.download_media() - if ultt.endswith(".tgs"): - await xx.edit(get_string("sts_9")) - file = await con.convert(ultt, convert_to="png", outname="ult") - ult = cv2.imread(file) - roid = cv2.flip(ult, 1) - mici = cv2.hconcat([ult, roid]) - fr = cv2.flip(mici, 1) - trn = cv2.rotate(fr, cv2.ROTATE_180) - ultroid = cv2.vconcat([mici, trn]) - cv2.imwrite("ult.jpg", ultroid) - await event.client.send_file( - event.chat_id, - "ult.jpg", - force_document=False, - reply_to=event.reply_to_msg_id, - ) - await xx.delete() - os.remove("ult.png") - os.remove("ult.jpg") - os.remove(ultt) - - -@ultroid_cmd( - pattern="toon$", -) -async def ultd(event): - ureply = await event.get_reply_message() - xx = await event.eor("`...`") - if not (ureply and (ureply.media)): - await xx.edit(get_string("cvt_3")) - return - ultt = await ureply.download_media() - if ultt.endswith(".tgs"): - await xx.edit(get_string("sts_9")) - 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) - count = 0 - for x in range(height): - for y in range(width): - samples[count] = ult[x][y] - count += 1 - compactness, labels, centers = cv2.kmeans( - samples, - 12, - None, - (cv2.TERM_CRITERIA_EPS + cv2.TERM_CRITERIA_MAX_ITER, 10000, 0.0001), - 5, - cv2.KMEANS_PP_CENTERS, - ) - centers = np.uint8(centers) - ish = centers[labels.flatten()] - ultroid = ish.reshape(ult.shape) - cv2.imwrite("ult.jpg", ultroid) - await event.client.send_file( - event.chat_id, - "ult.jpg", - force_document=False, - reply_to=event.reply_to_msg_id, - ) - await xx.delete() - os.remove("ult.png") - os.remove("ult.jpg") - os.remove(ultt) - - -@ultroid_cmd( - pattern="danger$", -) -async def ultd(event): - ureply = await event.get_reply_message() - xx = await event.eor("`...`") - if not (ureply and (ureply.media)): - await xx.edit(get_string("cvt_3")) - return - ultt = await ureply.download_media() - if ultt.endswith(".tgs"): - await xx.edit(get_string("sts_9")) - 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) - cv2.imwrite("ult.jpg", ultroid) - await event.client.send_file( - event.chat_id, - "ult.jpg", - force_document=False, - reply_to=event.reply_to_msg_id, - ) - await xx.delete() - os.remove("ult.png") - os.remove("ult.jpg") - os.remove(ultt) + os.remove(file) @ultroid_cmd(pattern="csample (.*)") diff --git a/plugins/megadl.py b/plugins/megadl.py deleted file mode 100644 index b1f2c21..0000000 --- a/plugins/megadl.py +++ /dev/null @@ -1,67 +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 -# . -""" -✘ Commands Available - - -•`{i}megadl ` - It Downloads and Upload Files from mega.nz links. -""" -import time -from datetime import datetime - -from . import ( - HNDLR, - LOGS, - bash, - get_all_files, - get_string, - humanbytes, - os, - time_formatter, - ultroid_cmd, - uploader, -) - - -@ultroid_cmd(pattern="megadl( (.*)|$)") -async def _(e): - link = e.pattern_match.group(1).strip() - if os.path.isdir("mega"): - await bash("rm -rf mega") - os.mkdir("mega") - xx = await e.eor(f"{get_string('com_1')}\nTo Check Progress : `{HNDLR}ls mega`") - s = datetime.now() - x, y = await bash(f"megadl {link} --path mega") - ok = get_all_files("mega") - tt = time.time() - c = 0 - for kk in ok: - try: - res = await uploader(kk, kk, tt, xx, get_string("com_6")) - await e.client.send_file( - e.chat_id, - res, - caption="`" + kk.split("/")[-1] + "`", - force_document=True, - thumb="resources/extras/ultroid.jpg", - ) - c += 1 - except Exception as er: - LOGS.info(er) - ee = datetime.now() - t = time_formatter(((ee - s).seconds) * 1000) - size = 0 - for path, dirs, files in os.walk("mega"): - for f in files: - fp = os.path.join(path, f) - size += os.path.getsize(fp) - await xx.delete() - await e.client.send_message( - e.chat_id, - f"Downloaded And Uploaded Total - `{c}` files of `{humanbytes(size)}` in `{t}`", - ) - await bash("rm -rf mega") diff --git a/plugins/nsfwfilter.py b/plugins/nsfwfilter.py index 8eb0bcc..0810dc6 100644 --- a/plugins/nsfwfilter.py +++ b/plugins/nsfwfilter.py @@ -94,7 +94,7 @@ async def nsfw_check(e): NWARN.update({e.sender_id: count}) return await ultroid_bot.send_message( chat, - f"**NSFW Warn {count}/3** To [{e.sender.first_name}](tg://user?id={e.sender_id})\nDon't Send NSFW stuffs Here Or You will Be Get {action}", + f"**NSFW Warn {count}/3** To [{e.sender.first_name}](tg://user?id={e.sender_id})\nNSFW prohibited! Repeated violation would lead to {action}", ) if "mute" in action: try: @@ -108,7 +108,7 @@ async def nsfw_check(e): except BaseException: await ultroid_bot.send_message( chat, - f"NSFW Warn 3/3 to [{e.sender.first_name}](tg://user?id={e.sender_id})\n\nCan't Able to {action}.", + f"NSFW Warn 3/3 to [{e.sender.first_name}](tg://user?id={e.sender_id})\n\nUnable to {action}.", ) elif "ban" in action: try: @@ -122,7 +122,7 @@ async def nsfw_check(e): except BaseException: await ultroid_bot.send_message( chat, - f"NSFW Warn 3/3 to [{e.sender.first_name}](tg://user?id={e.sender_id})\n\nCan't Able to {action}.", + f"NSFW Warn 3/3 to [{e.sender.first_name}](tg://user?id={e.sender_id})\n\nUnable to {action}.", ) elif "kick" in action: try: @@ -134,14 +134,14 @@ async def nsfw_check(e): except BaseException: await ultroid_bot.send_message( chat, - f"NSFW Warn 3/3 to [{e.sender.first_name}](tg://user?id={e.sender_id})\n\nCan't Able to {action}.", + f"NSFW Warn 3/3 to [{e.sender.first_name}](tg://user?id={e.sender_id})\n\nUnable to {action}.", ) NWARN.pop(e.sender_id) else: NWARN.update({e.sender_id: 1}) return await ultroid_bot.send_message( chat, - f"**NSFW Warn 1/3** To [{e.sender.first_name}](tg://user?id={e.sender_id})\nDon't Send NSFW stuffs Here Or You will Be Get {action}", + f"**NSFW Warn 1/3** To [{e.sender.first_name}](tg://user?id={e.sender_id})\nNSFW prohibited! Repeated violation would lead to {action}", ) diff --git a/plugins/pmpermit.py b/plugins/pmpermit.py index 9f64c67..8b08872 100644 --- a/plugins/pmpermit.py +++ b/plugins/pmpermit.py @@ -375,9 +375,7 @@ if udB.get_key("PMSETTING"): f"**{mention}** [`{user.id}`] was Blocked for spamming.", ) - @ultroid_cmd( - pattern="(start|stop|clear)archive$", - ) + @ultroid_cmd(pattern="(start|stop|clear)archive$", fullsudo=True) async def _(e): x = e.pattern_match.group(1).strip() if x == "start": @@ -393,9 +391,7 @@ if udB.get_key("PMSETTING"): except Exception as mm: await e.eor(str(mm), time=5) - @ultroid_cmd( - pattern="(a|approve)(?: |$)", - ) + @ultroid_cmd(pattern="(a|approve)(?: |$)", fullsudo=True) async def approvepm(apprvpm): if apprvpm.reply_to_msg_id: user = (await apprvpm.get_reply_message()).sender @@ -446,9 +442,7 @@ if udB.get_key("PMSETTING"): else: await apprvpm.eor("`User may already be approved.`", time=5) - @ultroid_cmd( - pattern="(da|disapprove)(?: |$)", - ) + @ultroid_cmd(pattern="(da|disapprove)(?: |$)", fullsudo=True) async def disapprovepm(e): if e.reply_to_msg_id: user = (await e.get_reply_message()).sender @@ -520,7 +514,7 @@ async def blockpm(block): ) await block.client(BlockRequest(user)) aname = await block.client.get_entity(user) - await block.eor(f"{inline_mention(aname)} `has been blocked!`") + await block.eor(f"{inline_mention(aname)} [`{user}`] `has been blocked!`") try: disapprove_user(user) except AttributeError: @@ -546,11 +540,12 @@ async def blockpm(block): pass -@ultroid_cmd(pattern="unblock( (.*)|$)") +@ultroid_cmd(pattern="unblock( (.*)|$)", fullsudo=True) async def unblockpm(event): match = event.pattern_match.group(1).strip() - if event.reply_to_msg_id: - user = (await event.get_reply_message()).sender_id + reply = await event.get_reply_message() + if reply: + user = reply.sender_id elif match: if match == "all": msg = await event.eor(get_string("com_1")) @@ -576,14 +571,10 @@ async def unblockpm(event): 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 + elif event.is_private: + user = event.chat_id else: return await event.eor(NO_REPLY, time=10) - try: - user = await event.client.parse_id(match) - except Exception as er: - return await event.eor(str(er)) try: await event.client(UnblockRequest(user)) aname = await event.client.get_entity(user) diff --git a/plugins/profile.py b/plugins/profile.py index 814f772..3786ada 100644 --- a/plugins/profile.py +++ b/plugins/profile.py @@ -112,6 +112,9 @@ async def remove_profilepic(delpfp): async def gpoto(e): ult = e.pattern_match.group(1).strip() a = await e.eor(get_string("com_1")) + just_dl = ult in ["-dl", "--dl"] + if just_dl: + ult = None if not ult: if e.is_reply: gs = await e.get_reply_message() @@ -121,6 +124,8 @@ async def gpoto(e): okla = await e.client.download_profile_photo(ult) if not okla: return await eor(a, "`Pfp Not Found...`") - await a.delete() - await e.reply(file=okla) - os.remove(okla) + if not just_dl: + await a.delete() + await e.reply(file=okla) + return os.remove(okla) + await a.edit(f"Downloaded pfp to [ `{okla}` ].") diff --git a/plugins/specialtools.py b/plugins/specialtools.py index fc720bf..7bded4c 100644 --- a/plugins/specialtools.py +++ b/plugins/specialtools.py @@ -56,7 +56,7 @@ from . import ( ultroid_cmd, uploader, ) -from .carbon import all_col +from .beautify import all_col File = [] diff --git a/plugins/tools.py b/plugins/tools.py index 04c051b..8c376ee 100644 --- a/plugins/tools.py +++ b/plugins/tools.py @@ -63,7 +63,7 @@ from telethon.tl.types import ( ) from telethon.utils import pack_bot_file_id -from . import HNDLR, async_searcher, bash, con, eor, get_string +from . import HNDLR, LOGS, async_searcher, bash, con, eor, get_string from . import humanbytes as hb from . import inline_mention, is_url_ok, mediainfo, ultroid_cmd @@ -94,6 +94,7 @@ async def _(event): output_str = f"**TRANSLATED** from {fr} to {lan}\n{tt}" await event.eor(output_str) except Exception as exc: + LOGS.exception(exc) await event.eor(str(exc), time=5) diff --git a/plugins/usage.py b/plugins/usage.py index 78e15e1..b435f11 100644 --- a/plugins/usage.py +++ b/plugins/usage.py @@ -41,6 +41,8 @@ if HOSTED_ON == "heroku": heroku_api, app_name = Var.HEROKU_API, Var.HEROKU_APP_NAME try: if heroku_api and app_name: + import heroku3 + Heroku = heroku3.from_key(heroku_api) app = Heroku.app(app_name) HEROKU_API = heroku_api diff --git a/plugins/writer.py b/plugins/writer.py index dc08e30..96abcf6 100644 --- a/plugins/writer.py +++ b/plugins/writer.py @@ -4,6 +4,7 @@ # This file is a part of < https://github.com/TeamUltroid/Ultroid/ > # PLease read the GNU Affero General Public License in # . + """ ✘ Commands Available - diff --git a/plugins/ziptools.py b/plugins/ziptools.py index d8d305d..518a06b 100644 --- a/plugins/ziptools.py +++ b/plugins/ziptools.py @@ -76,11 +76,12 @@ async def zipp(event): await xx.delete() -@ultroid_cmd(pattern="unzip$") +@ultroid_cmd(pattern="unzip( (.*)|$)") async def unzipp(event): reply = await event.get_reply_message() + file = event.pattern_match.group(1).strip() t = time.time() - if not reply: + if not ((reply and reply.media) or file): await event.eor(get_string("zip_1")) return xx = await event.eor(get_string("com_1")) @@ -117,7 +118,7 @@ async def unzipp(event): async def azipp(event): reply = await event.get_reply_message() t = time.time() - if not reply: + if not (reply and reply.media): await event.eor(get_string("zip_1")) return xx = await event.eor(get_string("com_1")) diff --git a/requirements.txt b/requirements.txt index dc5bdf4..28f1031 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,5 +1,5 @@ # Important Requirements here. -https://github.com/New-dev0/Telethon/archive/PlayTime.zip -py-Ultroid==2022.3.20 +https://github.com/New-dev0/Telethon/archive/Cartoon.zip +py-Ultroid==2022.6.6 pytgcalls==3.0.0.dev21 diff --git a/resources/colorlist.txt b/resources/colorlist.txt new file mode 100644 index 0000000..6e3f3c3 --- /dev/null +++ b/resources/colorlist.txt @@ -0,0 +1,148 @@ +AliceBlue +AntiqueWhite +Aqua +Aquamarine +Azure +Beige +Bisque +Black +BlanchedAlmond +Blue +BlueViolet +Brown +BurlyWood +CadetBlue +Chartreuse +Chocolate +Coral +CornflowerBlue +Cornsilk +Crimson +Cyan +DarkBlue +DarkCyan +DarkGoldenRod +DarkGray +DarkGreen +DarkGrey +DarkKhaki +DarkMagenta +DarkOliveGreen +DarkOrange +DarkOrchid +DarkRed +DarkSalmon +DarkSeaGreen +DarkSlateBlue +DarkSlateGray +DarkSlateGrey +DarkTurquoise +DarkViolet +DeepPink +DeepSkyBlue +DimGray +DimGrey +DodgerBlue +FireBrick +FloralWhite +ForestGreen +Fuchsia +Gainsboro +GhostWhite +Gold +GoldenRod +Gray +Green +GreenYellow +Grey +HoneyDew +HotPink +IndianRed +Indigo +Ivory +Khaki +Lavender +LavenderBlush +LawnGreen +LemonChiffon +LightBlue +LightCoral +LightCyan +LightGoldenRodYellow +LightGray +LightGreen +LightGrey +LightPink +LightSalmon +LightSeaGreen +LightSkyBlue +LightSlateGray +LightSlateGrey +LightSteelBlue +LightYellow +Lime +LimeGreen +Linen +Magenta +Maroon +MediumAquaMarine +MediumBlue +MediumOrchid +MediumPurple +MediumSeaGreen +MediumSlateBlue +MediumSpringGreen +MediumTurquoise +MediumVioletRed +MidnightBlue +MintCream +MistyRose +Moccasin +NavajoWhite +Navy +OldLace +Olive +OliveDrab +Orange +OrangeRed +Orchid +PaleGoldenRod +PaleGreen +PaleTurquoise +PaleVioletRed +PapayaWhip +PeachPuff +Peru +Pink +Plum +PowderBlue +Purple +RebeccaPurple +Red +RosyBrown +RoyalBlue +SaddleBrown +Salmon +SandyBrown +SeaGreen +SeaShell +Sienna +Silver +SkyBlue +SlateBlue +SlateGray +SlateGrey +Snow +SpringGreen +SteelBlue +Tan +Teal +Thistle +Tomato +Turquoise +Violet +Wheat +White +WhiteSmoke +Yellow +YellowGreen \ No newline at end of file diff --git a/resources/startup/_termux.py b/resources/startup/_termux.py index c6146bb..939e98d 100644 --- a/resources/startup/_termux.py +++ b/resources/startup/_termux.py @@ -16,8 +16,8 @@ def clear(): system("clear") MANDATORY_REQS = [ - "https://github.com/New-dev0/Telethon/archive/PlayTime.zip", - "py-Ultroid==2022.3.20", + "https://github.com/New-dev0/Telethon/archive/Cartoon.zip", + "py-Ultroid==2022.6.6", "gitpython", "enhancer==0.3.4", "telegraph", @@ -252,4 +252,4 @@ print("\nYou can head over to @UltroidSupport, if you get stuck somewhere, and n sleep(0.5) print("\nMade with ❤️ by @TeamUltroid...") -system("pip3 uninstall colorama -y") +system("pip3 uninstall -q colorama -y") diff --git a/resources/startup/optional-requirements.txt b/resources/startup/optional-requirements.txt index 1cbe503..95586d3 100644 --- a/resources/startup/optional-requirements.txt +++ b/resources/startup/optional-requirements.txt @@ -16,6 +16,7 @@ git+https://github.com/buddhhu/img2html.git git+https://github.com/programmingerror/heroku3.py.git gitpython google-api-python-client +feedparser html-telegraph-poster htmlwebshot lottie diff --git a/resources/startup/termux.sh b/resources/startup/termux.sh index 645cc55..4d608e4 100644 --- a/resources/startup/termux.sh +++ b/resources/startup/termux.sh @@ -13,7 +13,7 @@ then fi printf "*Putting some magical effect...*" -pip install colorama +pip install -q colorama printf "Running up Installation tool.\n" python resources/startup/_termux.py diff --git a/strings/README.md b/strings/README.md index bbaa39e..458c8f0 100644 --- a/strings/README.md +++ b/strings/README.md @@ -3,28 +3,29 @@ | Code | Language | Translated | Remaining | |----|-------|-------|---| -| en | English [English] | 413 | 0 | -| 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 [हिंदी] | 413 | NULL | -| az | Azerbaijan [Azərbaycan] | 382 | 31 | -| 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 | +| en | English [English] | 418 | 0 | +| ar | Arabic [العربية] | 418 | NULL | +| si | sinhala [සිංහල] | 112 | 306 | +| hi | Hindi [हिंदी] | 413 | 5 | +| fr | French [Français] | 110 | 308 | +| jp | Japanese [日本] | 413 | 5 | +| fa | Persian [Farsi] | 391 | 27 | +| id | Indonesia [Indonesia] | 413 | 5 | +| pt-br | Portuguese [Português] | 413 | 5 | +| gu | Gujarati [ગુજરાતી] | 109 | 309 | +| ml | Malayalam [മലയാളം] | 112 | 306 | +| ru | Russian [Русский] | 413 | 5 | +| ta | தமிழ் [தமிழ்] | 112 | 306 | +| my | Malay [Bahasa Melayu] | 112 | 306 | +| es | Spanish [Español] | 409 | 9 | +| od | Odia [ଓଡିଆ] | 112 | 306 | +| tr | Turkish [Türk] | 112 | 306 | +| mr | Marathi [मराठी] | 131 | 287 | +| cn | Chinese [简体中文] | 112 | 306 | +| ka | Kannada [ಕನ್ನಡ] | 112 | 306 | +| bn | Bengali [বাংলা] | 382 | 36 | +| it | Italian [italiano] | 111 | 307 | +| az | Azerbaijan [Azərbaycan] | 382 | 36 | If Strings are not present, Google Translation will be used to Translate them at time of Usage. diff --git a/strings/remaining.csv b/strings/remaining.csv index 8dcf2ae..ee0a09c 100644 --- a/strings/remaining.csv +++ b/strings/remaining.csv @@ -1,310 +1,399 @@ --,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,,,,❌,,,❌,,,❌,,❌,❌,❌,❌,❌,,,❌,❌,❌ -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,,,,❌,,,❌,,,❌,,❌,❌,❌,❌,❌,,,❌,❌,❌ -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,,,,❌,,,❌,,,❌,,❌,❌,❌,❌,❌,,,❌,❌,❌ -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,,,,❌,,,❌,,,❌,,❌,❌,,❌,❌,,,❌,❌,❌ \ No newline at end of file +-,Arabic,Azerbaijan,Bengali,Chinese,Spanish,Persian,French,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,,,,❌,,,,❌,,,❌,,❌,❌,❌,❌,❌,,,❌,❌,❌ +afk_1,,,,,,,❌,,,,,,,,,,,,,,, +afk_2,,,,,,,❌,,,,,,,,,,,,,,, +afk_3,,,,,,,❌,,,,,,,,,,,,,,, +afk_4,,,,,,,❌,,,,,,,,,,,,,,, +afk_5,,,,,,,❌,,,,,,,,,,,,,,, +afk_6,,,,,,,❌,,,,,,,,,,,,,,, +bot_1,,,,❌,,,❌,❌,,,❌,,❌,❌,❌,❌,❌,,,❌,❌,❌ +bot_2,,,,❌,,,❌,❌,,,❌,,❌,❌,❌,❌,❌,,,❌,❌,❌ +bot_3,,,,❌,,,❌,❌,,,❌,,❌,❌,❌,❌,❌,,,❌,❌,❌ +bot_4,,,,❌,,,❌,❌,,,❌,,❌,❌,❌,❌,❌,,,❌,❌,❌ +bot_5,,,,❌,,,❌,❌,,,❌,,❌,❌,❌,❌,❌,,,❌,❌,❌ +alive_1,,,,,,,❌,,,,,,,,,,,,,,, +log,,,,,,,❌,,,,,,,,❌,,,,,,, +ping,,,,,,,❌,,,,,,,,❌,,,,,,, +usage,,,,,,,❌,,,,,,,,❌,,,,,,, +usage_simple,,,,❌,,,❌,❌,,,❌,,❌,❌,❌,❌,❌,,,❌,❌,❌ +shutdown,,,,,,,❌,,,,,,,,❌,,,,,,, +blk_1,,,,❌,,,❌,❌,,,❌,,❌,❌,❌,❌,❌,,,❌,❌,❌ +blk_2,,,,❌,,,❌,❌,,,❌,,❌,❌,❌,❌,❌,,,❌,❌,❌ +blk_3,,,,❌,,,❌,❌,,,❌,,❌,❌,❌,❌,❌,,,❌,❌,❌ +blk_4,,,,❌,,,❌,❌,,,❌,,❌,❌,❌,❌,❌,,,❌,❌,❌ +blk_5,,,,❌,,,❌,❌,,,❌,,❌,❌,❌,❌,❌,,,❌,❌,❌ +blk_6,,,,❌,,,❌,❌,,,❌,,❌,❌,❌,❌,❌,,,❌,❌,❌ +bd_1,,,,,,,❌,,,,,,,,,,,,,,, +bd_2,,,,,,,❌,,,,,,,,,,,,,,, +bd_3,,,,,,,❌,,,,,,,,,,,,,,, +bd_4,,,,,,,❌,,,,,,,,,,,,,,, +bd_5,,,,,,,❌,,,,,,,,,,,,,,, +bd_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_1,,,,,,,❌,,,,,,,,,,,,,,, +carbon_2,,,,,,,❌,,,,,,,,,,,,,,, +carbon_3,,,,❌,,,❌,❌,,,❌,,❌,❌,❌,❌,❌,,,❌,❌,❌ +chab_1,,,,❌,,,❌,❌,,,❌,,❌,❌,❌,❌,❌,,,❌,❌,❌ +chab_2,,,,❌,,,❌,❌,,,❌,,❌,❌,❌,❌,❌,,,❌,❌,❌ +chab_3,,,,❌,,,❌,❌,,,❌,,❌,❌,❌,❌,❌,,,❌,❌,❌ +chats_1,,,,,,,❌,,,,,,,,,,,,,,, +chats_2,,,,,,,❌,,,,,,,,,,,,,,, +chats_3,,,,,,,❌,,,,,,,,,,,,,,, +chats_4,,,,,,,❌,,,,,,,,,,,,,,, +chats_5,,,,,,,❌,,,,,,,,,,,,,,, +chats_6,,,,,,,❌,,,,❌,,,,,,,,,,, +clan_1,,,,❌,,,❌,❌,,,❌,,❌,❌,❌,❌,❌,,,❌,❌,❌ +clan_2,,,,❌,,,❌,❌,,,❌,,❌,❌,❌,❌,❌,,,❌,❌,❌ +clan_3,,,,❌,,,❌,❌,,,❌,,❌,❌,❌,❌,❌,,,❌,❌,❌ +clan_4,,,,❌,,,❌,❌,,,❌,,❌,❌,❌,❌,❌,,,❌,❌,❌ +clan_5,,❌,❌,❌,,❌,❌,❌,,,❌,,❌,❌,❌,❌,❌,,,❌,❌,❌ +cvt_1,,,,,,,❌,,,,,,,,,,,,,,, +cvt_2,,,,,,,❌,,,,,,,,,,,,,,, +cvt_3,,,,,,,❌,,,,,,,,,,,,,,, +cvt_4,,,,,,,❌,,,,,,,,,,,,,,, +cvt_5,,,,❌,,,❌,❌,,,❌,,❌,❌,❌,❌,❌,,,❌,❌,❌ +cvt_6,,,,❌,,,❌,❌,,,❌,,❌,❌,❌,❌,❌,,,❌,❌,❌ +cvt_7,,,,❌,,,❌,❌,,,❌,,❌,❌,❌,❌,❌,,,❌,❌,❌ +cvt_8,,,,❌,,,❌,❌,,,❌,,❌,❌,❌,❌,❌,,,❌,❌,❌ +eod_1,,,,❌,,,❌,❌,,,❌,,❌,❌,❌,❌,❌,,,❌,❌,❌ +eod_2,,,,❌,,,❌,❌,,,❌,,❌,❌,❌,❌,❌,,,❌,❌,❌ +core_1,,,,,,,❌,,,,,,,,,,,,,,, +core_2,,,,,,,❌,,,,,,,,,,,,,,, +core_3,,,,,,,❌,,,,,,,,,,,,,,, +core_4,,,,,,,❌,,,,,,,,,,,,,,, +core_5,,,,,,,❌,,,,,,,,,,,,,,, +core_6,,,,,,,❌,,,,,,,,,,,,,,, +core_7,,,,,,,❌,,,,,,,,,,,,,,, +core_8,,,,,,,❌,,,,,,,,,,,,,,, +core_9,,,,,,,❌,,,,,,,,,,,,,,, +core_10,,,,,,,❌,,,,,,,,,,,,,,, +core_11,,,,,,,❌,,,,,,,,,,,,,,, +core_12,,,,,,,❌,,,,,,,,,,,,,,, +core_13,,,,,,,❌,,,,,,,,,,,,,,, +core_14,,,,,,,❌,,,,,,,,,,,,,,, +core_15,,,,,,,❌,,,,,,,,,,,,,,, +core_16,,,,,,,❌,,,,,,,,,,,,,,, +core_17,,,,,,,❌,,,,,,,,,,,,,,, +core_18,,,,,,,❌,,,,,,,,,,,,,,, +devs_1,,,,❌,,,❌,❌,,,❌,,❌,❌,❌,❌,❌,,,❌,❌,❌ +devs_2,,,,❌,,,❌,❌,,,❌,,❌,❌,❌,❌,❌,,,❌,❌,❌ +devs_3,,,,❌,,,❌,❌,,,❌,,❌,❌,❌,❌,❌,,,❌,❌,❌ +dm_1,,,,❌,,,❌,❌,,,❌,,❌,❌,❌,❌,❌,,,❌,❌,❌ +dm_2,,,,❌,,,❌,❌,,,❌,,❌,❌,❌,❌,❌,,,❌,❌,❌ +dm_3,,,,❌,,,❌,❌,,,❌,,❌,❌,❌,❌,❌,,,❌,❌,❌ +dm_4,,,,❌,,,❌,❌,,,❌,,❌,❌,❌,❌,❌,,,❌,❌,❌ +dm_5,,,,❌,,,❌,❌,,,❌,,❌,❌,❌,❌,❌,,,❌,❌,❌ +dm_6,,,,❌,,,❌,❌,,,❌,,❌,❌,❌,❌,❌,,,❌,❌,❌ +echo_1,,,,❌,,,❌,❌,,,❌,,❌,❌,❌,❌,❌,,,❌,❌,❌ +fka_1,,,,❌,,,❌,❌,,,❌,,❌,❌,❌,❌,❌,,,❌,❌,❌ +sf_1,,,,,,,❌,,,,,,,,,,,,,,, +sf_2,,,,,,,❌,,,,,,,,,,,,,,, +sf_3,,,,,,,❌,,,,,,,,,,,,,,, +sf_4,,,,,,,❌,,,,,,,,,,,,,,, +sf_5,,,,,,,❌,,,,,,,,,,,,,,, +sf_6,,,,,,,❌,,,,,,,,,,,,,,, +sf_7,,,,,,,❌,,,,,,,,,,,,,,, +sf_8,,,,,,,❌,,,,,,,,,,,,,,, +sf_9,,,,,,,❌,,,,,,,,,,,,,,, +sf_10,,,,,,,❌,,,,,,,,,,,,,,, +sf_11,,,,,,,❌,,,,,,,,,,,,,,, +sf_12,,,,,,,❌,,,,,,,,,,,,,,, +sf_13,,,,,,,❌,,,,,,,,,,,,,,, +sf_14,,,,,,,❌,,,,,,,,,,,,,,, +sf_15,,,,,,,❌,,,,,,,,,,,,,,, +sf_16,,,,,,,❌,,,,,,,,,,,,,,, +sf_17,,,,,,,❌,,,,,,,,,,,,,,, +sf_18,,,,,,,❌,,,,,,,,,,,,,,, +sf_19,,,,,,,❌,,,,,,,,,,,,,,, +sf_20,,,,,,,❌,,,,,,,,,,,,,,, +sf_21,,,,,,,❌,,,,,,,,,,,,,,, +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,,,,❌,,,❌,❌,,,❌,,❌,❌,❌,❌,❌,,,❌,❌,❌ +gdrive_1,,,,,,,❌,,,,,,,,,,,,,,, +gdrive_2,,,,,,,❌,,,,,,,,,,,,,,, +gdrive_3,,,,,,,❌,,,,,,,,,,,,,,, +gdrive_4,,,,,,,❌,,,,,,,,,,,,,,, +gdrive_5,,,,,,,❌,,,,,,,,,,,,,,, +gdrive_6,,,,,,,❌,,,,,,,,,,,,,,, +gdrive_7,,,,,,,❌,,,,,,,,,,,,,,, +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,,,,❌,,,❌,❌,,,❌,,❌,❌,❌,❌,❌,,,❌,❌,❌ +pmperm_1,,,,,,,❌,,,,,,,,,,,,,,, +pmperm_2,,,,,,,❌,,,,,,,,,,,,,,, +pmperm_3,,,,,,,❌,,,,,,,,,,,,,,, +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_1,,,,,,,❌,,,,,,,,,,,,,,, +upd_2,,,,,,,❌,,,,,,,,,,,,,,, +upd_3,,,,,,,❌,,,,,,,,,,,,,,, +upd_4,,,,,,,❌,,,,,,,,,,,,,,, +upd_5,,,,❌,❌,,❌,❌,,,❌,,❌,❌,❌,❌,❌,,,❌,❌,❌ +upd_6,,,,,,,❌,,,,,,,,,,,,,,, +upd_7,,,,❌,,,❌,❌,,,❌,,❌,❌,❌,❌,❌,,,❌,❌,❌ +udl_1,,,,,,,❌,,,,,,,,,,,,,,, +udl_2,,,,,,,❌,,,,,,,,,,,,,,, +udl_3,,,,,,,❌,,,,,,,,,,,,,,, +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,,❌,❌,❌,,❌,❌,❌,,,❌,,❌,❌,❌,❌,❌,,,❌,❌,❌ +ast_1,,,,,,,❌,,,,,,,,,,,,,,, +ast_2,,,,,,,❌,,,,,,,,,,,,,,, +ast_3,,,,,,,❌,,,,,,,,,,,,,,, +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,,❌,❌,❌,,,❌,❌,,,❌,,❌,❌,❌,❌,❌,,,❌,❌,❌ +rss_1,,❌,❌,❌,❌,❌,❌,❌,❌,❌,❌,❌,❌,❌,❌,❌,❌,❌,❌,❌,❌,❌ +rss_2,,❌,❌,❌,❌,❌,❌,❌,❌,❌,❌,❌,❌,❌,❌,❌,❌,❌,❌,❌,❌,❌ +rss_3,,❌,❌,❌,❌,❌,❌,❌,❌,❌,❌,❌,❌,❌,❌,❌,❌,❌,❌,❌,❌,❌ +rss_4,,❌,❌,❌,❌,❌,❌,❌,❌,❌,❌,❌,❌,❌,❌,❌,❌,❌,❌,❌,❌,❌ +rss_5,,❌,❌,❌,❌,❌,❌,❌,❌,❌,❌,❌,❌,❌,❌,❌,❌,❌,❌,❌,❌,❌ +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,,,,❌,,,❌,❌,,,❌,,❌,❌,,❌,❌,,,❌,❌,❌ \ No newline at end of file diff --git a/strings/strings.py b/strings/strings.py index 62008b3..9174ed3 100644 --- a/strings/strings.py +++ b/strings/strings.py @@ -13,32 +13,7 @@ except ImportError: try: from yaml import safe_load except ModuleNotFoundError: - - 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 + from pyUltroid.functions.tools import safe_load language = [udB.get_key("language") or "en"] languages = {} diff --git a/strings/strings/ar.yml b/strings/strings/ar.yml index 14c5fe2..31b151b 100644 --- a/strings/strings/ar.yml +++ b/strings/strings/ar.yml @@ -230,6 +230,8 @@ upd_2: "`┇أوبــس .. الــمــحــدث غــيــر قــادر upd_3: "**┇يــتــوفــر تــحــديــث جــديــد لــ [[{}]]({}/tree/{}):\n\n**┇ســجــل الــتــغــيــيــرات \n\n{}" upd_4: "`┇حــجــم ســجــل الــتــغــيــيــرات كــبــيــر جــداً , اعــرض الــمــلــف لــرؤيــتــه `" upd_6: "\n`┇بــوتــك` **بــأخــر تــحــديــث** `بـــ` **[[{}]]({}/tree/{})**\n" +upd_5: "اضغط علي الزر بالاسفل للتحديث." +upd_7: "`جار التحديث السريع...`" # upload download udl_1: "`┇قــم بــالــرد عــلــى الــمــلــف / الــمــيــديــا الــمــراد تــحــمــيــلــهــا ♻️`" @@ -294,7 +296,7 @@ bot_1: "مرحبا، انا علي قيد الحياة." bot_2: "احصائيات" bot_3: "Repo" bot_4: "مجموعة المساعدة" -bot_5: "• `جار اعدة التشغيل...`" +bot_5: "• `جار إعادة التشغيل...`" usage_simple: "**مساحة الذاكرة**: `{}`\n**المستخدم**: `{}`\n**المتاح**: `{}`\n\n**📊 البيانات المستخدمة 📊**\n**رفع**: `{}`\n**تنزيل**: `{}`\n\n**CPU**: `{}%`\n**RAM**: `{}%`\n**الذاكرة**: `{}%`" blk_1: "`قم بإعطاء كلمة لحظرها..`" blk_2: "تم حظر كلمة : `{}` هنا." @@ -499,6 +501,13 @@ pmbot_5: "من فضلك قم بالرد علي احدهم لالغاء حظره. pmbot_6: "هذ المستخدم لم يتم حظره ابدا!" pmbot_7: "`مبروك! تم الغاء حظرك.`" +# rss feeds +rss_1: "`قم بإعطاء عنوان Rss لإضافته..`" +rss_2: "فشل تأكيد عنوان Rss\n__خطأ: {}__" +rss_3: "`لم يتم اضافة احداث Rss لهذه المحادثة.`" +rss_4: "`تم حذف احداث Rss من هذه المحادثة..`" +rss_5: "`تم الاضافة لهذه المحادثة بنجاح.`" + # vcbot vcbot_1: "`تم مغادرة المحادثة الصوتية.`" vcbot_2: "**حدث خطأ:**\n{}" diff --git a/strings/strings/en.yml b/strings/strings/en.yml index 38fdb47..b30a2eb 100644 --- a/strings/strings/en.yml +++ b/strings/strings/en.yml @@ -2,7 +2,6 @@ name: English natively: English authors: - - karboncopy - xditya - rojserbest - sppidy @@ -55,7 +54,7 @@ pro_2: "{} `is now an admin in {} with title {}.`" de_1: "`Reply to a user to demote him!`" de_2: "{} `is no longer an admin in {}`" ban_1: "`Reply to a user or give username to ban him!`" -ban_2: " `LoL, I can't Ban my Developer 😂`" +ban_2: " `Sorry, but I can't Ban my Developer 😂`" ban_3: "`I don't have the right to ban a user.`" ban_4: "{} **was banned by** {} **in** `{}`" ban_5: "\n**Reason**: `{}`" @@ -65,7 +64,7 @@ unban_1: "`Reply to a user or give username to unban him!`" unban_2: "`I don't have the right to unban a user.`" unban_3: "{} **was unbanned by** {} **in** `{}`" kick_1: "`I don't have the right to kick a user.`" -kick_2: " `Lol, I can't Kick my Developer`😂" +kick_2: " `Sorry, but I can't Kick my Developer`😂" kick_3: "`I Cant kick him ever...`" kick_4: "{} **was kicked by** {} **in** `{}`" pin_1: "`Reply to a message to pin it!`" @@ -535,6 +534,13 @@ pmbot_5: "Please reply to someone to Unban him." pmbot_6: "User was never banned!" pmbot_7: "`Congrats! You have been unbanned.`" +# rss feeds +rss_1: "`Provide Rss url to add..`" +rss_2: "Failed to verify rss url\n__Error: {}__" +rss_3: "`No rss feed has been added to this chat.`" +rss_4: "`Removed rss feed from this chat..`" +rss_5: "`Successfully added to this chat.`" + # -------------------------- VcBot ------------------------------- # vcbot_1: "`Left the voice chat.`" diff --git a/strings/strings/ru.yml b/strings/strings/ru.yml index 4d252cd..84104cd 100644 --- a/strings/strings/ru.yml +++ b/strings/strings/ru.yml @@ -404,7 +404,9 @@ upd_1: "`Проверка обновлений, пожалуйста подож upd_2: "`Упс.. Компонент обновления не может продолжить из-за ошибки`\n\n**LOGTRACE:**\n" upd_3: "**Новое обновление доступно для [[{}]]({}/tree/{}):\n\nИзменения**\n\n{}" upd_4: "`Список изменений слишком большой, откройте файл для просмотра изменений`" +upd_5: "Нажмите на кнопку ниже для обновления" upd_6: "\n`Ваш бот` **актуален** `с` **[[{}]]({}/tree/{})**\n" +upd_7: "`Быстрое обновление...`" #upload download udl_1: "`Ответьте на сообщение с медиафайлом/документом которые вы хотите загрузить..`"