From 108853c190f7acec294019592fc1978393d3fd7d Mon Sep 17 00:00:00 2001 From: niansa Date: Sun, 8 Jan 2023 22:21:42 +0100 Subject: [PATCH] Implemented bulk message deletion --- main.cpp | 23 ++++++++++++++--------- 1 file changed, 14 insertions(+), 9 deletions(-) diff --git a/main.cpp b/main.cpp index fd69e2e..9196a66 100644 --- a/main.cpp +++ b/main.cpp @@ -275,8 +275,8 @@ protected: << data["id"].asString() << std::to_string(time(nullptr)) << is_initial << data["name"].asString() << data["owner_id"].asString() << !is_deleted; } - void insertGuildDelete(const Json::Value& data) { - auto cached_data = cache.fetch(data["id"]); + void insertGuildDelete(Discord::Snowflake id) { + auto cached_data = cache.fetch(id); insertGuildUpdate(cached_data, false, true); } @@ -372,6 +372,7 @@ protected: " VALUES (?, ?, ?, ?, ?, ? );" << data["id"].asString() << type << data["channel_id"].asString() << data["author"]["id"].asString() << (type==19?data["referenced_message"]["id"].asString():std::optional()) << std::to_string(time(nullptr)); + if (has_content) insertMessageContent(data, false); } else { db << "UPDATE messages " "SET is_edited = 1, update_timestamp = ? " @@ -380,11 +381,11 @@ protected: if (has_content) insertMessageContent(data, false); } } - void insertMessageDelete(const Json::Value& data) { + void insertMessageDelete(const std::string& id) { db << "UPDATE messages " "SET is_deleted = 1, deletion_timestamp = ? " "WHERE id = ?;" - << std::to_string(time(nullptr)) << data["id"].asString(); + << std::to_string(time(nullptr)) << id; } /* @@ -397,8 +398,8 @@ protected: << std::to_string(time(nullptr)) << is_initial << data["type"].asInt() << GetJSONAsOptionalString(data["name"]) << GetJSONAsOptionalString(data["topic"]) << is_deleted; } - void insertChannelDelete(const Json::Value& data) { - auto cached_data = cache.fetch(data["id"]); + void insertChannelDelete(Discord::Snowflake id) { + auto cached_data = cache.fetch(id); insertChannelUpdate(cached_data, false, true); } @@ -418,14 +419,18 @@ protected: insertGuildUpdate(data, false); cache.store(std::move(data)); } else if (intent == "GUILD_DELETE") [[unlikely]] { - insertGuildDelete(data); + insertGuildDelete(data["id"]); } else if (intent == "MESSAGE_CREATE") [[likely]] { processMessage(std::move(data)); } else if (intent == "MESSAGE_UPDATE") [[likely]] { insertMessageUpdate(data, false); } else if (intent == "MESSAGE_DELETE") { - insertMessageDelete(data); + insertMessageDelete(data["id"].asString()); + } else if (intent == "MESSAGE_DELETE_BULK") { + for (const auto& id : data["ids"]) { + insertMessageDelete(id.asString()); + } } else if (intent == "CHANNEL_CREATE") [[unlikely]] { insertChannelUpdate(data, true); @@ -434,7 +439,7 @@ protected: insertChannelUpdate(data, false); cache.store(std::move(data)); } else if (intent == "CHANNEL_DELETE") [[unlikely]] { - insertChannelDelete(data); + insertChannelDelete(data["id"]); } else if (intent == "GUILD_MEMBER_ADD" || intent == "GUILD_MEMBER_UDATE") [[unlikely]] { auto guild_id = std::move(data["guild_id"]);