""" lib.CogsPrepare ~~~~~~~~~~~~~ Loads, unloads Cogs files cog_list: return list of cog filenames work_with_cogs: loads, reloads and unloads cogs files """ import os import traceback from os import listdir from typing import List from disnake.ext import commands from .Logger import logger async def cog_list(fold='./cogs') -> List[str]: cogs_list = [] for _filename in listdir(fold): if _filename.endswith('.py'): cogs_list.append(_filename[:-3]) return cogs_list async def work_with_cogs(what_do, bot, cog): if isinstance(cog, str): cog = cog.split() for _filename in cog: if what_do == "load": try: bot.load_extension(f'cogs.{_filename}') logger.info(f'Loaded cog {_filename}') except commands.ExtensionNotFound: logger.error(f"Error: {_filename} couldn't be find to load.") except commands.ExtensionFailed as error: logger.error(f'Error: {_filename} failed to load properly.\n\t{error}\n\n{traceback.format_exc()}') except commands.ExtensionError: logger.error(f'Error: unknown error with {_filename}') 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}') os.rename(f'cogs/{_filename}.py', f'cogs/disabled/{_filename}.py') logger.info(f'Cog {_filename} stopped and disabled') elif what_do == 'enable': os.rename(f'cogs/disabled/{_filename}.py', f'cogs/{_filename}.py') bot.load_extension(f'cogs.{_filename}') logger.info(f'Cog {_filename} started and enabled')