diff options
| author | ilotterytea <iltsu@alright.party> | 2024-05-05 16:24:50 +0500 |
|---|---|---|
| committer | ilotterytea <iltsu@alright.party> | 2024-05-05 16:24:50 +0500 |
| commit | 8d0c303642c6a80e6f927c70914b3c75ac015f42 (patch) | |
| tree | a0d91db7a1053e59f03d404602f16e82977122d0 /src | |
| parent | 9fec4b1bcbf3d39cd314d4010d148635cff00793 (diff) | |
feat: handle response exception
Diffstat (limited to 'src')
| -rw-r--r-- | src/handlers.cpp | 39 |
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); } } } |
