""" integral_lib.CogsPrepare ~~~~~~~~~~~~~ Loads, unloads Cogs files cog_list: return list of cog filenames work_with_cogs: loads, reloads and unloads cogs files """ from os import listdir, rename from typing import List from disnake.ext.commands.interaction_bot_base import InteractionBotBase from .Logger import logger def cog_list(fold: str = './cogs') -> List[str]: """ A function that generates a list of cog names based on the files present in a specified folder. Parameters: - fold (str): The directory path where the cog files are located. Defaults to './cogs'. Returns: - List[str]: A list of cog names without the '.py' extension. """ cogs_list = [] for _filename in listdir(fold): if _filename.endswith('.py'): cogs_list.append(_filename[:-3]) return cogs_list def work_with_cogs(what_do: str, bot: InteractionBotBase, cog: str | list): """ Perform the specified action on the given cog or list of cogs. Args: what_do (str): The action to perform (load, unload, reload, disable, enable). bot (InteractionBotBase): The bot instance to work with. cog (str | list): The name of the cog or a list of cogs to work with. Raises: ValueError: If the action is not recognized. Returns: None -------- :param cog: str | list :param bot: InteractionBotBase :param what_do: str = ['load', 'unload', 'reload', 'disable', 'enable'] """ if isinstance(cog, str): cog = cog.split() for _filename in cog: if _filename.endswith('.py'): _filename = _filename.split('.')[0] if what_do == "load": bot.load_extension(f'cogs.{_filename}') logger.info(f'Cog {_filename} loaded') elif what_do == 'unload': bot.unload_extension(f'cogs.{_filename}') logger.info(f'Cog {_filename} unloaded') elif what_do == 'reload': bot.reload_extension(f'cogs.{_filename}') logger.info(f'Cog {_filename} reloaded') elif what_do == 'disable': bot.unload_extension(f'cogs.{_filename}') rename(f'cogs/{_filename}.py', f'cogs/disabled/{_filename}.py') logger.info(f'Cog {_filename} stopped and disabled') elif what_do == 'enable': rename(f'cogs/disabled/{_filename}.py', f'cogs/{_filename}.py') bot.load_extension(f'cogs.{_filename}') logger.info(f'Cog {_filename} started and enabled') else: raise ValueError(f"Unrecognized action: {what_do}")