#!/usr/bin/env python3 import asyncio import os import disnake from dotenv import load_dotenv from disnake import OptionType, Option from disnake.ext import commands from __init__ import version_info as ver, __version__ from lib.CogsPrep import work_with_cogs, cog_list from lib.Comands import determine_prefix from lib.Logger import logger load_dotenv() if not os.path.isfile('.env') or not os.getenv('CONF_FILE'): with open('.env', 'a', encoding='utf-8') as f: f.write("CONF_FILE='config.json'\n") load_dotenv() if not os.path.isfile(os.getenv('CONF_FILE')): with open(os.getenv('CONF_FILE'), 'a', encoding='utf-8') as f: f.write("") intents = disnake.Intents(messages=True, guilds=True, message_content=True, voice_states=True, members=True, presences=True ) bot = commands.Bot(command_prefix=determine_prefix, intents=intents, reload=True, test_guilds=[648126669122568215] ) asyncio.run(work_with_cogs('load', bot, asyncio.run(cog_list()))) @bot.event async def on_ready(): logger.info('Bot started') logger.info(f'Disnake version {disnake.__version__}') logger.info(f'We have logged in as {bot.user}') logger.info(f'Version of bot is - v{__version__}-{ver.releaselevel}') @bot.slash_command( name="cog", # 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( 'cog', description="specify cog", type=OptionType.string ) ] ) @commands.is_owner() 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.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() _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): await inter.response.send_message('Error', ephemeral=True) logger.error(f'User {inter.author} tries to use cogs func') bot.i18n.load("locale/") bot.run(os.getenv('TOKEN'))