|
@@ -0,0 +1,68 @@
|
|
|
|
+#!/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"))
|