mirror of
https://github.com/wlinator/luminara.git
synced 2024-10-02 20:23:12 +00:00
58 lines
1.7 KiB
Python
58 lines
1.7 KiB
Python
from discord.ext import commands
|
|
from loguru import logger
|
|
import asyncio
|
|
from loader import CogLoader
|
|
|
|
|
|
class Luminara(commands.Bot):
|
|
def __init__(self, *args, **kwargs):
|
|
super().__init__(*args, **kwargs)
|
|
self.is_shutting_down: bool = False
|
|
self.setup_task: asyncio.Task = asyncio.create_task(self.setup())
|
|
self.strip_after_prefix = True
|
|
self.case_insensitive = True
|
|
|
|
async def setup(self) -> None:
|
|
try:
|
|
pass
|
|
except Exception as e:
|
|
logger.error(f"Failed to setup: {e}")
|
|
await self.load_cogs()
|
|
|
|
async def load_cogs(self) -> None:
|
|
logger.info("Loading cogs...")
|
|
await CogLoader.setup(bot=self)
|
|
|
|
@commands.Cog.listener()
|
|
async def on_ready(self) -> None:
|
|
logger.success(f"Logged in as {self.user}.")
|
|
|
|
if not self.setup_task.done():
|
|
await self.setup_task
|
|
|
|
@commands.Cog.listener()
|
|
async def on_disconnect(self) -> None:
|
|
logger.warning("Disconnected from Discord.")
|
|
|
|
async def shutdown(self) -> None:
|
|
if self.is_shutting_down:
|
|
logger.info("Shutdown already in progress. Exiting.")
|
|
return
|
|
|
|
self.is_shutting_down = True
|
|
logger.info("Shutting down...")
|
|
|
|
await self.close()
|
|
|
|
if tasks := [
|
|
task for task in asyncio.all_tasks() if task is not asyncio.current_task()
|
|
]:
|
|
logger.debug(f"Cancelling {len(tasks)} outstanding tasks.")
|
|
|
|
for task in tasks:
|
|
task.cancel()
|
|
|
|
await asyncio.gather(*tasks, return_exceptions=True)
|
|
logger.debug("All tasks cancelled.")
|
|
|
|
logger.info("Shutdown complete.")
|