import atexit from logging.config import dictConfig from threading import Thread from flask import Flask, request, render_template, jsonify import db from config import BOTS_LOOKUP, GLOBAL_ADMINS, GROUP_ADMINS, 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__) app.config["PROPAGATE_EXCEPTIONS"] = True rollbot = Rollbot( app.logger, plugins=get_config("plugins"), aliases=get_config("aliases"), responses=get_config("responses"), lookup=BOTS_LOOKUP, sleep_time=float(get_config("sleep_time")) ) app.logger.info("Initializing database tables") db.init_db() app.logger.info("Finished initializing database") rollbot.start_plugins() atexit.register(rollbot.shutdown_plugins) @app.route("/teamspeak", methods=["GET"]) def teamspeak(): response = rollbot.run_command(RollbotMessage("MANUAL", None, None, None, None, "!teamspeak", False)) 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, global_admins=GLOBAL_ADMINS, group_admins=GROUP_ADMINS) rollbot.handle_command_threaded(msg) return "", 204 if __name__ == "__main__": app.run(host="0.0.0.0", port=6070)