From 9f3b2ea3b4391f4cbbe28463b917936c639491ec Mon Sep 17 00:00:00 2001 From: ilotterytea Date: Sun, 21 Apr 2024 13:20:09 +0500 Subject: feat: request --- src/commands/request.cpp | 62 ++++++++++++++++++++++++++++++++++++++++++++++++ src/commands/request.hpp | 43 +++++++++++++++++++++++++++++++++ 2 files changed, 105 insertions(+) create mode 100644 src/commands/request.cpp create mode 100644 src/commands/request.hpp diff --git a/src/commands/request.cpp b/src/commands/request.cpp new file mode 100644 index 0000000..72b04c7 --- /dev/null +++ b/src/commands/request.cpp @@ -0,0 +1,62 @@ +#include "request.hpp" + +#include +#include +#include +#include + +#include "../constants.hpp" + +namespace bot { + namespace command { + bool Request::fill_request() { + 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 false; + } + + command_id = + command_id.substr(DEFAULT_PREFIX.length(), command_id.length()); + + bool found = std::any_of(this->command_loader.get_commands().begin(), + this->command_loader.get_commands().end(), + [&](const auto &command) { + return command->get_name() == command_id; + }); + + if (!found) { + return false; + } + + this->command_id = command_id; + + parts.erase(parts.begin()); + + if (parts.empty()) { + return true; + } + + std::string subcommand_id = parts[0]; + if (subcommand_id.empty()) { + this->subcommand_id = std::nullopt; + } else { + this->subcommand_id = subcommand_id; + } + parts.erase(parts.begin()); + + std::string message = utils::string::join_vector(parts, ' '); + + if (message.empty()) { + this->message = std::nullopt; + } else { + this->message = message; + } + + return true; + } + } +} diff --git a/src/commands/request.hpp b/src/commands/request.hpp new file mode 100644 index 0000000..71f2f04 --- /dev/null +++ b/src/commands/request.hpp @@ -0,0 +1,43 @@ +#pragma once + +#include +#include + +#include "../irc/message.hpp" +#include "command.hpp" + +namespace bot { + namespace command { + class Request { + public: + Request(const command::CommandLoader &command_loader, + const irc::Message &irc_message) + : irc_message(irc_message), command_loader(command_loader){}; + ~Request() = default; + + bool fill_request(); + + const std::string &get_command_id() const { return this->command_id; }; + const std::optional &get_subcommand_id() const { + return this->subcommand_id; + }; + const std::optional &get_message() const { + return this->message; + }; + + const irc::Message &get_irc_message() const { + return this->irc_message; + }; + + private: + std::string command_id; + std::optional subcommand_id; + std::optional message; + + const irc::Message &irc_message; + const command::CommandLoader &command_loader; + }; + + } + +} -- cgit v1.2.3