105 lines
3.7 KiB
Python
105 lines
3.7 KiB
Python
import disnake
|
|
import os
|
|
import asyncio
|
|
import os
|
|
import sys
|
|
import traceback
|
|
import motor.motor_asyncio
|
|
from motor.motor_asyncio import AsyncIOMotorClient, AsyncIOMotorDatabase
|
|
|
|
|
|
from dotenv import load_dotenv
|
|
from disnake.ext import commands,tasks
|
|
from loguru import logger
|
|
|
|
load_dotenv(".env", override=True)
|
|
|
|
INTENTS = disnake.Intents.all()
|
|
SYNC_FLAGS = commands.CommandSyncFlags.default()
|
|
TOKEN = os.getenv("BOT_TOKEN")
|
|
|
|
class StronkBot(commands.InteractionBot):
|
|
"""base bot instance"""
|
|
|
|
def __init__(self, **kwargs) -> None:
|
|
super().__init__(**kwargs)
|
|
|
|
self.db_client: AsyncIOMotorClient = motor.motor_asyncio.AsyncIOMotorClient('mongodb://sheriff:unnipus1213@192.168.1.109:27017/?retryWrites=true&serverSelectionTimeoutMS=5000&connectTimeoutMS=10000&authSource=stormbrigade&authMechanism=SCRAM-SHA-256', maxPoolSize=10)
|
|
self.database: AsyncIOMotorDatabase = self.db_client.stormbrigade
|
|
async def on_ready(self) -> None:
|
|
logger.info(f"Ready - using {disnake.__version__}")
|
|
|
|
def load_extensions(self, path: str) -> None:
|
|
|
|
for module in os.listdir(path):
|
|
name, ext = os.path.splitext(module)
|
|
|
|
if "__" in name or ext != ".py":
|
|
continue
|
|
|
|
extension = f"cogs.{name}"
|
|
|
|
super().load_extension(extension)
|
|
logger.info(f"Cog loaded: {extension}")
|
|
|
|
async def main() -> None:
|
|
"""Constructs bot, load extensions, and starts bot"""
|
|
logger.add("info.log", rotation="500 MB")
|
|
bot = StronkBot(command_sync_flags=SYNC_FLAGS,intents=INTENTS, reload=True)
|
|
|
|
@bot.slash_command(guild_ids=[934462932669038732],description="Reloads all the cogs in the bot")
|
|
async def reload(self,inter,cog:str = None):
|
|
if not cog:
|
|
for module in os.listdir("cogs/"):
|
|
name, ext = os.path.splitext(module)
|
|
|
|
if "__" in name or ext != ".py":
|
|
continue
|
|
|
|
extension = f"cogs.{name}"
|
|
|
|
bot.reload_extension(extension)
|
|
logger.info(f"Cog reloaded: {extension}")
|
|
|
|
await inter.send("Reloaded all cogs")
|
|
else:
|
|
extension = f"cogs.{cog}"
|
|
bot.reload_extension(extension)
|
|
logger.info(f"Cog Reloading: {extension}")
|
|
await inter.send(f"Reloaded - {extension}")
|
|
|
|
@bot.slash_command(guild_ids=[934462932669038732],description="Add a new cog")
|
|
async def load(self,inter:disnake.ApplicationCommandInteraction,cog:str):
|
|
try:
|
|
bot.load_extension(f"cogs.{cog}")
|
|
logger.info(f"Loading: cogs.{cog}")
|
|
await inter.send(f"Loaded: cogs.{cog}")
|
|
except Exception as e:
|
|
logger.exception(f"Failed:{traceback.format_exception(e)}")
|
|
await inter.send(f"Failed:{traceback.format_exception(e)}")
|
|
|
|
@bot.slash_command(guild_ids=[934462932669038732],description="Unload a cog")
|
|
async def unload(self,inter:disnake.ApplicationCommandInteraction,cog:str):
|
|
try:
|
|
bot.unload_extension(f"cogs.{cog}")
|
|
logger.info(f"Unloading: cogs.{cog}")
|
|
await inter.send(f"Unloaded: cogs.{cog}")
|
|
except Exception as e:
|
|
logger.exception(f"Failed:{traceback.format_exception(e)}")
|
|
await inter.send(f"Failed:{traceback.format_exception(e)}")
|
|
|
|
@reload.autocomplete("cog")
|
|
async def autocomp_input(self, inter:disnake.ApplicationCommandInteraction,user_input:str):
|
|
return [x[:-3] for x in os.listdir("cogs/") if x.endswith(".py")]
|
|
|
|
try:
|
|
bot.load_extensions("cogs/")
|
|
except Exception:
|
|
await bot.close()
|
|
raise
|
|
|
|
logger.info("Starting bot")
|
|
await bot.start(TOKEN or "")
|
|
|
|
if __name__ == "__main__":
|
|
sys.exit(asyncio.run(main())) |