diff options
| author | ilotterytea <iltsu@alright.party> | 2024-04-30 23:03:27 +0500 |
|---|---|---|
| committer | ilotterytea <iltsu@alright.party> | 2024-04-30 23:03:27 +0500 |
| commit | 2a572ec58204a408dc4df34ab15037b3a28410e7 (patch) | |
| tree | b81b2172810993fe7467ce61025366a84f55c898 /src | |
| parent | a47294d563c940e1423791eaa5f4e0bfe6b9dae1 (diff) | |
feat: get formatted line via request
Diffstat (limited to 'src')
| -rw-r--r-- | src/localization/localization.cpp | 33 | ||||
| -rw-r--r-- | src/localization/localization.hpp | 9 |
2 files changed, 38 insertions, 4 deletions
diff --git a/src/localization/localization.cpp b/src/localization/localization.cpp index 82473fd..9ac714f 100644 --- a/src/localization/localization.cpp +++ b/src/localization/localization.cpp @@ -3,6 +3,7 @@ #include <algorithm> #include <filesystem> #include <fstream> +#include <map> #include <nlohmann/json.hpp> #include <optional> #include <string> @@ -51,7 +52,7 @@ namespace bot { } std::optional<std::string> Localization::get_localized_line( - const std::string &locale_id, const LineId &line_id) { + const std::string &locale_id, const LineId &line_id) const { auto locale_it = std::find_if(this->localizations.begin(), this->localizations.end(), [&](const auto &x) { return x.first == locale_id; }); @@ -73,7 +74,7 @@ namespace bot { std::optional<std::string> Localization::get_formatted_line( const std::string &locale_id, const LineId &line_id, - const std::vector<std::string> &args) { + const std::vector<std::string> &args) const { std::optional<std::string> o_line = this->get_localized_line(locale_id, line_id); @@ -99,5 +100,33 @@ namespace bot { return line; } + std::optional<std::string> Localization::get_formatted_line( + const command::Request &request, const LineId &line_id, + const std::vector<std::string> &args) const { + std::optional<std::string> o_line = this->get_formatted_line( + request.channel_preferences.get_locale(), line_id, args); + + if (!o_line.has_value()) { + return std::nullopt; + } + + std::string line = o_line.value(); + + std::map<std::string, std::string> token_map = { + {"{sender.alias_name}", request.user.get_alias_name()}, + {"{source.alias_name}", request.channel.get_alias_name()}, + }; + + for (const auto &pair : token_map) { + int pos = line.find(pair.first); + + while (pos != std::string::npos) { + line.replace(pos, pair.first.length(), pair.second); + pos = line.find(pair.first, pos + pair.second.length()); + } + } + + return line; + } } } diff --git a/src/localization/localization.hpp b/src/localization/localization.hpp index d1ee2af..4626c68 100644 --- a/src/localization/localization.hpp +++ b/src/localization/localization.hpp @@ -5,6 +5,7 @@ #include <unordered_map> #include <vector> +#include "../commands/request.hpp" #include "line_id.hpp" namespace bot { @@ -15,11 +16,15 @@ namespace bot { ~Localization() = default; std::optional<std::string> get_localized_line( - const std::string &locale_id, const LineId &line_id); + const std::string &locale_id, const LineId &line_id) const; std::optional<std::string> get_formatted_line( const std::string &locale_id, const LineId &line_id, - const std::vector<std::string> &args); + const std::vector<std::string> &args) const; + + std::optional<std::string> get_formatted_line( + const command::Request &request, const LineId &line_id, + const std::vector<std::string> &args) const; private: std::unordered_map<LineId, std::string> load_from_file( |
