diff options
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) { + } + } + } + } +} |
