79 lines
2.6 KiB
Python
79 lines
2.6 KiB
Python
"""
|
|
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}")
|