Files
discord_bot/bot.py
2024-03-09 17:04:18 +03:00

162 lines
4.7 KiB
Python
Executable File

#!/usr/bin/env python3
import asyncio
import os
import disnake
from dotenv import load_dotenv
from disnake import OptionType, Option, Localized
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]
)
bot.i18n.load(f"{os.path.dirname(__file__)}/locale/")
logger.info(f"{os.path.dirname(__file__)}/locale/")
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",
options=[
Option(
'cog',
description="specify cog",
type=OptionType.string
)
]
)
@commands.is_owner()
async def slash_cogs(inter: disnake.ApplicationCommandInteraction):
"""
Working with cogs (modules) {{SLASH_COG}}
Parameters
----------
:param inter:
"""
pass
@slash_cogs.sub_command(description=Localized("Enables Cog", key="ENABLES_COG"))
async def enable(inter: disnake.ApplicationCommandInteraction, cog: str):
"""
Parameters
----------
:param inter:
: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):
"""
Parameters
----------
:param inter:
:param cog: Select Cogfile {{COG_FILE}}
"""
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):
"""
Parameters
----------
:param inter:
:param cog: Select Cogfile {{COG_FILE}}
"""
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):
"""
Parameters
----------
:param inter:
:param cog: Select Cogfile {{COG_FILE}}
"""
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):
"""
Parameters
----------
:param inter:
:param cog: Select Cogfile {{COG_FILE}}
"""
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.run(os.getenv('TOKEN'))