/***************************************************************************** * dtranslatebot Discord Translate Bot * Copyright (C) 2023-2024 Syping * * Redistribution and use in source and binary forms, with or without modification, * are permitted provided that the following conditions are met: * * 1. Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * This software is provided as-is, no warranties are given to you, we are not * responsible for anything with use of the software, you are self responsible. *****************************************************************************/ #ifndef SETTINGS_H #define SETTINGS_H #include <cstdint> #include <dpp/snowflake.h> #include <dpp/webhook.h> #include <filesystem> #include <mutex> #include <string> #include <vector> #include "translate_core.h" namespace bot { namespace settings { struct target { std::string target; dpp::webhook webhook; }; struct channel { dpp::snowflake id; std::string source; std::vector<bot::settings::target> targets; }; struct guild { dpp::snowflake id; std::vector<bot::settings::channel> channel; }; struct translate { std::string hostname; uint16_t port; std::string url; bool tls; std::string apiKey; }; class settings { public: void add_channel(const bot::settings::channel &channel, dpp::snowflake guild_id); bool add_target(const bot::settings::target &target, dpp::snowflake guild_id, dpp::snowflake channel_id); void add_translatebot_webhook(dpp::snowflake webhook_id); uint16_t get_avatar_size(); const bot::settings::channel* get_channel(const bot::settings::guild *guild, dpp::snowflake channel_id); const bot::settings::channel* get_channel(dpp::snowflake guild_id, dpp::snowflake channel_id); const bot::settings::guild* get_guild(dpp::snowflake guild_id); const std::vector<std::string> get_preferred_languages(); const std::filesystem::path get_storage_path(); const bot::settings::translate* get_translate(); std::unique_ptr<bot::translate::translator> get_translator(); const std::string get_token(); bool is_translatebot(dpp::snowflake webhook_id); void lock(); bool parse(const std::string &filename); void unlock(); private: uint16_t m_avatarSize; std::recursive_mutex m_mutex; std::vector<bot::settings::guild> m_guilds; std::vector<std::string> m_preflangs; std::filesystem::path m_storagepath; bot::settings::translate m_translate; std::string m_token; std::vector<dpp::snowflake> m_webhookIds; }; } } #endif // SETTINGS_H