| from sys import exit | |
| from importlib import import_module | |
| from logging import ( | |
| FileHandler, | |
| StreamHandler, | |
| INFO, | |
| basicConfig, | |
| error as log_error, | |
| info as log_info, | |
| getLogger, | |
| ERROR, | |
| ) | |
| from os import path, remove, environ | |
| from pymongo.mongo_client import MongoClient | |
| from pymongo.server_api import ServerApi | |
| from subprocess import run as srun, call as scall | |
| getLogger("pymongo").setLevel(ERROR) | |
| var_list = [ | |
| "BOT_TOKEN", | |
| "TELEGRAM_API", | |
| "TELEGRAM_HASH", | |
| "OWNER_ID", | |
| "DATABASE_URL", | |
| "BASE_URL", | |
| "UPSTREAM_REPO", | |
| "UPSTREAM_BRANCH", | |
| "UPDATE_PKGS", | |
| ] | |
| if path.exists("log.txt"): | |
| with open("log.txt", "r+") as f: | |
| f.truncate(0) | |
| if path.exists("rlog.txt"): | |
| remove("rlog.txt") | |
| basicConfig( | |
| format="[%(asctime)s] [%(levelname)s] - %(message)s", | |
| datefmt="%d-%b-%y %I:%M:%S %p", | |
| handlers=[FileHandler("log.txt"), StreamHandler()], | |
| level=INFO, | |
| ) | |
| try: | |
| settings = import_module("config") | |
| config_file = { | |
| key: value.strip() if isinstance(value, str) else value | |
| for key, value in vars(settings).items() | |
| if not key.startswith("__") | |
| } | |
| except ModuleNotFoundError: | |
| log_info("Config.py file is not Added! Checking ENVs..") | |
| config_file = {} | |
| env_updates = { | |
| key: value.strip() if isinstance(value, str) else value | |
| for key, value in environ.items() | |
| if key in var_list | |
| } | |
| if env_updates: | |
| log_info("Config data is updated with ENVs!") | |
| config_file.update(env_updates) | |
| BOT_TOKEN = config_file.get("BOT_TOKEN", "") | |
| if not BOT_TOKEN: | |
| log_error("BOT_TOKEN variable is missing! Exiting now") | |
| exit(1) | |
| BOT_ID = BOT_TOKEN.split(":", 1)[0] | |
| if DATABASE_URL := config_file.get("DATABASE_URL", "").strip(): | |
| try: | |
| conn = MongoClient(DATABASE_URL, server_api=ServerApi("1")) | |
| db = conn.wzmlx | |
| old_config = db.settings.deployConfig.find_one({"_id": BOT_ID}, {"_id": 0}) | |
| config_dict = db.settings.config.find_one({"_id": BOT_ID}) | |
| if ( | |
| old_config is not None and old_config == config_file or old_config is None | |
| ) and config_dict is not None: | |
| config_file["UPSTREAM_REPO"] = config_dict["UPSTREAM_REPO"] | |
| config_file["UPSTREAM_BRANCH"] = config_dict.get("UPSTREAM_BRANCH", "wzv3") | |
| config_file["UPDATE_PKGS"] = config_dict.get("UPDATE_PKGS", "True") | |
| conn.close() | |
| except Exception as e: | |
| log_error(f"Database ERROR: {e}") | |
| UPSTREAM_REPO = config_file.get("UPSTREAM_REPO", "").strip() | |
| UPSTREAM_BRANCH = config_file.get("UPSTREAM_BRANCH", "").strip() or "wzv3" | |
| if UPSTREAM_REPO: | |
| if path.exists(".git"): | |
| srun(["rm", "-rf", ".git"]) | |
| update = srun( | |
| [ | |
| f"git init -q \ | |
| && git config --global user.email 105407900+SilentDemonSD@users.noreply.github.com \ | |
| && git config --global user.name SilentDemonSD \ | |
| && git add . \ | |
| && git commit -sm update -q \ | |
| && git remote add origin {UPSTREAM_REPO} \ | |
| && git fetch origin -q \ | |
| && git reset --hard origin/{UPSTREAM_BRANCH} -q" | |
| ], | |
| shell=True, | |
| ) | |
| repo = UPSTREAM_REPO.split("/") | |
| UPSTREAM_REPO = f"https://github.com/{repo[-2]}/{repo[-1]}" | |
| if update.returncode == 0: | |
| log_info("Successfully updated with Latest Updates !") | |
| else: | |
| log_error("Something went Wrong ! Recheck your details or Ask Support !") | |
| log_info(f"UPSTREAM_REPO: {UPSTREAM_REPO} | UPSTREAM_BRANCH: {UPSTREAM_BRANCH}") | |
| UPDATE_PKGS = config_file.get("UPDATE_PKGS", "True") | |
| if (isinstance(UPDATE_PKGS, str) and UPDATE_PKGS.lower() == "true") or UPDATE_PKGS: | |
| scall("uv pip install -U -r requirements.txt", shell=True) | |
| log_info("Successfully Updated all the Packages !") | |