From 5974e8229e94899840e2cc38787c878a423f68e6 Mon Sep 17 00:00:00 2001 From: Cara Salter Date: Sat, 7 Oct 2023 21:16:00 -0400 Subject: Add basic stoplight control --- config.example.json | 3 +- modules/stoplight/main.cpp | 80 ++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 82 insertions(+), 1 deletion(-) create mode 100644 modules/stoplight/main.cpp diff --git a/config.example.json b/config.example.json index e184e51..90681f3 100644 --- a/config.example.json +++ b/config.example.json @@ -18,5 +18,6 @@ "id": "changeme" }, "sentry_dsn": "", - "module_path": "./build/" + "module_path": "./build/", + "stoplight_base": "http://stoplight.onefortytwo.life:8000" } \ No newline at end of file diff --git a/modules/stoplight/main.cpp b/modules/stoplight/main.cpp new file mode 100644 index 0000000..8740a12 --- /dev/null +++ b/modules/stoplight/main.cpp @@ -0,0 +1,80 @@ +#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) \ No newline at end of file -- cgit v1.2.3