summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorilotterytea <iltsu@alright.party>2024-04-30 23:03:27 +0500
committerilotterytea <iltsu@alright.party>2024-04-30 23:03:27 +0500
commit2a572ec58204a408dc4df34ab15037b3a28410e7 (patch)
treeb81b2172810993fe7467ce61025366a84f55c898 /src
parenta47294d563c940e1423791eaa5f4e0bfe6b9dae1 (diff)
feat: get formatted line via request
Diffstat (limited to 'src')
-rw-r--r--src/localization/localization.cpp33
-rw-r--r--src/localization/localization.hpp9
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(