diff options
| author | ilotterytea <iltsu@alright.party> | 2024-04-21 18:00:16 +0500 |
|---|---|---|
| committer | ilotterytea <iltsu@alright.party> | 2024-04-21 18:00:16 +0500 |
| commit | 20911c0cfbe608cc6188cfa27e4f953632a3ef29 (patch) | |
| tree | 29410091d1c03e1977220fd43d9b7757df73f2c0 /src/handlers.cpp | |
| parent | e72ff42203f59b0dc39b9f65f79716a4f61bacac (diff) | |
feat: handler for chat messages
Diffstat (limited to 'src/handlers.cpp')
| -rw-r--r-- | src/handlers.cpp | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/src/handlers.cpp b/src/handlers.cpp new file mode 100644 index 0000000..b483abd --- /dev/null +++ b/src/handlers.cpp @@ -0,0 +1,43 @@ +#include "handlers.hpp" + +#include <optional> +#include <variant> +#include <vector> + +#include "bundle.hpp" +#include "commands/command.hpp" +#include "commands/request.hpp" +#include "commands/request_util.hpp" +#include "irc/message.hpp" + +namespace bot::handlers { + void handle_private_message( + const InstanceBundle &bundle, + const command::CommandLoader &command_loader, + const irc::Message<irc::MessageType::Privmsg> &message) { + std::optional<command::Request> request = + command::generate_request(command_loader, message); + + if (request.has_value()) { + auto o_response = command_loader.run(bundle, request.value()); + + if (o_response.has_value()) { + auto response = o_response.value(); + + try { + auto str = std::get<std::string>(response); + bundle.irc_client.say(message.source.login, str); + } catch (const std::exception &e) { + } + + try { + auto strs = std::get<std::vector<std::string>>(response); + for (const std::string &str : strs) { + bundle.irc_client.say(message.source.login, str); + } + } catch (const std::exception &e) { + } + } + } + } +} |
