diff --git a/.gitignore b/.gitignore index 891e35a..120dd17 100755 --- a/.gitignore +++ b/.gitignore @@ -2,7 +2,6 @@ /audio/*/ /.idea /user.db -*.json *.pyc /.run/ /.env @@ -10,3 +9,4 @@ /venv/ /fun_and_admin_bot.egg-info/ /.YMcache/ +config.json \ No newline at end of file diff --git a/bot.py b/bot.py index 558e565..c801ed2 100755 --- a/bot.py +++ b/bot.py @@ -31,7 +31,7 @@ intents = disnake.Intents(messages=True, bot = commands.Bot(command_prefix=determine_prefix, intents=intents, reload=True, - + test_guilds=[648126669122568215] ) @@ -48,15 +48,15 @@ async def on_ready(): @bot.slash_command( name="cog", - description="Work with cogs", + # description="Work with cogs", options=[ - Option( - "what_do", - description="Specify what do with cogs", - type=OptionType.string, - required=True, - choices=["load", "unload", "reload", "enable", "disable"] - ), + # Option( + # "what_do", + # description="Specify what do with cogs", + # type=OptionType.string, + # required=True, + # choices=["load", "unload", "reload", "enable", "disable"] + # ), Option( 'cog', description="specify cog", @@ -65,27 +65,79 @@ async def on_ready(): ] ) @commands.is_owner() -async def slash_cogs(inter: disnake.ApplicationCommandInteraction, what_do, cog: str): - await work_with_cogs(what_do, bot, cog) - await inter.response.send_message(f'Cog {cog} is {what_do}ed', ephemeral=True) +async def slash_cogs(inter: disnake.ApplicationCommandInteraction): + """ + Working with cogs (modules) + + Parameters + ---------- + :param cog: Select cogfile + """ + # await work_with_cogs(what_do, bot, cog) + # await inter.response.send_message(f'Cog {cog} is {what_do}ed', ephemeral=True) + pass -@slash_cogs.autocomplete('cog') -async def _cog_opt(inter: disnake.ApplicationCommandInteraction, what_do, current: str): +@slash_cogs.sub_command() +async def enable(inter: disnake.ApplicationCommandInteraction, cog: str): + """ + Enables Cog {{ENABLES_COG}} + + Parameters + ---------- + :param cog: Select Cogfile {{COG_FILE}} + """ + await work_with_cogs('enable', bot, cog) + await inter.response.send_message(f'Cog {cog} is enabled', ephemeral=True) + + +@slash_cogs.sub_command(description='Disables Cog') +async def disable(inter: disnake.ApplicationCommandInteraction, cog: str): + await work_with_cogs('disable', bot, cog) + await inter.response.send_message(f'Cog {cog} is disabled', ephemeral=True) + + +@slash_cogs.sub_command(description='Loads Cog') +async def load(inter: disnake.ApplicationCommandInteraction, cog: str): + await work_with_cogs('load', bot, cog) + await inter.response.send_message(f'Cog {cog} is loaded', ephemeral=True) + + +@slash_cogs.sub_command(description='Unloads Cog') +async def unload(inter: disnake.ApplicationCommandInteraction, cog: str): + await work_with_cogs('unload', bot, cog) + await inter.response.send_message(f'Cog {cog} is unload', ephemeral=True) + + +@slash_cogs.sub_command(description='Reloads Cog') +async def reload(inter: disnake.ApplicationCommandInteraction, cog: str): + await work_with_cogs('reload', bot, cog) + await inter.response.send_message(f'Cog {cog} is reloaded', ephemeral=True) + + +@disable.autocomplete('cog') +@unload.autocomplete('cog') +@load.autocomplete('cog') +@reload.autocomplete('cog') +async def _cog_opt(inter: disnake.ApplicationCommandInteraction, current: str): current = current.lower() - if what_do == 'enable': - _list = await cog_list('./cogs/disabled/') - logger.error(_list) - else: - _list = await cog_list() - logger.error(_list) + _list = await cog_list(fold='./cogs/') + return [choice for choice in _list if current in choice.lower()] + + +@enable.autocomplete('cog') +async def _cog_opt(inter: disnake.ApplicationCommandInteraction, current: str): + current = current.lower() + _list = await cog_list(fold='./cogs/disabled/') + logger.info(_list) return [choice for choice in _list if current in choice.lower()] @slash_cogs.error -async def cogs_error(inter: disnake.ApplicationCommandInteraction, what_do): +async def cogs_error(inter: disnake.ApplicationCommandInteraction): await inter.response.send_message('Error', ephemeral=True) - logger.error(f'User {inter.author} tries to use cogs func\n{what_do}\n') + logger.error(f'User {inter.author} tries to use cogs func') +bot.i18n.load("locale/") bot.run(os.getenv('TOKEN')) diff --git a/lib/CogsPrep.py b/lib/CogsPrep.py index d8d2203..3c44a5b 100644 --- a/lib/CogsPrep.py +++ b/lib/CogsPrep.py @@ -15,7 +15,7 @@ from disnake.ext import commands from .Logger import logger -async def cog_list(fold='./cogs') -> List[str]: +async def cog_list(fold: str = './cogs') -> List[str]: cogs_list = [] for _filename in listdir(fold): if _filename.endswith('.py'): @@ -28,19 +28,8 @@ async def work_with_cogs(what_do, bot: commands.Bot, cog): 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}') - + bot.load_extension(f'cogs.{_filename}') + logger.info(f'Loaded cog {_filename}') elif what_do == 'unload': bot.unload_extension(f'cogs.{_filename}') logger.info(f'Cog {_filename} unloaded') diff --git a/locale/ru.json b/locale/ru.json new file mode 100644 index 0000000..5f924bc --- /dev/null +++ b/locale/ru.json @@ -0,0 +1,4 @@ +{ + "ENABLES_COG": "Включение кога", + "COG_FILE": "Ког Файл" +} \ No newline at end of file