aboutsummaryrefslogtreecommitdiff
path: root/modules/stoplight/stoplight.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'modules/stoplight/stoplight.cpp')
-rw-r--r--modules/stoplight/stoplight.cpp80
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