diff options
| author | ilotterytea <iltsu@alright.party> | 2024-04-21 02:00:21 +0500 |
|---|---|---|
| committer | ilotterytea <iltsu@alright.party> | 2024-04-21 02:00:21 +0500 |
| commit | f2c9182dba4cbd95d7f865efddd45c592f8623bf (patch) | |
| tree | 086249975bc7bcf5ada248b8dc9591a987be4c02 /src | |
| parent | d75a5081c57c06e261b040a39078257a141864dd (diff) | |
feat: run the handler if the message is supported
Diffstat (limited to 'src')
| -rw-r--r-- | src/irc/client.cpp | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/src/irc/client.cpp b/src/irc/client.cpp index 42fd8ac..2d07070 100644 --- a/src/irc/client.cpp +++ b/src/irc/client.cpp @@ -3,8 +3,13 @@ #include <ixwebsocket/IXWebSocketMessage.h> #include <ixwebsocket/IXWebSocketMessageType.h> +#include <algorithm> #include <iostream> +#include <optional> #include <string> +#include <vector> + +#include "message.hpp" using namespace RedpilledBot::IRC; @@ -24,6 +29,35 @@ void Client::run() { switch (msg->type) { case ix::WebSocketMessageType::Message: { std::cout << "Got a message: " << msg->str << std::endl; + + std::vector<std::string> lines = split_text(msg->str, '\n'); + + for (std::string &line : lines) { + line.erase(std::remove_if(line.begin(), line.end(), + [](char c) { + return c == '\n' || c == '\r' || + c == '\t'; + }), + line.end()); + + std::optional<MessageType> type = define_message_type(line); + + if (!type.has_value()) { + break; + } + + MessageType m_type = type.value(); + + if (m_type == MessageType::Privmsg) { + std::optional<Message<MessageType::Privmsg>> message = + parse_message<MessageType::Privmsg>(line); + + if (message.has_value()) { + this->onPrivmsg(message.value()); + } + } + } + break; } case ix::WebSocketMessageType::Open: { |
