From c0509932f4af57e0158f0b684adbe9fb84945db1 Mon Sep 17 00:00:00 2001 From: niansa Date: Mon, 9 Jan 2023 00:39:43 +0100 Subject: [PATCH] Seperate database files for each session --- main.cpp | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/main.cpp b/main.cpp index 6362fa4..cd363d3 100644 --- a/main.cpp +++ b/main.cpp @@ -97,6 +97,13 @@ static inline std::optional GetJSONAsOptionalString(const Json::Val static inline std::optional GetJSONAsOptionalInt(const Json::Value& data) { return data.isString()?data.asInt():std::optional(); } +static void reverseString(std::string& str) { + int len = str.length(); + for (int i = 0; i < len / 2; i++) { + std::swap(str[i], str[len - i - 1]); + } +} + class MyClient final : public Discord::Client { @@ -105,10 +112,16 @@ class MyClient final : public Discord::Client { Json::Value *me; + static inline std::string getDatabaseFileName() { + auto time_str = std::to_string(time(nullptr)); + reverseString(time_str); + return "log-"+time_str+".sqlite3"; + } + public: MyClient(boost::asio::io_service& io, const ChatFuse::Discord::Settings& settings = {}) : ChatFuse::Discord::Client(io, settings), - db("log.sqlite3") + db(getDatabaseFileName()) { // Improve database performance db << "pragma journal_mode = WAL;"; @@ -424,9 +437,19 @@ protected: virtual boost::asio::awaitable intentHandler(std::string intent, Json::Value data) override { std::ofstream(intent+".json") << data; if (intent == "READY") [[unlikely]] { + // Get own user const auto& user = cache.store(std::move(data["user"])).data; logger.log(Loglevel::info, "Connected to Discord as: "+user["username"].asString()+'#'+user["discriminator"].asString()); + // Get guilds co_await fetchAllGuilds(std::move(data["guilds"])); + // Get users + auto& users = data["users"]; + if (users.isArray()) { + for (const auto& user_data : users) { + insertUserUpdate(user_data, true); + cache.store(std::move(user_data)); + } + } } else if (intent == "GUILD_CREATE") [[unlikely]] { fixGuild(data);