discord_bot.py 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. #!/usr/bin/env python3
  2. import logging
  3. from logging.config import dictConfig
  4. import atexit
  5. import discord
  6. import discord.utils
  7. import db
  8. from util import find_all_subclasses
  9. from config import get_config, get_secret
  10. from rollbot import Rollbot
  11. from command_system import RollbotMessage, RollbotPlugin
  12. import plugins
  13. dictConfig({
  14. 'version': 1,
  15. 'disable_existing_loggers': False,
  16. 'formatters': {
  17. 'default': {'format': '%(asctime)s - %(levelname)s - %(message)s', 'datefmt': '%Y-%m-%d %H:%M:%S'}
  18. },
  19. 'handlers': {
  20. 'console': {
  21. 'level': 'INFO',
  22. 'formatter': 'default',
  23. 'class': 'logging.StreamHandler',
  24. 'stream': 'ext://sys.stdout',
  25. },
  26. },
  27. 'loggers': {
  28. '': {
  29. 'handlers': ['console'],
  30. 'level': 'INFO',
  31. 'propagate': True
  32. },
  33. }
  34. })
  35. client = discord.Client()
  36. msg_queue = []
  37. rollbot = Rollbot(
  38. logger=logging,
  39. plugin_classes=find_all_subclasses(RollbotPlugin),
  40. aliases=get_config("aliases"),
  41. responses=get_config("responses"),
  42. callback=lambda msg, channel_id: msg_queue.append((msg, discord.utils.get(client.get_all_channels(), id=int(channel_id)))),
  43. session_factory=db.session_scope
  44. )
  45. rollbot.logger.info("Initializing database tables")
  46. db.init_db()
  47. rollbot.logger.info("Finished initializing database")
  48. rollbot.start_plugins()
  49. atexit.register(rollbot.shutdown_plugins)
  50. @client.event
  51. async def on_message(message):
  52. msg = RollbotMessage.from_discord(message) # TODO admins
  53. rollbot.handle_command(msg)
  54. while len(msg_queue) > 0:
  55. content, channel = msg_queue.pop()
  56. await channel.send(content)
  57. if __name__ == "__main__":
  58. client.run(get_secret("discord_token"))