summaryrefslogtreecommitdiff
path: root/src/handlers.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/handlers.cpp')
-rw-r--r--src/handlers.cpp43
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) {
+ }
+ }
+ }
+ }
+}