├── 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 | 
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