app.py 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. import atexit
  2. from logging.config import dictConfig
  3. from threading import Thread
  4. from flask import Flask, request, render_template
  5. import db
  6. from config import BOTS_LOOKUP, get_config, get_secret
  7. from command_system import RollbotMessage, RollbotPlugin
  8. from rollbot import Rollbot
  9. from util import post_groupme_message, find_all_subclasses
  10. import plugins
  11. GLOBAL_ADMINS = get_secret("auths.global")
  12. GROUP_ADMINS = get_secret("auths.group")
  13. dictConfig({
  14. "version": 1,
  15. "formatters": {"default": {
  16. "format": "[%(asctime)s] %(levelname)s in %(module)s: %(message)s",
  17. }},
  18. "handlers": {"wsgi": {
  19. "class": "logging.StreamHandler",
  20. "stream": "ext://flask.logging.wsgi_errors_stream",
  21. "formatter": "default"
  22. }},
  23. "root": {
  24. "level": "INFO",
  25. "handlers": ["wsgi"]
  26. }
  27. })
  28. app = Flask(__name__)
  29. app.config["PROPAGATE_EXCEPTIONS"] = True
  30. rollbot = Rollbot(
  31. logger=app.logger,
  32. plugin_classes=find_all_subclasses(RollbotPlugin),
  33. aliases=get_config("aliases"),
  34. responses=get_config("responses"),
  35. sleep_time=float(get_config("sleep_time")),
  36. callback=lambda msg, group_id: post_groupme_message(msg, BOTS_LOOKUP[group_id]),
  37. session_factory=db.session_scope
  38. )
  39. app.logger.info("Initializing database tables")
  40. db.init_db()
  41. app.logger.info("Finished initializing database")
  42. rollbot.start_plugins()
  43. atexit.register(rollbot.shutdown_plugins)
  44. @app.route("/teamspeak", methods=["GET"])
  45. def teamspeak():
  46. response = rollbot.run_command(RollbotMessage("MANUAL", None, None, None, None, "!teamspeak", False))
  47. if response.is_success:
  48. response = response.txt
  49. else:
  50. response = response.failure_msg
  51. return render_template("teamspeak.html", r=response, scrolling=get_config("teamspeak.scrolling"))
  52. @app.route("/rollbot", methods=["POST"])
  53. def execute():
  54. json = request.get_json()
  55. msg = RollbotMessage.from_groupme(json, global_admins=GLOBAL_ADMINS, group_admins=GROUP_ADMINS)
  56. if msg.group_id in BOTS_LOOKUP:
  57. self.logger.warning(f"Received message from unknown group ID {msg.group_id}")
  58. return "", 400
  59. t = Thread(target=lambda: rollbot.handle_command(msg))
  60. t.start()
  61. return "", 204
  62. if __name__ == "__main__":
  63. app.run(host="0.0.0.0", port=6070)