Bladeren bron

Adding a new entrypoint for the service, which will connect to discord

Kirk Trombley 6 jaren geleden
bovenliggende
commit
83f0f6b620
1 gewijzigde bestanden met toevoegingen van 68 en 0 verwijderingen
  1. 68 0
      src/discord_bot.py

+ 68 - 0
src/discord_bot.py

@@ -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"))