jarvis-bot/jarvis/__init__.py

73 lines
2.2 KiB
Python

"""Main JARVIS package."""
import logging
import aioredis
import jurigged
import rook
from jarvis_core.db import connect
from jarvis_core.log import get_logger
from naff import Intents
from jarvis import const
from jarvis.client import Jarvis
from jarvis.cogs import __path__ as cogs_path
from jarvis.config import JarvisConfig
from jarvis.utils import get_extensions
__version__ = const.__version__
async def run() -> None:
"""Run JARVIS"""
# Configure logger
jconfig = JarvisConfig.from_yaml()
logger = get_logger("jarvis", show_locals=jconfig.log_level == "DEBUG")
logger.setLevel(jconfig.log_level)
file_handler = logging.FileHandler(filename="jarvis.log", encoding="UTF-8", mode="w")
file_handler.setFormatter(
logging.Formatter("[%(asctime)s] [%(name)s] [%(levelname)8s] %(message)s")
)
logger.addHandler(file_handler)
# Configure client
intents = (
Intents.DEFAULT | Intents.MESSAGES | Intents.GUILD_MEMBERS | Intents.GUILD_MESSAGE_CONTENT
)
redis_config = jconfig.redis.copy()
redis_host = redis_config.pop("host")
redis = await aioredis.from_url(redis_host, decode_responses=True, **redis_config)
jarvis = Jarvis(
intents=intents,
sync_interactions=jconfig.sync,
delete_unused_application_cmds=True,
send_command_tracebacks=False,
redis=redis,
logger=logger,
)
# External modules
if jconfig.log_level == "DEBUG":
jurigged.watch(pattern="jarvis/*.py")
if jconfig.rook_token:
rook.start(token=jconfig.rook_token, labels={"env": "dev"})
# Initialize bot
logger.info("Starting JARVIS")
logger.debug("Connecting to database")
connect(**jconfig.mongo["connect"], testing=jconfig.mongo["database"] != "jarvis")
logger.debug("Loading configuration from database")
# jconfig.get_db_config()
# Load extensions
logger.debug("Loading extensions")
for extension in get_extensions(cogs_path):
jarvis.load_extension(extension)
logger.debug("Loaded %s", extension)
logger.debug("Loading nafftrack")
jarvis.load_extension("nafftrack.extension")
jarvis.max_messages = jconfig.max_messages
logger.debug("Running JARVIS")
await jarvis.astart(jconfig.token)