aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCara Salter <cara@devcara.com>2023-10-07 21:16:00 -0400
committerCara Salter <cara@devcara.com>2023-10-07 21:16:00 -0400
commit5974e8229e94899840e2cc38787c878a423f68e6 (patch)
tree64472884c66844e75000a5c26878644756600d3c
parent201fd6765d1e33a541d9d1dc87969dda9aea1113 (diff)
download142bot-5974e8229e94899840e2cc38787c878a423f68e6.tar.gz
142bot-5974e8229e94899840e2cc38787c878a423f68e6.zip
Add basic stoplight control
-rw-r--r--config.example.json3
-rw-r--r--modules/stoplight/main.cpp80
2 files changed, 82 insertions, 1 deletions
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 <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