#include <142bot/modules.hpp> #include <142bot/util.hpp> #include #include #include class StoplightModule: public Module { std::string stoplightBaseUrl; public: StoplightModule(Bot* creator, ModuleLoader* ml): Module(creator,ml) { ml->attach({I_OnSlashCommand}, this); auto id = creator->cfg.value("application_id", ""); dpp::slashcommand stoplight("stoplight", "Control the 142 stop light", creator->core->me.id); stoplight.add_option( /* Stop subcommand*/ dpp::command_option(dpp::co_sub_command, "stop", "Stops the stoplight") ); stoplight.add_option( /* start subcommand */ dpp::command_option(dpp::co_sub_command, "start", "Starts the stoplight") ); stoplight.add_option( /* shots */ dpp::command_option(dpp::co_sub_command, "shots", "Triggers shots alarm subroutine") .add_option(dpp::command_option(dpp::co_integer, "countdowntime", "Time to count down for", true)) .add_option(dpp::command_option(dpp::co_integer, "gotime", "Time to shots for", true)) ); // register command creator->core->guild_command_create(stoplight, creator->cfg["main_guild"]); creator->core->log(dpp::ll_info, "Registered stoplight"); this->stoplightBaseUrl = creator->cfg["stoplight_base"]; } virtual std::string version() { return "0.1.0"; } virtual std::string description() { return "Stoplight control"; } bool OnSlashCommand(const dpp::slashcommand_t &event) { if (event.command.get_command_name() == "stoplight") { dpp::command_interaction cmd_data = event.command.get_command_interaction(); auto subcommand = cmd_data.options[0]; this->bot->core->log(dpp::ll_debug, fmt::format("Got subcommand: {}", subcommand.name)); if (subcommand.name == "start") { bot->core->log(dpp::ll_debug, "Attempting to start stoplight"); cpr::Response r = cpr::Get(cpr::Url(fmt::format("{}/start", this->stoplightBaseUrl))); if (r.status_code != 200) { bot->core->log(dpp::ll_error, r.text); throw std::exception(); } event.reply(dpp::message("Started stoplight")); } else if (subcommand.name == "stop") { bot->core->log(dpp::ll_debug, "Attempting to stop stoplight"); cpr::Response r = cpr::Get(cpr::Url(fmt::format("{}/stop", this->stoplightBaseUrl))); if (r.status_code != 200) { bot->core->log(dpp::ll_error, r.text); throw std::exception(); } event.reply(dpp::message("Stopped stoplight")); } } return true; } }; ENTRYPOINT(StoplightModule)