import atexit import time from logging.config import dictConfig from threading import Thread from flask import Flask, request, render_template, jsonify from config import BOTS_LOOKUP, SLEEP_TIME, get_config from command_system import RollbotMessage, RollbotResponse, RollbotFailure from rollbot import Rollbot from util import post_message dictConfig({ "version": 1, "formatters": {"default": { "format": "[%(asctime)s] %(levelname)s in %(module)s: %(message)s", }}, "handlers": {"wsgi": { "class": "logging.StreamHandler", "stream": "ext://flask.logging.wsgi_errors_stream", "formatter": "default" }}, "root": { "level": "INFO", "handlers": ["wsgi"] } }) app = Flask(__name__) rollbot = Rollbot(app.logger) rollbot.start_plugins() atexit.register(rollbot.shutdown_plugins) @app.route("/teamspeak", methods=["GET"]) def teamspeak(): response = rollbot.run_command(RollbotMessage.from_web("!teamspeak")) if response.is_success: response = response.txt else: response = response.failure_msg return render_template("teamspeak.html", r=response, scrolling=get_config("teamspeak.scrolling")) @app.route("/rollbot", methods=["POST"]) def execute(): json = request.get_json() msg = RollbotMessage.from_groupme(json) if msg.group_id not in BOTS_LOOKUP: app.logger.warning(f"Received message from unknown group ID {msg.group_id}") return jsonify({"message": "Invalid group ID"}), 403 if msg.is_command: t = Thread(target=lambda: rollbot.handle_message(msg)) t.start() return "", 204 if __name__ == "__main__": # default deployment in debug mode app.run(host="0.0.0.0", port=6070)