college-bot-v1/utils/client.py
2023-02-22 15:36:46 +00:00

64 lines
1.9 KiB
Python

import discord
import config
from asyncio import Lock
from discord.ext import commands
from datetime import datetime, timezone
__all__ = ("Bot", 'bot')
# noinspection PyAbstractClass
class Bot(commands.Bot):
def __init__(self, intents: discord.Intents, guilds: list[int], extensions: list[str]):
from .db import JimmyBans, registry
from .console import console
super().__init__(
command_prefix=self.get_prefix,
debug_guilds=guilds,
allowed_mentions=discord.AllowedMentions.none(),
intents=intents,
)
self.loop.run_until_complete(registry.create_all())
self.training_lock = Lock()
self.started_at = datetime.now(tz=timezone.utc)
self.bans = JimmyBans()
self.console = console
for ext in extensions:
try:
self.load_extension(ext)
except discord.ExtensionFailed as e:
console.log(f"[red]Failed to load extension {ext}: {e}")
if getattr(config, "dev", False):
console.print_exception()
else:
console.log(f"Loaded extension [green]{ext}")
if getattr(config, "CONNECT_MODE", None) == 2:
async def connect(self, *, reconnect: bool = True) -> None:
self.console.log("Exit target 2 reached, shutting down (not connecting to discord).")
return
try:
from config import intents as _intents
except ImportError:
_intents = discord.Intents.all()
try:
from config import extensions as _extensions
except ImportError:
_extensions = [
"jishaku",
"cogs.verify",
"cogs.mod",
"cogs.events",
"cogs.assignments",
"cogs.timetable",
"cogs.other",
"cogs.starboard",
"cogs.uptime",
]
bot = Bot(_intents, config.guilds, _extensions)