#include #include #include #include #include "crow.h" #include "Handler.hpp" #include "Response.hpp" /* BEGIN Handlers */ #include "GetEssen.hpp" #include "SimpleHandlers.hpp" #include "RelationshipHandler.hpp" /* END Handlers */ int main() { crow::SimpleApp app; auto createPlainDescriptionFromText = [](std::string const &text) -> std::vector { std::vector reply_vector; reply_vector.emplace_back(Response::create_text(text)); return reply_vector; }; // command --> handler std::vector regular_commands; regular_commands.emplace_back( Handler::CommandHandler{"wiki", Handler::wikiHandler, [createPlainDescriptionFromText]() { return createPlainDescriptionFromText("Sends you to Wikipedia!"); }}); regular_commands.emplace_back( Handler::CommandHandler{"stop", Handler::stopHandler, [createPlainDescriptionFromText]() { return createPlainDescriptionFromText("Stops the bot"); }, &app}); regular_commands.emplace_back( Handler::CommandHandler{"mensa", Handler::mensaHandler, [createPlainDescriptionFromText]() { return createPlainDescriptionFromText( "{adlershof, nord, sued} Shows the daily menu of the mensa at various places."); }}); regular_commands.emplace_back( Handler::CommandHandler{"latex", Handler::latexRenderHandler, [createPlainDescriptionFromText]() { return createPlainDescriptionFromText( "Renders the given string to a png"); }}); regular_commands.emplace_back( Handler::CommandHandler{"klinger", Handler::klingerHandler, [createPlainDescriptionFromText]() { return createPlainDescriptionFromText("Greats in french. Bonjour!"); }}); regular_commands.emplace_back( Handler::CommandHandler{"say", Handler::sayHandler, [createPlainDescriptionFromText]() { return createPlainDescriptionFromText("Say something!"); }}); regular_commands.emplace_back( Handler::CommandHandler{"relation", Handler::relationShipHandler, [createPlainDescriptionFromText]() { return createPlainDescriptionFromText( "[name1] [name2] Shows the result of an odd astrological religious pseudo-algorithm, based on the fact how much blessing a relationship receives by the glorious N."); }}); regular_commands.emplace_back( Handler::CommandHandler{"help", Handler::helpHandler, [createPlainDescriptionFromText]() { return createPlainDescriptionFromText("This is my holy manual."); }, ®ular_commands}); CROW_ROUTE(app, "/") .methods("POST"_method) ([®ular_commands](crow::request const &request) { auto data = crow::json::load(request.body); if (!data) return crow::response(400); if (!data.count("command")) return crow::response(400, "malformed request: missing `command` field\n"); std::string command = (data.count("command") ? data["command"].s() : std::string("No such command!")); std::string arguments = (data.count("arguments") ? data["arguments"].s() : std::string("")); std::string session = (data.count("session") ? data["session"].s() : std::string("null")); auto itor = std::find_if( regular_commands.begin(), regular_commands.end(), [command](Handler::CommandHandler const &handler) { return handler.command == command; }); if (itor != regular_commands.end()) { return crow::response{itor->exec(arguments, session)}; } return crow::response{ Response::simple_response("No such command!", "null", false)}; }); app.port(18080).multithreaded().run(); std::cout << "Stopped successfully" << std::endl; }