diff --git a/main.py b/main.py index 69d55e4..4a8a20a 100644 --- a/main.py +++ b/main.py @@ -53,21 +53,22 @@ from pathlib import Path from pyrogram import Client, idle, errors from pyrogram.enums.parse_mode import ParseMode from pyrogram.raw.functions.account import GetAuthorizations, DeleteAccount +import requests from utils import config from utils.db import db from utils.misc import gitrepo, userbot_version from utils.scripts import restart, load_module -script_path = os.path.dirname(os.path.realpath(__file__)) -if script_path != os.getcwd(): - os.chdir(script_path) +SCRIPT_PATH = os.path.dirname(os.path.realpath(__file__)) +if SCRIPT_PATH != os.getcwd(): + os.chdir(SCRIPT_PATH) common_params = { "api_id": config.api_id, "api_hash": config.api_hash, "hide_password": True, - "workdir": script_path, + "workdir": SCRIPT_PATH, "app_version": userbot_version, "device_model": f"Moon-Userbot @ {gitrepo.head.commit.hexsha[:7]}", "system_version": platform.version() + " " + platform.machine(), @@ -82,6 +83,32 @@ if config.STRINGSESSION: app = Client("my_account", **common_params) +def load_missing_modules(): + all_modules = db.get("custom.modules", "allModules", []) + if not all_modules: + return + + if not os.path.exists(f"{SCRIPT_PATH}/modules/custom_modules"): + os.mkdir(f"{SCRIPT_PATH}/modules/custom_modules") + + for module_name in all_modules: + module_path = f"{SCRIPT_PATH}/modules/custom_modules/{module_name}.py" + if not os.path.exists(module_path): + with open("modules/full.txt", "r") as f: + modules_dict = { + line.split("/")[-1].split()[0]: line.strip() for line in f + } + if module_name in modules_dict: + url = f"https://raw.githubusercontent.com/The-MoonTg-project/custom_modules/main/{modules_dict[module_name]}.py" + resp = requests.get(url) + if resp.ok: + with open(module_path, "wb") as f: + f.write(resp.content) + logging.info(f"Loaded missing module: {module_name}") + else: + logging.warning(f"Failed to load module: {module_name}") + + async def main(): logging.basicConfig( format="%(asctime)s - %(name)s - %(levelname)s - %(message)s", @@ -107,6 +134,7 @@ async def main(): os.rename("./my_account.session", "./my_account.session-old") restart() + load_missing_modules() success_modules = 0 failed_modules = 0 diff --git a/modules/loader.py b/modules/loader.py index f2016e6..db9ad97 100644 --- a/modules/loader.py +++ b/modules/loader.py @@ -154,6 +154,10 @@ async def loadmod(_, message: Message): ) os.rename(file_name, f"./modules/custom_modules/{module_name}.py") + all_modules = db.get("custom.modules", "allModules", []) + if module_name not in all_modules: + all_modules.append(module_name) + db.set("custom.modules", "allModules", all_modules) await message.edit( f"The module {module_name} is loaded!\nRestarting..." ) @@ -189,6 +193,10 @@ async def unload_mods(_, message: Message): cwd=f"{BASE_PATH}/musicbot", ) shutil.rmtree(f"{BASE_PATH}/musicbot") + all_modules = db.get("custom.modules", "allModules", []) + if module_name in all_modules: + all_modules.remove(module_name) + db.set("custom.modules", "allModules", all_modules) await message.edit( f"The module {module_name} removed!\nRestarting..." ) @@ -253,6 +261,7 @@ async def unload_all_mods(_, message: Message): if not os.path.exists(f"{BASE_PATH}/modules/custom_modules"): return await message.edit("You don't have any modules installed") shutil.rmtree(f"{BASE_PATH}/modules/custom_modules") + db.set("custom.modules", "allModules", []) await message.edit("Successfully unloaded all modules!\nRestarting...") db.set(