#!/usr/bin/env python3 import logging from logging.config import dictConfig import atexit import discord import discord.utils import db from util import find_all_subclasses from config import get_config, get_secret from rollbot import Rollbot from command_system import RollbotMessage, RollbotPlugin import plugins dictConfig({ 'version': 1, 'disable_existing_loggers': False, 'formatters': { 'default': {'format': '%(asctime)s - %(levelname)s - %(message)s', 'datefmt': '%Y-%m-%d %H:%M:%S'} }, 'handlers': { 'console': { 'level': 'INFO', 'formatter': 'default', 'class': 'logging.StreamHandler', 'stream': 'ext://sys.stdout', }, }, 'loggers': { '': { 'handlers': ['console'], 'level': 'INFO', 'propagate': True }, } }) client = discord.Client() msg_queue = [] rollbot = Rollbot( logger=logging, plugin_classes=find_all_subclasses(RollbotPlugin), aliases=get_config("aliases"), responses=get_config("responses"), callback=lambda msg, channel_id: msg_queue.append((msg, discord.utils.get(client.get_all_channels(), id=int(channel_id)))), session_factory=db.session_scope ) rollbot.logger.info("Initializing database tables") db.init_db() rollbot.logger.info("Finished initializing database") rollbot.start_plugins() atexit.register(rollbot.shutdown_plugins) @client.event async def on_message(message): msg = RollbotMessage.from_discord(message) # TODO admins rollbot.handle_command(msg) while len(msg_queue) > 0: content, channel = msg_queue.pop() await channel.send(content) if __name__ == "__main__": client.run(get_secret("discord_token"))