144 lines
4.5 KiB
Python
Executable File
144 lines
4.5 KiB
Python
Executable File
#!/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'))
|