Exemple #1
0
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
Exemple #3
0
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
Exemple #6
0
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
Exemple #7
0
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
Exemple #8
0
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