From 6985448eb9b03a317a8d33374f79bb0e483ea87c Mon Sep 17 00:00:00 2001 From: ouwou <26526779+ouwou@users.noreply.github.com> Date: Fri, 1 Jan 2021 02:39:07 -0500 Subject: display replies --- discord/discord.cpp | 14 +++++++++++--- discord/discord.hpp | 2 +- discord/message.cpp | 6 ++++++ discord/message.hpp | 1 + discord/store.cpp | 8 ++++++++ 5 files changed, 27 insertions(+), 4 deletions(-) (limited to 'discord') diff --git a/discord/discord.cpp b/discord/discord.cpp index 63d00c1..129009f 100644 --- a/discord/discord.cpp +++ b/discord/discord.cpp @@ -120,7 +120,7 @@ void DiscordClient::FetchMessagesInChannel(Snowflake id, std::functionGuildID.has_value()) + msg.GuildID = *chan->GuildID; + m_store.SetMessage(msg.ID, msg); m_store.SetUser(msg.Author.ID, msg.Author); if (msg.Reactions.has_value()) @@ -1058,6 +1062,10 @@ void DiscordClient::StoreMessageData(const Message &msg) { for (const auto &user : msg.Mentions) m_store.SetUser(user.ID, user); + + if (msg.ReferencedMessage.has_value() && msg.MessageReference.has_value() && msg.MessageReference->ChannelID.has_value()) + if (msg.ReferencedMessage.value() != nullptr) + StoreMessageData(**msg.ReferencedMessage); } void DiscordClient::LoadEventMap() { diff --git a/discord/discord.hpp b/discord/discord.hpp index de8b748..b404291 100644 --- a/discord/discord.hpp +++ b/discord/discord.hpp @@ -156,7 +156,7 @@ private: bool CheckCode(const cpr::Response &r); - void StoreMessageData(const Message &msg); + void StoreMessageData(Message &msg); std::string m_token; diff --git a/discord/message.cpp b/discord/message.cpp index d3ba762..c6457e5 100644 --- a/discord/message.cpp +++ b/discord/message.cpp @@ -211,6 +211,12 @@ void from_json(const nlohmann::json &j, Message &m) { JS_O("message_reference", m.MessageReference); JS_O("flags", m.Flags); JS_O("stickers", m.Stickers); + if (j.contains("referenced_message")) { + if (!j.at("referenced_message").is_null()) { + m.ReferencedMessage = std::make_shared(j.at("referenced_message").get()); + } else + m.ReferencedMessage = nullptr; + } } void Message::from_json_edited(const nlohmann::json &j) { diff --git a/discord/message.hpp b/discord/message.hpp index 5968c99..bba6115 100644 --- a/discord/message.hpp +++ b/discord/message.hpp @@ -188,6 +188,7 @@ struct Message { std::optional MessageReference; std::optional Flags = MessageFlags::NONE; std::optional> Stickers; + std::optional> ReferencedMessage; // has_value && null means deleted friend void from_json(const nlohmann::json &j, Message &m); void from_json_edited(const nlohmann::json &j); // for MESSAGE_UPDATE diff --git a/discord/store.cpp b/discord/store.cpp index 07e6a32..927948f 100644 --- a/discord/store.cpp +++ b/discord/store.cpp @@ -496,6 +496,14 @@ std::optional Store::GetMessage(Snowflake id) const { Reset(m_get_msg_stmt); + if (ret.MessageReference.has_value() && ret.MessageReference->MessageID.has_value()) { + auto ref = GetMessage(*ret.MessageReference->MessageID); + if (ref.has_value()) + ret.ReferencedMessage = std::make_unique(std::move(*ref)); + else + ret.ReferencedMessage = nullptr; + } + return std::optional(std::move(ret)); } -- cgit v1.2.3