├── heroku.yml ├── strings ├── __init__.py ├── README.md └── strings.py ├── resources ├── fonts │ ├── 0.ttf │ ├── 1.ttf │ ├── 2.ttf │ ├── 3.ttf │ ├── 4.ttf │ ├── 5.ttf │ ├── 6.ttf │ ├── 7.ttf │ ├── 8.ttf │ ├── 9.ttf │ ├── 10.ttf │ ├── 11.otf │ ├── 12.otf │ ├── Quivira.otf │ ├── assfont.ttf │ ├── default.ttf │ ├── DroidSansMono.ttf │ ├── Roboto-Italic.ttf │ ├── Roboto-Medium.ttf │ └── Roboto-Regular.ttf ├── extras │ ├── inline.jpg │ ├── template.jpg │ ├── ultroid.jpg │ ├── logo_readme.jpg │ ├── teamultroid.jpg │ ├── ultroid_blank.png │ ├── ultroid_assistant.jpg │ └── redistut.md ├── startup │ ├── termux.sh │ ├── optional-requirements.txt │ └── locals.py ├── session │ ├── session.sh │ └── ssgen.py └── colorlist.txt ├── requirements.txt ├── okteto-pipeline.yml ├── .env.sample ├── .github ├── PULL_REQUEST_TEMPLATE │ └── pull_request_template.md ├── ISSUE_TEMPLATE │ ├── config.yml │ └── bug-reports.yml ├── stalebot.yml └── workflows │ └── codeql-analysis.yml ├── sessiongen ├── assistant ├── manager │ ├── __init__.py │ ├── _on_adds.py │ ├── admins.py │ ├── misc.py │ ├── _help.py │ └── afk.py ├── __init__.py ├── localization.py └── initial.py ├── docker-compose.yml ├── install-termux ├── .gitignore ├── Dockerfile ├── startup ├── vcbot ├── _help.py ├── queue.py ├── ytplaylist.py ├── videoplay.py ├── vctools.py └── controls.py ├── plugins ├── profanityfilter.py ├── unsplash.py ├── locks.py ├── glitch.py ├── cleanaction.py ├── autocorrect.py ├── fakeaction.py ├── resize.py ├── schedulemsg.py ├── _ultroid.py ├── fontgen.py ├── button.py ├── tag.py ├── polls.py ├── blacklist.py ├── other.py ├── webupload.py ├── __init__.py ├── extra.py ├── writer.py ├── youtube.py ├── variables.py ├── logo.py ├── echo.py ├── vctools.py ├── database.py ├── chatbot.py ├── autopic.py ├── qrcode.py ├── asstcmd.py ├── filter.py ├── notes.py ├── fileshare.py ├── mediatools.py ├── sudo.py ├── snips.py ├── profile.py ├── calculator.py ├── antiflood.py ├── giftools.py ├── beautify.py ├── core.py ├── words.py ├── misc.py ├── videotools.py └── nightmode.py ├── installer.sh ├── CONTRIBUTING.md └── app.json /heroku.yml: -------------------------------------------------------------------------------- 1 | build: 2 | docker: 3 | ultroid: Dockerfile 4 | -------------------------------------------------------------------------------- /strings/__init__.py: -------------------------------------------------------------------------------- 1 | from .strings import get_languages, get_string, language 2 | -------------------------------------------------------------------------------- /resources/fonts/0.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/maxprogrammer007/Ultroid/main/resources/fonts/0.ttf -------------------------------------------------------------------------------- /resources/fonts/1.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/maxprogrammer007/Ultroid/main/resources/fonts/1.ttf -------------------------------------------------------------------------------- /resources/fonts/2.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/maxprogrammer007/Ultroid/main/resources/fonts/2.ttf -------------------------------------------------------------------------------- /resources/fonts/3.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/maxprogrammer007/Ultroid/main/resources/fonts/3.ttf -------------------------------------------------------------------------------- /resources/fonts/4.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/maxprogrammer007/Ultroid/main/resources/fonts/4.ttf -------------------------------------------------------------------------------- /resources/fonts/5.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/maxprogrammer007/Ultroid/main/resources/fonts/5.ttf -------------------------------------------------------------------------------- /resources/fonts/6.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/maxprogrammer007/Ultroid/main/resources/fonts/6.ttf -------------------------------------------------------------------------------- /resources/fonts/7.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/maxprogrammer007/Ultroid/main/resources/fonts/7.ttf -------------------------------------------------------------------------------- /resources/fonts/8.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/maxprogrammer007/Ultroid/main/resources/fonts/8.ttf -------------------------------------------------------------------------------- /resources/fonts/9.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/maxprogrammer007/Ultroid/main/resources/fonts/9.ttf -------------------------------------------------------------------------------- /resources/fonts/10.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/maxprogrammer007/Ultroid/main/resources/fonts/10.ttf -------------------------------------------------------------------------------- /resources/fonts/11.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/maxprogrammer007/Ultroid/main/resources/fonts/11.otf -------------------------------------------------------------------------------- /resources/fonts/12.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/maxprogrammer007/Ultroid/main/resources/fonts/12.otf -------------------------------------------------------------------------------- /resources/extras/inline.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/maxprogrammer007/Ultroid/main/resources/extras/inline.jpg -------------------------------------------------------------------------------- /resources/extras/template.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/maxprogrammer007/Ultroid/main/resources/extras/template.jpg -------------------------------------------------------------------------------- /resources/extras/ultroid.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/maxprogrammer007/Ultroid/main/resources/extras/ultroid.jpg -------------------------------------------------------------------------------- /resources/fonts/Quivira.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/maxprogrammer007/Ultroid/main/resources/fonts/Quivira.otf -------------------------------------------------------------------------------- /resources/fonts/assfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/maxprogrammer007/Ultroid/main/resources/fonts/assfont.ttf -------------------------------------------------------------------------------- /resources/fonts/default.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/maxprogrammer007/Ultroid/main/resources/fonts/default.ttf -------------------------------------------------------------------------------- /resources/extras/logo_readme.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/maxprogrammer007/Ultroid/main/resources/extras/logo_readme.jpg -------------------------------------------------------------------------------- /resources/extras/teamultroid.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/maxprogrammer007/Ultroid/main/resources/extras/teamultroid.jpg -------------------------------------------------------------------------------- /resources/extras/ultroid_blank.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/maxprogrammer007/Ultroid/main/resources/extras/ultroid_blank.png -------------------------------------------------------------------------------- /resources/fonts/DroidSansMono.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/maxprogrammer007/Ultroid/main/resources/fonts/DroidSansMono.ttf -------------------------------------------------------------------------------- /resources/fonts/Roboto-Italic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/maxprogrammer007/Ultroid/main/resources/fonts/Roboto-Italic.ttf -------------------------------------------------------------------------------- /resources/fonts/Roboto-Medium.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/maxprogrammer007/Ultroid/main/resources/fonts/Roboto-Medium.ttf -------------------------------------------------------------------------------- /resources/fonts/Roboto-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/maxprogrammer007/Ultroid/main/resources/fonts/Roboto-Regular.ttf -------------------------------------------------------------------------------- /resources/extras/ultroid_assistant.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/maxprogrammer007/Ultroid/main/resources/extras/ultroid_assistant.jpg -------------------------------------------------------------------------------- /requirements.txt: -------------------------------------------------------------------------------- 1 | # Important Requirements here. 2 | 3 | https://github.com/New-dev0/Telethon/archive/Cartoon.zip 4 | py-Ultroid==2022.6.6 5 | pytgcalls==3.0.0.dev21 6 | -------------------------------------------------------------------------------- /okteto-pipeline.yml: -------------------------------------------------------------------------------- 1 | icon: https://raw.githubusercontent.com/TeamUltroid/Ultroid/main/resources/extras/logo_readme.jpg 2 | deploy: 3 | - okteto deploy --build -f docker-compose.yml 4 | -------------------------------------------------------------------------------- /.env.sample: -------------------------------------------------------------------------------- 1 | # Don't use quotes( " and ' ) 2 | 3 | API_ID= 4 | API_HASH= 5 | SESSION= 6 | REDIS_URI= 7 | REDIS_PASSWORD= 8 | 9 | # [OPTIONAL] 10 | 11 | LOG_CHANNEL= 12 | BOT_TOKEN= 13 | -------------------------------------------------------------------------------- /.github/PULL_REQUEST_TEMPLATE/pull_request_template.md: -------------------------------------------------------------------------------- 1 | # Title 2 | 3 | ### Detailed Description [Optional] : 4 | detailed_description_here 5 | 6 | ### Issue Number [Optional] : 7 | Issue Number here if your pull request close any issue or is linked to. 8 | 9 | ---- -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/config.yml: -------------------------------------------------------------------------------- 1 | blank_issues_enabled: true 2 | contact_links: 3 | - name: Ultroid Support 4 | url: https://t.me/UltroidSupport 5 | about: Please drop your doubts or queries there for an immediate response. 6 | - name: Documentation 7 | url: https://ultroid.tech/ 8 | about: Basic documentation for setting up. -------------------------------------------------------------------------------- /sessiongen: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | # Ultroid - UserBot 3 | # Copyright (C) 2021-2022 TeamUltroid 4 | # 5 | # This file is a part of < https://github.com/TeamUltroid/Ultroid/ > 6 | # PLease read the GNU Affero General Public License in . 7 | 8 | bash resources/session/session.sh 9 | -------------------------------------------------------------------------------- /assistant/manager/__init__.py: -------------------------------------------------------------------------------- 1 | # Ultroid - UserBot 2 | # Copyright (C) 2021-2022 TeamUltroid 3 | # 4 | # This file is a part of < https://github.com/TeamUltroid/Ultroid/ > 5 | # PLease read the GNU Affero General Public License in 6 | # . 7 | 8 | from pyUltroid._misc._decorators import ultroid_cmd 9 | from pyUltroid.functions.helper import inline_mention 10 | 11 | from .. import * 12 | -------------------------------------------------------------------------------- /resources/startup/termux.sh: -------------------------------------------------------------------------------- 1 | printf "Updating System..\n\n" 2 | pkg update -y 3 | apt update 4 | apt upgrade -y 5 | 6 | python_not_installed="$(python -c 'exit()')" 7 | 8 | # Install Python if n0t installed.. 9 | if [ python_not_installed ] 10 | then 11 | printf "Installing Python..\nThis may take some long...\n" 12 | pkg install python3 -y 13 | fi 14 | 15 | printf "*Putting some magical effect...*" 16 | pip install -q colorama 17 | 18 | printf "Running up Installation tool.\n" 19 | python resources/startup/_termux.py 20 | -------------------------------------------------------------------------------- /docker-compose.yml: -------------------------------------------------------------------------------- 1 | version: "3.9" 2 | services: 3 | worker: 4 | build: . 5 | environment: 6 | REDIS_URI: $REDIS_URI 7 | REDIS_PASSWORD: $REDIS_PASSWORD 8 | SESSION: $SESSION 9 | API_ID: $API_ID # defaults to None 10 | API_HASH: $API_HASH # defaults to None 11 | MONGO_URI: $MONGO_URI # defaults to None 12 | BOT_TOKEN: $BOT_TOKEN # Not mandatory 13 | LOG_CHANNEL: $LOG_CHANNEL # Not mandatory 14 | DATABASE_URL: $DATABASE_URL # defaults to None 15 | OKTETO_TOKEN: $OKTETO_TOKEN 16 | -------------------------------------------------------------------------------- /install-termux: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | # Ultroid - UserBot 3 | # Copyright (C) 2021-2022 TeamUltroid 4 | # 5 | # This file is a part of < https://github.com/TeamUltroid/Ultroid/ > 6 | # PLease read the GNU Affero General Public License in . 7 | 8 | if [ -d "resources" ] 9 | then 10 | echo "Current directory Identified.." 11 | else 12 | apt install git -y 13 | git clone https://github.com/TeamUltroid/Ultroid 14 | cd Ultroid 15 | fi 16 | bash resources/startup/termux.sh 17 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .env 2 | *.session-journal 3 | *.session 4 | build 5 | test* 6 | *.mp3 7 | *.webm 8 | *.webp 9 | *.mp4 10 | *.tgs 11 | /*.jpg 12 | /*.png 13 | /*.mp4 14 | *.log 15 | target/npmlist.json 16 | package-lock.json 17 | 18 | # Directories 19 | addons/ 20 | pyUltroid/ 21 | __pycache__/ 22 | venv/ 23 | node_modules/ 24 | glitch_me/ 25 | src/glitch-me 26 | .idea/ 27 | .vscode/ 28 | temp/ 29 | bin-debug/ 30 | bin-release/ 31 | [Oo]bj/ 32 | [Bb]in/ 33 | .settings/ 34 | *.swf 35 | *.air 36 | *.ipa 37 | *.apk 38 | 39 | # temporary files 40 | *.raw 41 | tplugins 42 | tassistant 43 | -------------------------------------------------------------------------------- /Dockerfile: -------------------------------------------------------------------------------- 1 | # Ultroid - UserBot 2 | # Copyright (C) 2021-2022 TeamUltroid 3 | # This file is a part of < https://github.com/TeamUltroid/Ultroid/ > 4 | # PLease read the GNU Affero General Public License in . 5 | 6 | FROM theteamultroid/ultroid:main 7 | 8 | # set timezone 9 | ENV TZ=Asia/Kolkata 10 | RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone 11 | 12 | COPY installer.sh . 13 | 14 | RUN bash installer.sh 15 | 16 | # changing workdir 17 | WORKDIR "/root/TeamUltroid" 18 | 19 | # start the bot. 20 | CMD ["bash", "startup"] 21 | -------------------------------------------------------------------------------- /.github/stalebot.yml: -------------------------------------------------------------------------------- 1 | # Number of days of inactivity before an issue becomes stale 2 | daysUntilStale: 50 3 | # Number of days of inactivity before a stale issue is closed 4 | daysUntilClose: 7 5 | # Label to use when marking an issue as stale 6 | staleLabel: inactive 7 | # Comment to post when marking an issue as stale. Set to `false` to disable 8 | markComment: > 9 | This issue has been automatically marked as stale because it has not had 10 | any recent activity. It will be closed if no further activity occurs. Thank you 11 | for your contributions. 12 | # Comment to post when closing a stale issue. Set to `false` to disable 13 | closeComment: false 14 | -------------------------------------------------------------------------------- /assistant/manager/_on_adds.py: -------------------------------------------------------------------------------- 1 | # Ultroid - UserBot 2 | # Copyright (C) 2021-2022 TeamUltroid 3 | # 4 | # This file is a part of < https://github.com/TeamUltroid/Ultroid/ > 5 | # PLease read the GNU Affero General Public License in 6 | # . 7 | 8 | from telethon import events 9 | 10 | from . import * 11 | 12 | 13 | @asst.on(events.ChatAction(func=lambda x: x.user_added)) 14 | async def dueha(e): 15 | user = await e.get_user() 16 | if not user.is_self: 17 | return 18 | sm = udB.get_key("ON_MNGR_ADD") 19 | if sm == "OFF": 20 | return 21 | if not sm: 22 | sm = "Thanks for Adding me :)" 23 | await e.reply(sm, link_preview=False) 24 | -------------------------------------------------------------------------------- /startup: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | # Ultroid - UserBot 3 | # Copyright (C) 2021-2022 TeamUltroid 4 | # 5 | # This file is a part of < https://github.com/TeamUltroid/Ultroid/ > 6 | # PLease read the GNU Affero General Public License in . 7 | 8 | 9 | echo " 10 | ┏┳┓╋┏┓╋╋╋╋┏┓┏┓ 11 | ┃┃┣┓┃┗┳┳┳━╋╋┛┃ 12 | ┃┃┃┗┫┏┫┏┫╋┃┃╋┃ 13 | ┗━┻━┻━┻┛┗━┻┻━┛ 14 | 15 | Visit @TheUltroid for updates!! 16 | 17 | " 18 | if [ -f .env ] ; then set -o allexport; source .env; set +o allexport ; fi 19 | if [ $SESSION1 ] ; then wget https://gist.github.com/1Danish-00/6554f034549197e5824972b01f631e0c/raw/main.py && python3 main.py ; else python3 -m pyUltroid ; fi 20 | -------------------------------------------------------------------------------- /.github/workflows/codeql-analysis.yml: -------------------------------------------------------------------------------- 1 | name: CodeQL Analysis 2 | 3 | on: 4 | push: 5 | # ignore dependabot branches on push -> https://github.com/microsoft/binskim/issues/425#issuecomment-893373709 6 | branches-ignore: 7 | - 'dependabot/**' 8 | pull_request: 9 | schedule: 10 | - cron: '0 8 * * *' 11 | workflow_dispatch: 12 | 13 | jobs: 14 | analyze: 15 | name: Analyze 16 | runs-on: ubuntu-latest 17 | steps: 18 | - name: Checkout repository 19 | uses: actions/checkout@v2 20 | 21 | - name: Initialize CodeQL 22 | uses: github/codeql-action/init@v1 23 | with: 24 | languages: python 25 | 26 | - name: Perform CodeQL Analysis 27 | uses: github/codeql-action/analyze@v1 -------------------------------------------------------------------------------- /vcbot/_help.py: -------------------------------------------------------------------------------- 1 | # Ultroid - UserBot 2 | # Copyright (C) 2021-2022 TeamUltroid 3 | # 4 | # This file is a part of < https://github.com/TeamUltroid/Ultroid/ > 5 | # PLease read the GNU Affero General Public License in 6 | # . 7 | 8 | from telethon import Button 9 | 10 | from . import vc_asst, asst, in_pattern 11 | 12 | 13 | @vc_asst("vchelp") 14 | async def helper(event): 15 | res = await event.client.inline_query(asst.me.username, "vchelp") 16 | try: 17 | await res[0].click(event.chat_id) 18 | except Exception as e: 19 | await event.eor(e) 20 | 21 | 22 | @in_pattern("vchelp") 23 | async def wiqhshd(e): 24 | builder = e.builder 25 | res = [ 26 | await builder.article( 27 | title="Vc Help", 28 | text="**VCBot Help Menu**\n\n", 29 | buttons=Button.inline("Voice Chat Help", data="uh_VCBot_"), 30 | ) 31 | ] 32 | await e.answer(res) 33 | -------------------------------------------------------------------------------- /plugins/profanityfilter.py: -------------------------------------------------------------------------------- 1 | # Ultroid - UserBot 2 | # Copyright (C) 2021-2022 TeamUltroid 3 | # 4 | # This file is a part of < https://github.com/TeamUltroid/Ultroid/ > 5 | # PLease read the GNU Affero General Public License in 6 | # . 7 | """ 8 | ✘ Commands Available - 9 | 10 | •`{i}addprofanity` 11 | If someone sends bad word in a chat, Then bot will delete that message. 12 | 13 | •`{i}remprofanity` 14 | From chat from Profanity list. 15 | 16 | """ 17 | 18 | from pyUltroid.dB.nsfw_db import profan_chat, rem_profan 19 | 20 | from . import get_string, ultroid_cmd 21 | 22 | 23 | @ultroid_cmd(pattern="addprofanity$", admins_only=True) 24 | async def addp(e): 25 | profan_chat(e.chat_id, "mute") 26 | await e.eor(get_string("prof_1"), time=10) 27 | 28 | 29 | @ultroid_cmd(pattern="remprofanity", admins_only=True) 30 | async def remp(e): 31 | rem_profan(e.chat_id) 32 | await e.eor(get_string("prof_2"), time=10) 33 | -------------------------------------------------------------------------------- /resources/extras/redistut.md: -------------------------------------------------------------------------------- 1 | # Tutorial To Get Redis DB URL and Password 2 | ![Redis](https://img.shields.io/badge/redis-%23DD0031.svg?style=for-the-badge&logo=redis&logoColor=white) 3 | 4 | ## Process For Creating DB :- 5 | - Go To [Redis.com](Https://redis.com) and click "`Try Free`" in Top Right Corner. 6 | - Fill All The Required Details Like email, first and last name, password, etc. 7 | - Tick Below "I agree the corresponding...Privacy Policy." and Click "Get Started". 8 | - Now Check Your Email, and click the "Activate Now" sent by redislabs via email. 9 | - Now Login and Chose Free Plan in "Fixed Size" Area and Write any name in "Subscription Area". 10 | - On the Next Page Write Database Name and click Activate. 11 | 12 | > Congrats! Your DB has been created 🥳 13 | 14 | ## Process For Getting DB Credentials:- 15 | - Wait 5 mins after DB creation. 16 | - Then There Would Be 2 Things Named "`Endpoint`" and "`Access Control & Security`". 17 | - Copy Both Of Them and Paste Endpoint url in `REDIS_URI` and "Access ...Security" in `REDIS_PASSWORD`. 18 | -------------------------------------------------------------------------------- /assistant/__init__.py: -------------------------------------------------------------------------------- 1 | # Ultroid - UserBot 2 | # Copyright (C) 2021-2022 TeamUltroid 3 | # 4 | # This file is a part of < https://github.com/TeamUltroid/Ultroid/ > 5 | # PLease read the GNU Affero General Public License in 6 | # . 7 | 8 | from pyUltroid import * 9 | from pyUltroid import _ult_cache 10 | from pyUltroid._misc import owner_and_sudos 11 | from pyUltroid._misc._assistant import asst_cmd, callback, in_pattern 12 | from pyUltroid.functions.helper import * 13 | from pyUltroid.functions.tools import get_stored_file 14 | from telethon import Button, custom 15 | 16 | from plugins import ATRA_COL 17 | from strings import get_languages, get_string, language 18 | 19 | OWNER_NAME = ultroid_bot.full_name 20 | OWNER_ID = ultroid_bot.uid 21 | 22 | AST_PLUGINS = {} 23 | 24 | 25 | async def setit(event, name, value): 26 | try: 27 | udB.set_key(name, value) 28 | except BaseException: 29 | return await event.edit("`Something Went Wrong`") 30 | 31 | 32 | def get_back_button(name): 33 | return [Button.inline("« Bᴀᴄᴋ", data=f"{name}")] 34 | -------------------------------------------------------------------------------- /resources/startup/optional-requirements.txt: -------------------------------------------------------------------------------- 1 | # Required only while Local Deploy 2 | # ------------------------------------------------------ # 3 | 4 | akinator.py 5 | apscheduler 6 | aiohttp 7 | aiofiles 8 | bs4 9 | cairosvg 10 | cfscrape 11 | enhancer>=0.3.4 12 | gingerit 13 | git+https://github.com/1danish-00/google_trans_new.git 14 | git+https://github.com/New-dev0/instagrapi.git 15 | git+https://github.com/buddhhu/img2html.git 16 | git+https://github.com/programmingerror/heroku3.py.git 17 | gitpython 18 | google-api-python-client 19 | feedparser 20 | html-telegraph-poster 21 | htmlwebshot 22 | lottie 23 | multiprocess 24 | numpy>=1.21.2 25 | oauth2client 26 | opencv-python-headless 27 | pillow>=7.0.0 28 | profanitydetector 29 | psutil 30 | psycopg2-binary 31 | pygments 32 | pymongo[srv] 33 | pypdf2>=1.26.0 34 | pytz 35 | pyyaml>=5.4.1 36 | qrcode 37 | requests 38 | scikit-image 39 | tabulate 40 | telegraph 41 | tgcrypto 42 | youtube-search-python 43 | yt-dlp 44 | pygments 45 | python-Levenshtein 46 | fuzzywuzzy 47 | # -------------------------------------------------------# 48 | -------------------------------------------------------------------------------- /resources/session/session.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | # Ultroid - UserBot 3 | # Copyright (C) 2021-2022 TeamUltroid 4 | # 5 | # This file is a part of < https://github.com/TeamUltroid/Ultroid/ > 6 | # PLease read the GNU Affero General Public License in . 7 | 8 | clear 9 | echo -e "\e[1m" 10 | echo " _ _ _ _ _ _ " 11 | echo " | | | | | | (_) | |" 12 | echo " | | | | | |_ _ __ ___ _ __| |" 13 | echo " | | | | | __| '__/ _ \| |/ _ |" 14 | echo " | |__| | | |_| | | (_) | | (_| |" 15 | echo " \____/|_|\__|_| \___/|_|\__,_|" 16 | echo -e "\e[0m" 17 | sec=5 18 | spinner=(⣻ ⢿ ⡿ ⣟ ⣯ ⣷) 19 | while [ $sec -gt 0 ]; do 20 | echo -ne "\e[33m ${spinner[sec]} Starting dependency installation in $sec seconds...\r" 21 | sleep 1 22 | sec=$(($sec - 1)) 23 | done 24 | echo -e "\e[1;32mInstalling Dependencies ---------------------------\e[0m\n" # Don't Remove Dashes / Fix it 25 | apt-get update 26 | apt-get upgrade -y 27 | pkg upgrade -y 28 | pkg install python wget -y 29 | wget https://raw.githubusercontent.com/TeamUltroid/ultroid/main/resources/session/ssgen.py 30 | pip uninstall telethon -y && install telethon 31 | clear 32 | python3 ssgen.py 33 | -------------------------------------------------------------------------------- /strings/README.md: -------------------------------------------------------------------------------- 1 | # Strings Analytics 2 | 3 | 4 | | Code | Language | Translated | Remaining | 5 | |----|-------|-------|---| 6 | | en | English [English] | 418 | 0 | 7 | | ar | Arabic [العربية] | 418 | NULL | 8 | | si | sinhala [සිංහල] | 112 | 306 | 9 | | hi | Hindi [हिंदी] | 413 | 5 | 10 | | fr | French [Français] | 110 | 308 | 11 | | jp | Japanese [日本] | 413 | 5 | 12 | | fa | Persian [Farsi] | 391 | 27 | 13 | | id | Indonesia [Indonesia] | 413 | 5 | 14 | | pt-br | Portuguese [Português] | 413 | 5 | 15 | | gu | Gujarati [ગુજરાતી] | 109 | 309 | 16 | | ml | Malayalam [മലയാളം] | 112 | 306 | 17 | | ru | Russian [Русский] | 413 | 5 | 18 | | ta | தமிழ் [தமிழ்] | 112 | 306 | 19 | | my | Malay [Bahasa Melayu] | 112 | 306 | 20 | | es | Spanish [Español] | 409 | 9 | 21 | | od | Odia [ଓଡିଆ] | 112 | 306 | 22 | | tr | Turkish [Türk] | 112 | 306 | 23 | | mr | Marathi [मराठी] | 131 | 287 | 24 | | cn | Chinese [简体中文] | 112 | 306 | 25 | | ka | Kannada [ಕನ್ನಡ] | 112 | 306 | 26 | | bn | Bengali [বাংলা] | 382 | 36 | 27 | | it | Italian [italiano] | 111 | 307 | 28 | | az | Azerbaijan [Azərbaycan] | 382 | 36 | 29 | 30 | 31 | If Strings are not present, Google Translation will be used to Translate them at time of Usage. 32 |
• Remaining Strings can be found [here](./remaining.csv) for easy sort out. -------------------------------------------------------------------------------- /plugins/unsplash.py: -------------------------------------------------------------------------------- 1 | # Ultroid - UserBot 2 | # Copyright (C) 2021-2022 TeamUltroid 3 | # 4 | # This file is a part of < https://github.com/TeamUltroid/Ultroid/ > 5 | # PLease read the GNU Affero General Public License in 6 | # . 7 | """ 8 | ✘ Commands Available - 9 | 10 | • {i}unsplash ; 11 | Unsplash Image Search. 12 | """ 13 | 14 | from pyUltroid.functions.misc import unsplashsearch 15 | 16 | from . import asyncio, download_file, get_string, os, ultroid_cmd 17 | 18 | 19 | @ultroid_cmd(pattern="unsplash( (.*)|$)") 20 | async def searchunsl(ult): 21 | match = ult.pattern_match.group(1).strip() 22 | if not match: 23 | return await ult.eor("Give me Something to Search") 24 | num = 5 25 | if ";" in match: 26 | num = int(match.split(";")[1]) 27 | match = match.split(";")[0] 28 | tep = await ult.eor(get_string("com_1")) 29 | res = await unsplashsearch(match, limit=num) 30 | if not res: 31 | return await ult.eor(get_string("unspl_1"), time=5) 32 | CL = [download_file(rp, f"{match}-{e}.png") for e, rp in enumerate(res)] 33 | imgs = [z for z in (await asyncio.gather(*CL)) if z] 34 | await ult.client.send_file( 35 | ult.chat_id, imgs, caption=f"Uploaded {len(imgs)} Images!" 36 | ) 37 | await tep.delete() 38 | [os.remove(img) for img in imgs] 39 | -------------------------------------------------------------------------------- /installer.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | REPO="https://github.com/TeamUltroid/Ultroid.git" 4 | DIR="/root/TeamUltroid" 5 | 6 | spinner(){ 7 | local pid=$! 8 | while [ "$(ps a | awk '{print $1}' | grep $pid)" ]; 9 | do 10 | for i in "Ooooo" "oOooo" "ooOoo" "oooOo" "ooooO" "oooOo" "ooOoo" "oOooo" "Ooooo" 11 | do 12 | echo -ne "\r• $i" 13 | sleep 0.2 14 | done 15 | done 16 | } 17 | 18 | clone_repo(){ 19 | if [ ! $BRANCH ] 20 | then export BRANCH="main" 21 | fi 22 | echo -e "\n\nCloning Ultroid ${BRANCH}... " 23 | git clone -b $BRANCH $REPO $DIR 24 | } 25 | 26 | install_requirements(){ 27 | echo -e "\n\nInstalling requirements... " 28 | pip3 install -q --no-cache-dir -r $DIR/requirements.txt && pip3 install av -q --no-binary av 29 | } 30 | 31 | railways_dep(){ 32 | if [ ! $RAILWAY_STATIC_URL ] 33 | then 34 | echo -e "\n\nInstalling YouTube dependency... " 35 | pip3 install -q --no-cache-dir yt-dlp 36 | fi 37 | } 38 | 39 | install_okteto_cli(){ 40 | if [ $OKTETO_TOKEN ] 41 | then 42 | echo -e "\n\nInstalling Okteto-CLI... " 43 | curl https://get.okteto.com -sSfL | sh 44 | fi 45 | } 46 | 47 | main(){ 48 | (clone_repo) & spinner 49 | (install_requirements) & spinner 50 | (railways_dep) & spinner 51 | (install_okteto_cli) & spinner 52 | } 53 | 54 | main 55 | -------------------------------------------------------------------------------- /assistant/localization.py: -------------------------------------------------------------------------------- 1 | # Ultroid - UserBot 2 | # Copyright (C) 2021-2022 TeamUltroid 3 | # 4 | # This file is a part of < https://github.com/TeamUltroid/Ultroid/ > 5 | # PLease read the GNU Affero General Public License in 6 | # . 7 | 8 | import re 9 | 10 | from . import Button, callback, get_back_button, get_languages, language, udB 11 | 12 | 13 | @callback("lang", owner=True) 14 | async def setlang(event): 15 | languages = get_languages() 16 | tultd = [ 17 | Button.inline( 18 | f"{languages[ult]['natively']} [{ult.lower()}]", 19 | data=f"set_{ult}", 20 | ) 21 | for ult in languages 22 | ] 23 | buttons = list(zip(tultd[::2], tultd[1::2])) 24 | if len(tultd) % 2 == 1: 25 | buttons.append((tultd[-1],)) 26 | buttons.append([Button.inline("« Back", data="mainmenu")]) 27 | await event.edit("List Of Available Languages.", buttons=buttons) 28 | 29 | 30 | @callback(re.compile(b"set_(.*)"), owner=True) 31 | async def settt(event): 32 | lang = event.data_match.group(1).decode("UTF-8") 33 | languages = get_languages() 34 | language[0] = lang 35 | udB.del_key("language") if lang == "en" else udB.set_key("language", lang) 36 | await event.edit( 37 | f"Your language has been set to {languages[lang]['natively']} [{lang}].", 38 | buttons=get_back_button("lang"), 39 | ) 40 | -------------------------------------------------------------------------------- /plugins/locks.py: -------------------------------------------------------------------------------- 1 | # Ultroid - UserBot 2 | # Copyright (C) 2021-2022 TeamUltroid 3 | # 4 | # This file is a part of < https://github.com/TeamUltroid/Ultroid/ > 5 | # PLease read the GNU Affero General Public License in 6 | # . 7 | """ 8 | ✘ Commands Available - 9 | 10 | • `{i}lock ` 11 | Lock the Used Setting in Used Group. 12 | 13 | • `{i}unlock ` 14 | UNLOCK the Used Setting in Used Group. 15 | """ 16 | from pyUltroid.functions.admins import lock_unlock 17 | from telethon.tl.functions.messages import EditChatDefaultBannedRightsRequest 18 | 19 | from . import ultroid_cmd 20 | 21 | 22 | @ultroid_cmd( 23 | pattern="(un|)lock( (.*)|$)", admins_only=True, manager=True, require="change_info" 24 | ) 25 | async def un_lock(e): 26 | mat = e.pattern_match.group(2).strip() 27 | if not mat: 28 | return await e.eor("`Give some Proper Input..`", time=5) 29 | lock = e.pattern_match.group(1) == "" 30 | ml = lock_unlock(mat, lock) 31 | if not ml: 32 | return await e.eor("`Incorrect Input`", time=5) 33 | msg = "Locked" if lock else "Unlocked" 34 | try: 35 | await e.client(EditChatDefaultBannedRightsRequest(e.chat_id, ml)) 36 | except Exception as er: 37 | return await e.eor(str(er)) 38 | await e.eor(f"**{msg}** - `{mat}` ! ") 39 | -------------------------------------------------------------------------------- /CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | # Welcome To Contributing Guide 2 | Any contribution done to this repository will be appreciated! 🎉 3 | 4 | ### About Ultroid 5 | - **Ultroid** is Telegram Userbot, which allow you to perform many task easily. 6 | - It's base core is a pip package named [`pyUltroid`](https://GitHub.com/TeamUltroid/pyUltroid). 7 | - This repository, contains Ultroid's official plugin files. 8 | - moreover, Ultroid User also have an option to get more plugins available at [`UltroidAddons`](https://github.com/TeamUltroid/UltroidAddons) 9 | 10 | ### Issues 11 | - Search for existing Similar issues. 12 | - You can open a issue first before contributing, If it contain some major changes like `bug fixes` or `feature addition`. 13 | - If you are busy or getting trouble while making changes, you can just open the issue (explaining it). 14 | 15 | ### Contributing 16 | - You can [fork](https://github.com/TeamUltroid/Ultroid/fork) this repository. 17 | - You can commits your changes now. 18 | - You can [Git-Squash](https://docs.github.com/en/get-started/using-git/about-git-rebase) your commits, if they are more. [Optional] 19 | - At last, You are ready to [`make a Pull Request`](https://docs.github.com/en/github/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/creating-a-pull-request). 20 | - Make sure that, your `Pull Request` contain an explaining title and issue number if it closes any open issue. 21 | 22 | ### Thanks 23 | - Congrats! 💫 you have successfully made your Contribution to Ultroid. 24 | -------------------------------------------------------------------------------- /plugins/glitch.py: -------------------------------------------------------------------------------- 1 | # Ultroid - UserBot 2 | # Copyright (C) 2021-2022 TeamUltroid 3 | # 4 | # This file is a part of < https://github.com/TeamUltroid/Ultroid/ > 5 | # PLease read the GNU Affero General Public License in 6 | # . 7 | """ 8 | ✘ Commands Available - 9 | 10 | •`{i}glitch ` 11 | gives a glitchy gif. 12 | """ 13 | import os 14 | 15 | from . import bash, get_string, mediainfo, ultroid_cmd 16 | 17 | 18 | @ultroid_cmd(pattern="glitch$") 19 | async def _(e): 20 | try: 21 | import glitch_me # ignore :pylint 22 | except ModuleNotFoundError: 23 | await bash( 24 | "pip install -e git+https://github.com/1Danish-00/glitch_me.git#egg=glitch_me" 25 | ) 26 | reply = await e.get_reply_message() 27 | if not (reply and reply.media): 28 | return await e.eor(get_string("cvt_3")) 29 | xx = await e.eor(get_string("glitch_1")) 30 | wut = mediainfo(reply.media) 31 | if not wut.startswith(("pic", "sticker")): 32 | if reply.document and reply.document.thumbs: 33 | ok = await reply.download_media(thumb=-1) 34 | else: 35 | return await xx.eor(get_string("com_4")) 36 | else: 37 | ok = await reply.download_media() 38 | cmd = f"glitch_me gif --line_count 200 -f 10 -d 50 '{ok}' ult.gif" 39 | stdout, stderr = await bash(cmd) 40 | await e.reply(file="ult.gif", force_document=False) 41 | await xx.delete() 42 | os.remove(ok) 43 | os.remove("ult.gif") 44 | -------------------------------------------------------------------------------- /vcbot/queue.py: -------------------------------------------------------------------------------- 1 | # Ultroid - UserBot 2 | # Copyright (C) 2021-2022 TeamUltroid 3 | # 4 | # This file is a part of < https://github.com/TeamUltroid/Ultroid/ > 5 | # PLease read the GNU Affero General Public License in 6 | # . 7 | 8 | """ 9 | ✘ Commands Available - 10 | 11 | • `{i}queue` 12 | List the songs in queue. 13 | 14 | • `{i}clearqueue` 15 | Clear all queue in chat. 16 | """ 17 | 18 | from . import vc_asst, get_string, list_queue, VC_QUEUE 19 | 20 | 21 | @vc_asst("queue") 22 | async def lstqueue(event): 23 | if len(event.text.split()) > 1: 24 | chat = event.text.split()[1] 25 | try: 26 | chat = await event.client.parse_id(chat) 27 | except Exception as e: 28 | return await event.eor(get_string("vcbot_2").format(str(e))) 29 | else: 30 | chat = event.chat_id 31 | q = list_queue(chat) 32 | if not q: 33 | return await event.eor(get_string("vcbot_21")) 34 | await event.eor("• Queue:\n\n{}".format(q), parse_mode="html") 35 | 36 | 37 | @vc_asst("clearqueue") 38 | async def clean_queue(event): 39 | if len(event.text.split()) > 1: 40 | chat = event.text.split()[1] 41 | try: 42 | chat = await event.client.parse_id(chat) 43 | except Exception as e: 44 | return await event.eor("**ERROR:**\n{}".format(str(e))) 45 | else: 46 | chat = event.chat_id 47 | if VC_QUEUE.get(chat): 48 | VC_QUEUE.pop(chat) 49 | await event.eor(get_string("vcbot_22"), time=5) 50 | -------------------------------------------------------------------------------- /plugins/cleanaction.py: -------------------------------------------------------------------------------- 1 | # Ultroid - UserBot 2 | # Copyright (C) 2021-2022 TeamUltroid 3 | # 4 | # This file is a part of < https://github.com/TeamUltroid/Ultroid/ > 5 | # PLease read the GNU Affero General Public License in 6 | # . 7 | """ 8 | ✘ Commands Available - 9 | 10 | •`{i}addclean` 11 | Clean all Upcoming action msg in added chat like someone joined/left/pin etc. 12 | 13 | •`{i}remclean` 14 | Remove chat from database. 15 | 16 | •`{i}listclean` 17 | To get list of all chats where its activated. 18 | 19 | """ 20 | 21 | from telethon.utils import get_display_name 22 | 23 | from . import get_string, udB, ultroid_cmd 24 | 25 | 26 | @ultroid_cmd(pattern="addclean$", admins_only=True) 27 | async def _(e): 28 | key = udB.get_key("CLEANCHAT") or [] 29 | if e.chat_id in key: 30 | return await eod(e, get_string("clan_5")) 31 | key.append(e.chat_id) 32 | udB.set_key("CLEANCHAT", key) 33 | await e.eor(get_string("clan_1"), time=5) 34 | 35 | 36 | @ultroid_cmd(pattern="remclean$") 37 | async def _(e): 38 | key = udB.get_key("CLEANCHAT") or [] 39 | if e.chat_id in key: 40 | key.remove(e.chat_id) 41 | udB.set_key("CLEANCHAT", key) 42 | await e.eor(get_string("clan_2"), time=5) 43 | 44 | 45 | @ultroid_cmd(pattern="listclean$") 46 | async def _(e): 47 | k = udB.get_key("CLEANCHAT") 48 | if k: 49 | o = "" 50 | for x in k: 51 | try: 52 | title = get_display_name(await e.client.get_entity(x)) 53 | except BaseException: 54 | title = get_string("clan_3") 55 | o += f"{x} {title}\n" 56 | await e.eor(o) 57 | else: 58 | await e.eor(get_string("clan_4"), time=5) 59 | -------------------------------------------------------------------------------- /plugins/autocorrect.py: -------------------------------------------------------------------------------- 1 | # Ultroid - UserBot 2 | # Copyright (C) 2021-2022 TeamUltroid 3 | # 4 | # This file is a part of < https://github.com/TeamUltroid/Ultroid/ > 5 | # PLease read the GNU Affero General Public License in 6 | # . 7 | """ 8 | ✘ Commands Available 9 | 10 | • `{i}autocorrect` 11 | To on/off Autocorrect Feature. 12 | """ 13 | 14 | import string 15 | 16 | from . import HNDLR, LOGS, get_string, udB, ultroid_bot, ultroid_cmd # ignore: pylint 17 | 18 | try: 19 | from gingerit.gingerit import GingerIt 20 | except ImportError: 21 | LOGS.info("GingerIt not found") 22 | GingerIt = None 23 | 24 | from google_trans_new import google_translator 25 | from telethon import events 26 | 27 | 28 | @ultroid_cmd(pattern="autocorrect", fullsudo=True) 29 | async def acc(e): 30 | if not udB.get_key("AUTOCORRECT"): 31 | udB.set_key("AUTOCORRECT", "True") 32 | ultroid_bot.add_handler( 33 | gramme, events.NewMessage(outgoing=True, func=lambda x: x.text) 34 | ) 35 | return await e.eor(get_string("act_1"), time=5) 36 | udB.del_key("AUTOCORRECT") 37 | await e.eor(get_string("act_2"), time=5) 38 | 39 | 40 | async def gramme(event): 41 | if not udB.get_key("AUTOCORRECT"): 42 | return 43 | t = event.text 44 | if t[0] == HNDLR or t[0].lower() not in string.ascii_lowercase or t.endswith(".."): 45 | return 46 | tt = google_translator().detect(t) 47 | if tt[0] != "en": 48 | return 49 | xx = GingerIt() 50 | x = xx.parse(t) 51 | res = x["result"] 52 | try: 53 | await event.edit(res) 54 | except BaseException: 55 | pass 56 | 57 | 58 | if GingerIt and udB.get_key("AUTOCORRECT"): 59 | ultroid_bot.add_handler( 60 | gramme, events.NewMessage(outgoing=True, func=lambda x: x.text) 61 | ) 62 | -------------------------------------------------------------------------------- /assistant/manager/admins.py: -------------------------------------------------------------------------------- 1 | # Ultroid - UserBot 2 | # Copyright (C) 2021-2022 TeamUltroid 3 | # 4 | # This file is a part of < https://github.com/TeamUltroid/Ultroid/ > 5 | # PLease read the GNU Affero General Public License in 6 | # . 7 | 8 | import re 9 | 10 | from pyUltroid import _ult_cache 11 | from telethon.errors.rpcerrorlist import UserNotParticipantError 12 | 13 | from . import * 14 | 15 | 16 | @ultroid_cmd(pattern="d(kick|ban)", manager=True, require="ban_users") 17 | async def dowj(e): 18 | replied = await e.get_reply_message() 19 | if replied: 20 | user = replied.sender_id 21 | else: 22 | return await e.eor("Reply to a message...") 23 | try: 24 | await replied.delete() 25 | if e.pattern_match.group(1).strip() == "kick": 26 | await e.client.kick_participant(e.chat_id, user) 27 | te = "Kicked" 28 | else: 29 | await e.client.edit_permissions(e.chat_id, user, view_messages=False) 30 | te = "Banned" 31 | await e.eor(f"{te} Successfully!") 32 | except Exception as E: 33 | await e.eor(str(E)) 34 | 35 | 36 | @callback(re.compile("cc_(.*)"), func=_ult_cache.get("admin_callback")) 37 | async def callback_(event): 38 | data = event.data_match.group(1).decode("utf-8") 39 | if data not in _ult_cache.get("admin_callback", {}): 40 | return 41 | try: 42 | perm = await event.client.get_permissions(event.chat_id, event.sender_id) 43 | except UserNotParticipantError: 44 | return await event.answer("Join the Group First!", alert=True) 45 | if not perm.is_admin: 46 | return await event.answer("You are not an Admin!", alert=True) 47 | _ult_cache["admin_callback"].update({data: (event.sender, perm)}) 48 | await event.answer("Verification Done!") 49 | await event.delete() 50 | -------------------------------------------------------------------------------- /app.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Ultroid UserBot", 3 | "description": "Pluggable telegram userbot, made in python using Telethon.", 4 | "logo": "https://telegra.ph/file/031957757a4f6a5191040.jpg", 5 | "keywords": [ 6 | "Telethon", 7 | "telegram", 8 | "userbot", 9 | "python", 10 | "ultroid" 11 | ], 12 | "repository": "https://github.com/TeamUltroid/Ultroid", 13 | "website": "https://ultroid.tech", 14 | "success_url": "https://t.me/TheUltroid", 15 | "stack": "container", 16 | "env": { 17 | "API_ID": { 18 | "description": "You api id, from my.telegram.org or @ScrapperRoBot.", 19 | "value": "", 20 | "required": false 21 | }, 22 | "API_HASH": { 23 | "description": "You api hash, from my.telegram.org or @ScrapperRoBot.", 24 | "value": "", 25 | "required": false 26 | }, 27 | "SESSION": { 28 | "description": "Your session string. Can be added now, or after deploy. (The bot will NOT work without a session string!!)", 29 | "value": "" 30 | }, 31 | "REDIS_URI": { 32 | "description": "Redis endpoint URL, from redislabs.com", 33 | "value": "" 34 | }, 35 | "REDIS_PASSWORD": { 36 | "description": "Redis endpoint password, from redislabs.com", 37 | "value": "" 38 | }, 39 | "HEROKU_API": { 40 | "description": "Heroku API token. Mandatory for Heroku Deploy...", 41 | "value": "", 42 | "required": false 43 | }, 44 | "HEROKU_APP_NAME": { 45 | "description": "Name of your Heroku app, given in the first blank on this page. To be added if deploying to heroku ONLY.", 46 | "value": "", 47 | "required": false 48 | } 49 | }, 50 | "formation": { 51 | "ultroid": { 52 | "quantity": 1, 53 | "size": "free" 54 | } 55 | } 56 | } 57 | -------------------------------------------------------------------------------- /plugins/fakeaction.py: -------------------------------------------------------------------------------- 1 | # Ultroid - UserBot 2 | # Copyright (C) 2021-2022 TeamUltroid 3 | # 4 | # This file is a part of < https://github.com/TeamUltroid/Ultroid/ > 5 | # PLease read the GNU Affero General Public License in 6 | # . 7 | """ 8 | ✘ Commands Available - 9 | 10 | • `{i}ftyping