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