From 8c391504d160909753e6c6ee3186e0166b44c475 Mon Sep 17 00:00:00 2001 From: ilotterytea Date: Sun, 21 Apr 2024 17:20:38 +0500 Subject: feat: use Request instead of Message + util for creating requests --- src/commands/request_util.cpp | 58 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 58 insertions(+) create mode 100644 src/commands/request_util.cpp (limited to 'src/commands/request_util.cpp') diff --git a/src/commands/request_util.cpp b/src/commands/request_util.cpp new file mode 100644 index 0000000..af17623 --- /dev/null +++ b/src/commands/request_util.cpp @@ -0,0 +1,58 @@ +#include "request_util.hpp" + +#include + +#include "../constants.hpp" +#include "../irc/message.hpp" +#include "command.hpp" +#include "request.hpp" + +namespace bot::command { + std::optional generate_request( + const command::CommandLoader &command_loader, + const irc::Message &irc_message) { + std::vector parts = + utils::string::split_text(irc_message.message, ' '); + + std::string command_id = parts[0]; + + if (command_id.substr(0, DEFAULT_PREFIX.length()) != DEFAULT_PREFIX) { + return std::nullopt; + } + + command_id = + command_id.substr(DEFAULT_PREFIX.length(), command_id.length()); + + bool found = std::any_of( + command_loader.get_commands().begin(), + command_loader.get_commands().end(), + [&](const auto &command) { return command->get_name() == command_id; }); + + if (!found) { + return std::nullopt; + } + + parts.erase(parts.begin()); + + if (parts.empty()) { + Request req{command_id, std::nullopt, std::nullopt, irc_message}; + + return req; + } + + std::optional subcommand_id = parts[0]; + if (subcommand_id->empty()) { + subcommand_id = std::nullopt; + } + parts.erase(parts.begin()); + + std::optional message = utils::string::join_vector(parts, ' '); + + if (message->empty()) { + message = std::nullopt; + } + + Request req{command_id, subcommand_id, message, irc_message}; + return req; + } +} -- cgit v1.2.3