From d1793df1eda463b10107d41785ad1d7f055ed476 Mon Sep 17 00:00:00 2001 From: ilotterytea Date: Sat, 18 May 2024 14:48:12 +0500 Subject: upd: moved the bot part to a relative subfolder --- bot/src/config.cpp | 84 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 84 insertions(+) create mode 100644 bot/src/config.cpp (limited to 'bot/src/config.cpp') diff --git a/bot/src/config.cpp b/bot/src/config.cpp new file mode 100644 index 0000000..ec55913 --- /dev/null +++ b/bot/src/config.cpp @@ -0,0 +1,84 @@ +#include "config.hpp" + +#include +#include +#include +#include +#include + +#include "logger.hpp" + +namespace bot { + std::optional parse_configuration_from_file( + const std::string &file_path) { + std::ifstream ifs(file_path); + + if (!ifs.is_open()) { + log::error("Configuration", "Failed to open the file at " + file_path); + return std::nullopt; + } + + Configuration cfg; + TwitchCredentialsConfiguration ttv_crd_cfg; + DatabaseConfiguration db_cfg; + CommandConfiguration cmd_cfg; + OwnerConfiguration owner_cfg; + UrlConfiguration url_cfg; + + std::string line; + while (std::getline(ifs, line, '\n')) { + std::istringstream iss(line); + std::string key; + std::string value; + + std::getline(iss, key, '='); + std::getline(iss, value); + + for (char &c : key) { + c = tolower(c); + } + + if (key == "twitch_credentials.client_id") { + ttv_crd_cfg.client_id = value; + } else if (key == "twitch_credentials.token") { + ttv_crd_cfg.token = value; + } else if (key == "db_name") { + db_cfg.name = value; + } else if (key == "db_user") { + db_cfg.user = value; + } else if (key == "db_password") { + db_cfg.password = value; + } else if (key == "db_host") { + db_cfg.host = value; + } else if (key == "db_port") { + db_cfg.port = value; + } + + else if (key == "commands.join_allowed") { + cmd_cfg.join_allowed = std::stoi(value); + } else if (key == "commands.join_allow_from_other_chats") { + cmd_cfg.join_allow_from_other_chats = std::stoi(value); + } + + else if (key == "owner.name") { + owner_cfg.name = value; + } else if (key == "owner.id") { + owner_cfg.id = std::stoi(value); + } + + else if (key == "url.help") { + url_cfg.help = value; + } + } + + cfg.url = url_cfg; + cfg.owner = owner_cfg; + cfg.commands = cmd_cfg; + cfg.twitch_credentials = ttv_crd_cfg; + cfg.database = db_cfg; + + log::info("Configuration", + "Successfully loaded the file from '" + file_path + "'"); + return cfg; + } +} -- cgit v1.2.3