app.py 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. import atexit
  2. import time
  3. from logging.config import dictConfig
  4. from threading import Thread
  5. from flask import Flask, request, render_template, jsonify
  6. from config import BOTS_LOOKUP, SLEEP_TIME, get_config
  7. from command_system import RollbotMessage, RollbotResponse, RollbotFailure
  8. from rollbot import Rollbot
  9. from util import post_message
  10. dictConfig({
  11. "version": 1,
  12. "formatters": {"default": {
  13. "format": "[%(asctime)s] %(levelname)s in %(module)s: %(message)s",
  14. }},
  15. "handlers": {"wsgi": {
  16. "class": "logging.StreamHandler",
  17. "stream": "ext://flask.logging.wsgi_errors_stream",
  18. "formatter": "default"
  19. }},
  20. "root": {
  21. "level": "INFO",
  22. "handlers": ["wsgi"]
  23. }
  24. })
  25. app = Flask(__name__)
  26. rollbot = Rollbot(app.logger)
  27. rollbot.start_plugins()
  28. atexit.register(rollbot.shutdown_plugins)
  29. @app.route("/teamspeak", methods=["GET"])
  30. def teamspeak():
  31. response = rollbot.run_command(RollbotMessage.from_web("!teamspeak"))
  32. if response.is_success:
  33. response = response.txt
  34. else:
  35. response = response.failure_msg
  36. return render_template("teamspeak.html", r=response, scrolling=get_config("teamspeak.scrolling"))
  37. @app.route("/rollbot", methods=["POST"])
  38. def execute():
  39. json = request.get_json()
  40. msg = RollbotMessage.from_groupme(json)
  41. if msg.group_id not in BOTS_LOOKUP:
  42. app.logger.warning(f"Received message from unknown group ID {msg.group_id}")
  43. return jsonify({"message": "Invalid group ID"}), 403
  44. if msg.is_command:
  45. t = Thread(target=lambda: rollbot.handle_message(msg))
  46. t.start()
  47. return "", 204
  48. if __name__ == "__main__":
  49. # default deployment in debug mode
  50. app.run(host="0.0.0.0", port=6070)