summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorilotterytea <iltsu@alright.party>2024-05-05 16:24:50 +0500
committerilotterytea <iltsu@alright.party>2024-05-05 16:24:50 +0500
commit8d0c303642c6a80e6f927c70914b3c75ac015f42 (patch)
treea0d91db7a1053e59f03d404602f16e82977122d0 /src
parent9fec4b1bcbf3d39cd314d4010d148635cff00793 (diff)
feat: handle response exception
Diffstat (limited to 'src')
-rw-r--r--src/handlers.cpp39
1 files changed, 24 insertions, 15 deletions
diff --git a/src/handlers.cpp b/src/handlers.cpp
index c3f12d3..0eec2b0 100644
--- a/src/handlers.cpp
+++ b/src/handlers.cpp
@@ -1,8 +1,8 @@
#include "handlers.hpp"
+#include <exception>
#include <optional>
#include <pqxx/pqxx>
-#include <variant>
#include <vector>
#include "bundle.hpp"
@@ -10,6 +10,7 @@
#include "commands/request.hpp"
#include "commands/request_util.hpp"
#include "irc/message.hpp"
+#include "localization/line_id.hpp"
namespace bot::handlers {
void handle_private_message(
@@ -21,24 +22,32 @@ namespace bot::handlers {
command::generate_request(command_loader, message, conn);
if (request.has_value()) {
- auto o_response = command_loader.run(bundle, request.value());
+ try {
+ auto 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) {
+ if (response.has_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) {
}
- } catch (const std::exception &e) {
}
+ } catch (const std::exception &e) {
+ std::string line =
+ bundle.localization
+ .get_formatted_line(request.value(), loc::LineId::ErrorTemplate,
+ {e.what()})
+ .value();
+
+ bundle.irc_client.say(message.source.login, line);
}
}
}