def update_list() -> list: modules_list = [] for module, isRunning in getLoadModules().items(): if not module == basename(__file__)[:-3]: # exclude this module if module in getModuleInfo(): # Append [Name of module, filename of module, running] -> [] modules_list.append([ getModuleInfo().get(module, {}).get("name", msgRep.UNKNOWN), module, isRunning ]) else: modules_list.append([module, module, isRunning]) global MODULES_LISTED if MODULES_LISTED: MODULES_LISTED = {} # reset dict num = 0 for module in [modules[1] for modules in sorted(modules_list)]: num += 1 MODULES_LISTED[str(num)] = module return sorted(modules_list)
def module_usage(name_of_module: str, module: str) -> str: if module in getLoadModules().keys(): usage = msgRep.NAME_MODULE.format(name_of_module) + "\n\n" cmds_usage_registered = False for cmd, value in getRegisteredCMDs().items(): if value.get("module_name") == module: if value.get("success", False): if not cmds_usage_registered: cmds_usage_registered = True cmd_alt = value.get("alt_cmd") cmd_hasArgs = value.get("hasArgs") cmd_args = value.get("args") cmd_usage = value.get("usage") if not cmd_hasArgs: cmd_args = f"__{msgRep.ARGS_NOT_REQ}__" elif cmd_hasArgs and not cmd_args: cmd_args = f"__{msgRep.ARGS_NOT_AVAILABLE}__" if not cmd_usage: cmd_usage = f"__{msgRep.MODULE_NO_USAGE.lower()}__" if cmd_alt: usage += f"`.{cmd}`/`.{cmd_alt}` {cmd_args}\n{msgRep.USAGE}: {cmd_usage}\n\n" else: usage += f"`.{cmd}` {cmd_args}\n{msgRep.USAGE}: {cmd_usage}\n\n" if not cmds_usage_registered: if module in MODULE_DICT.keys(): log.info(f"MODULE_DICT is obsolete, please use register_cmd_usage() instead (in module '{module}')") usage += MODULE_DICT.get(module) else: usage += msgRep.MODULE_NO_USAGE return usage else: raise IndexError
def module_desc(name_of_module: str, module: str) -> str: if module in getLoadModules(): if module in getModuleDesc(): return (msgRep.NAME_MODULE.format(name_of_module) + "\n\n" + getModuleDesc().get(module)) return (msgRep.NAME_MODULE.format(name_of_module) + "\n\n" + msgRep.MODULE_NO_DESC) raise IndexError
def module_desc(name_of_module: str, module: str) -> str: if module in getLoadModules().keys(): if module in getModuleDesc().keys(): return msgRep.NAME_MODULE.format(name_of_module) + "\n\n" + getModuleDesc().get(module) elif module in MODULE_DESC.keys(): log.info(f"MODULE_DESC is obsolete, please use register_module_desc() instead (in module '{module}')") return msgRep.NAME_MODULE.format(name_of_module) + "\n\n" + MODULE_DESC.get(module) else: return msgRep.NAME_MODULE.format(name_of_module) + "\n\n" + msgRep.MODULE_NO_DESC else: raise IndexError
def module_info(name_of_module: str, module: str) -> str: if module in getLoadModules().keys(): package_name, moduletype, installation_date = (msgRep.UNKNOWN,)*3 size = 0 if module in getModuleInfo().keys(): authors = getModuleInfo().get(module, {}).get("authors", msgRep.UNKNOWN) version = getModuleInfo().get(module, {}).get("version", 0) elif module in MODULE_INFO.keys(): log.info(f"MODULE_INFO is obsolete, please use register_module_info() instead (in module '{module}')") authors = MODULE_INFO.get(module, {}).get("authors", msgRep.UNKNOWN) version = MODULE_INFO.get(module, {}).get("version", 0) if not authors: authors = msgRep.UNKNOWN if not version: version = 0 package_name = module module += ".py" syspath = join(".", "userbot", "modules") userpath = join(".", "userbot", "modules_user") if exists(join(syspath, module)): moduletype = msgRep.SYSTEM size = sizeStrMaker(getsize(join(syspath, module))) if OS and OS.lower().startswith("win"): installation_date = getctime(join(syspath, module)) elif OS and OS.lower().startswith("darwin"): installation_date = stat(join(syspath, module)).st_birthtime else: installation_date = stat(join(syspath, module)).st_ctime elif exists(join(userpath, module)): moduletype = msgRep.USER size = sizeStrMaker(getsize(join(userpath, module))) if OS and OS.lower().startswith("win"): installation_date = getctime(join(userpath, module)) elif OS and OS.lower().startswith("darwin"): installation_date = stat(join(userpath, module)).st_birthtime else: installation_date = stat(join(userpath, module)).st_ctime result = f"{msgRep.PKG_NAME}: {package_name}\n" result += f"{msgRep.MODULE_TYPE}: {moduletype}\n" result += f"{msgRep.AUTHORS}: {authors}\n" result += f"{msgRep.VERSION}: {version}\n" result += f"{msgRep.SIZE}: {size}\n" result += f"{msgRep.INSTALL_DATE}: {ctime(installation_date)}" return msgRep.NAME_MODULE.format(name_of_module) + "\n\n" + result else: raise IndexError
def module_usage(name_of_module: str, module: str) -> str: if module in getLoadModules().keys(): usage = msgRep.NAME_MODULE.format(name_of_module) + "\n\n" cmds_usage_registered = False for cmd, value in getRegisteredCMDs().items(): if value.get("module_name") == module: if value.get("success", False): if not cmds_usage_registered: cmds_usage_registered = True cmd_alt = value.get("alt_cmd") cmd_hasArgs = value.get("hasArgs") cmd_prefix = value.get("prefix") cmd_no_space_arg = value.get("no_space_arg") cmd_no_command = value.get("no_cmd") cmd_args = value.get("args") cmd_usage = value.get("usage") space = "" if cmd_no_space_arg else " " if cmd_no_command: cmd_args = "" elif not cmd_hasArgs: cmd_args = f"__{msgRep.ARGS_NOT_REQ}__" elif cmd_hasArgs and not cmd_args: cmd_args = f"__{msgRep.ARGS_NOT_AVAILABLE}__" if not cmd_usage: cmd_usage = f"__{msgRep.MODULE_NO_USAGE.lower()}__" if cmd_alt: usage += f"`{cmd_prefix}{cmd}`/`"\ f"{cmd_prefix}{cmd_alt}`{space}{cmd_args}\n" else: usage += f"`{cmd_prefix}{cmd}`{space}{cmd_args}\n" usage += f"{msgRep.USAGE}: {cmd_usage}\n\n" if not cmds_usage_registered: usage += msgRep.MODULE_NO_USAGE return usage else: raise IndexError
def module_info(name_of_module: str, module: str) -> str: if module in getLoadModules().keys(): package_name, moduletype, installation_date = (msgRep.UNKNOWN, ) * 3 size = 0 authors = getModuleInfo().get(module, {}).get("authors", msgRep.UNKNOWN) version = getModuleInfo().get(module, {}).get("version", 0) package_name = module module += ".py" syspath = join(".", "userbot", "modules") userpath = join(".", "userbot", "modules_user") if exists(join(syspath, module)): moduletype = msgRep.SYSTEM size = sizeStrMaker(getsize(join(syspath, module))) if isWindows(): installation_date = getctime(join(syspath, module)) elif isMacOS(): installation_date = stat(join(syspath, module)).st_birthtime else: installation_date = stat(join(syspath, module)).st_ctime elif exists(join(userpath, module)): moduletype = msgRep.USER size = sizeStrMaker(getsize(join(userpath, module))) if isWindows(): installation_date = getctime(join(userpath, module)) elif isMacOS(): installation_date = stat(join(userpath, module)).st_birthtime else: installation_date = stat(join(userpath, module)).st_ctime result = f"{msgRep.PKG_NAME}: {package_name}\n" result += f"{msgRep.MODULE_TYPE}: {moduletype}\n" result += f"{msgRep.AUTHORS}: {authors}\n" result += f"{msgRep.VERSION}: {version}\n" result += f"{msgRep.SIZE}: {size}\n" result += f"{msgRep.INSTALL_DATE}: {ctime(installation_date)}" return msgRep.NAME_MODULE.format(name_of_module) + "\n\n" + result else: raise IndexError
async def _list_pkgs(command: str) -> str: installed_only = False repos_only = False if command: if command.lower() == "-installed": installed_only = True elif command.lower() == "-repos": repos_only = True user_module_list = _get_all_user_modules() if getConfig("PKG_ENABLE_AUTO_UPDATE"): if _update_needed(): log.info("Auto updating repo data") await _update_pkg_list(None) text = f"**{msgRep.LIST_OF_PACKAGES}**\n\n" no_entry = u"\u26D4" # no_entry emoji negative_cross = u"\u274E" # green negative cross mark emoji warning = u"\u26A0" # warning emoji disabled_module = False installed_not_loaded = False mod_not_running = False if not repos_only: not_load_modules = getConfig("NOT_LOAD_MODULES", []) user_modules = getUserModules() loaded_modules = getLoadModules() text += f"**{msgRep.INSTALLED_MODULES} ({len(user_module_list)}):**\n" if user_module_list: for module in user_module_list: info = "" if module in not_load_modules: info += f" {no_entry}" if not disabled_module: disabled_module = True elif (module not in user_modules) or \ (SAFEMODE and module in user_modules): info += f" {negative_cross}" if not installed_not_loaded: installed_not_loaded = True else: isrun = loaded_modules.get(module) if not isrun: info += f" {warning}" if not mod_not_running: mod_not_running = True text += f"- `{module}`{info}\n" else: text += f"__{msgRep.NO_MODULES_INSTALLED}__\n" text += "\n" pkg_repos = _pkg_list.get("repos", []) installed_already = False upgradeable = False equal_module = False check_mark = u"\u2705" # check mark emoji ccw_emoji = u"\U0001F504" # counterclockwise emoji info_emoji = u"\u2139" # information emoji if not installed_only and pkg_repos: module_sources = _pkg_list.get("module_sources", []) for repo in pkg_repos: repo_author = repo.get("author", "Unknown") repo_name = repo.get("name", "Unknown") repo_version = repo.get("version", "Unknown") assets = repo.get("assets", []) assets_size = len(assets) text += (f"**{msgRep.MODULES_IN.format(repo_name)} " f"({assets_size}):**\n") text += f"{msgRep.AUTHOR}: **{repo_author}**\n" text += f"{msgRep.VERSION}: **{repo_version}**\n" if assets: for asset in assets: module_name = asset.get("name")[:-3] module_size = asset.get("size", 0) # convert size to human readable module_size_conv = sizeStrMaker(module_size) info = "" if module_name in user_module_list: for mod_src in module_sources: # check if installed module is from known # package lists mod_src_name = mod_src.get("name", "") mod_src_author = mod_src.get("author", "Unknown") mod_src_repo = mod_src.get("repo", "Unknown") mod_src_version = mod_src.get("version", "Unknown") mod_src_size = mod_src.get("size", 0) if module_name == mod_src_name: if mod_src_author == repo_author and \ mod_src_repo == repo_name: info += f" {check_mark}" if not installed_already: installed_already = True if not mod_src_version == repo_version and\ not mod_src_size == module_size: # assume the module were updated info += f" {ccw_emoji}" if not upgradeable: upgradeable = True break if len(pkg_repos) >= 2: # more known repos # check if current module's name exist # in a different repo too for repo2 in pkg_repos: if not repo == repo2: assets2 = repo2.get("assets", []) if assets2: for asset2 in assets2: module_name2 = asset2.get("name")[:-3] if module_name == module_name2: info += f" {info_emoji}" if not equal_module: equal_module = True break text += f"- `{module_name}` ({module_size_conv}){info}\n" else: text += f"__{msgRep.REPO_NO_MODULES}__\n" text += "\n" elif not installed_only: text += f"__{msgRep.REPOS_NO_DATA.format('`.pkg update`')}__\n" text += "\n" if installed_already: text += f"{check_mark} __{msgRep.INSTALLED}__\n" if installed_not_loaded: text += f"{negative_cross} __{msgRep.INSTALLED_NOTLOADED}__\n" if upgradeable: text += f"{ccw_emoji} __{msgRep.UPGRADEABLE}__\n" if mod_not_running: text += f"{warning} __{msgRep.START_FAILED}__\n" if disabled_module: text += f"{no_entry} __{msgRep.DISABLED}__\n" if equal_module: text += f"{info_emoji} __{msgRep.EQUAL_NAME}__\n" if any(x for x in (installed_already, installed_not_loaded, mod_not_running, disabled_module, equal_module)): text += "\n" time = _pkg_list.get("last_updated", None) try: time = datetime.fromisoformat(time) time = time.strftime("%Y-%m-%d %H:%M:%S") except Exception: time = msgRep.NEVER text += f"__{msgRep.LAST_UPDATED}: {time}__" return text