diff options
Diffstat (limited to 'modules/stoplight/stoplight.cpp')
-rw-r--r-- | modules/stoplight/stoplight.cpp | 80 |
1 files changed, 80 insertions, 0 deletions
diff --git a/modules/stoplight/stoplight.cpp b/modules/stoplight/stoplight.cpp new file mode 100644 index 0000000..8740a12 --- /dev/null +++ b/modules/stoplight/stoplight.cpp @@ -0,0 +1,80 @@ +#include <142bot/modules.hpp> +#include <142bot/util.hpp> +#include <dpp/dpp.h> +#include <cpr/cpr.h> +#include <fmt/format.h> + +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)
\ No newline at end of file |