summaryrefslogtreecommitdiff
path: root/bot/src
diff options
context:
space:
mode:
authorilotterytea <iltsu@alright.party>2025-04-10 21:58:06 +0500
committerilotterytea <iltsu@alright.party>2025-04-10 21:58:06 +0500
commit5c2cd6d3e293dc524415893cb1b8950193dce3e2 (patch)
tree76205d0047fc041a4b18249da3f348f751ef1eca /bot/src
parentf649ead41180d3fc2c24480c843b0cf4bb636f97 (diff)
feat: l10n libraries
Diffstat (limited to 'bot/src')
-rw-r--r--bot/src/commands/lua.cpp53
1 files changed, 53 insertions, 0 deletions
diff --git a/bot/src/commands/lua.cpp b/bot/src/commands/lua.cpp
index 589fd27..40524dc 100644
--- a/bot/src/commands/lua.cpp
+++ b/bot/src/commands/lua.cpp
@@ -226,11 +226,64 @@ namespace bot::command::lua {
});
}
+ void add_l10n_library(std::shared_ptr<sol::state> state) {
+ state->set_function(
+ "l10n_custom_formatted_line_request",
+ [](const sol::table &request, const sol::table &lines,
+ const std::string &line_id, const sol::table &parameters) {
+ // TODO: use Localization class instead!!!
+
+ // TODO: convert the table to C++ struct for type safety later
+ std::string language = request["channel_preference"]["language"];
+
+ if (!lines[language].valid() || !lines[language][line_id].valid()) {
+ }
+
+ std::string line = lines[language][line_id];
+
+ std::vector<std::string> args;
+
+ for (auto &kv : parameters) {
+ args.push_back(kv.second.as<std::string>());
+ }
+
+ int pos = 0;
+ int index = 0;
+
+ while ((pos = line.find("%s", pos)) != std::string::npos) {
+ line.replace(pos, 2, args[index]);
+ pos += args[index].size();
+ ++index;
+
+ if (index >= args.size()) {
+ break;
+ }
+ }
+
+ std::map<std::string, std::string> token_map = {
+ {"{sender.alias_name}", request["sender"]["alias_name"]},
+ {"{source.alias_name}", request["channel"]["alias_name"]},
+ {"{default.prefix}", DEFAULT_PREFIX}};
+
+ 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;
+ });
+ }
+
void add_base_libraries(std::shared_ptr<sol::state> state) {
add_bot_library(state);
add_time_library(state);
add_json_library(state);
add_net_library(state);
+ add_l10n_library(state);
}
void add_twitch_library(std::shared_ptr<sol::state> state,