From 613bb2b7c6065035bba5eee606249e413dcc5149 Mon Sep 17 00:00:00 2001 From: ouwou <26526779+ouwou@users.noreply.github.com> Date: Sun, 15 Aug 2021 00:25:00 -0400 Subject: [PATCH] handle thread create via thread_member_update --- discord/discord.cpp | 13 ++++++++++++- discord/discord.hpp | 1 + discord/objects.cpp | 4 ++++ discord/objects.hpp | 6 ++++++ 4 files changed, 23 insertions(+), 1 deletion(-) diff --git a/discord/discord.cpp b/discord/discord.cpp index 7dfacc0..2e12d41 100644 --- a/discord/discord.cpp +++ b/discord/discord.cpp @@ -1201,6 +1201,9 @@ void DiscordClient::HandleGatewayMessage(std::string str) { case GatewayEvent::THREAD_MEMBERS_UPDATE: { HandleGatewayThreadMembersUpdate(m); } break; + case GatewayEvent::THREAD_MEMBER_UPDATE: { + HandleGatewayThreadMemberUpdate(m); + } break; } } break; default: @@ -1693,7 +1696,7 @@ void DiscordClient::HandleGatewayThreadCreate(const GatewayMessage &msg) { void DiscordClient::HandleGatewayThreadDelete(const GatewayMessage &msg) { ThreadDeleteData data = msg.Data; - // m_store.ClearChannel? + m_store.ClearChannel(data.ID); m_signal_thread_delete.emit(data); } @@ -1723,6 +1726,13 @@ void DiscordClient::HandleGatewayThreadMembersUpdate(const GatewayMessage &msg) m_signal_thread_members_update.emit(data); } +void DiscordClient::HandleGatewayThreadMemberUpdate(const GatewayMessage &msg) { + ThreadMemberUpdateData data = msg.Data; + m_joined_threads.insert(*data.Member.ThreadID); + if (*data.Member.UserID == GetUserData().ID) + m_signal_added_to_thread.emit(*data.Member.ThreadID); +} + void DiscordClient::HandleGatewayReadySupplemental(const GatewayMessage &msg) { ReadySupplementalData data = msg.Data; for (const auto &p : data.MergedPresences.Friends) { @@ -2089,6 +2099,7 @@ void DiscordClient::LoadEventMap() { m_event_map["THREAD_DELETE"] = GatewayEvent::THREAD_DELETE; m_event_map["THREAD_LIST_SYNC"] = GatewayEvent::THREAD_LIST_SYNC; m_event_map["THREAD_MEMBERS_UPDATE"] = GatewayEvent::THREAD_MEMBERS_UPDATE; + m_event_map["THREAD_MEMBER_UPDATE"] = GatewayEvent::THREAD_MEMBER_UPDATE; } DiscordClient::type_signal_gateway_ready DiscordClient::signal_gateway_ready() { diff --git a/discord/discord.hpp b/discord/discord.hpp index f001461..952a5c4 100644 --- a/discord/discord.hpp +++ b/discord/discord.hpp @@ -244,6 +244,7 @@ private: void HandleGatewayThreadDelete(const GatewayMessage &msg); void HandleGatewayThreadListSync(const GatewayMessage &msg); void HandleGatewayThreadMembersUpdate(const GatewayMessage &msg); + void HandleGatewayThreadMemberUpdate(const GatewayMessage &msg); void HandleGatewayReadySupplemental(const GatewayMessage &msg); void HandleGatewayReconnect(const GatewayMessage &msg); void HandleGatewayInvalidSession(const GatewayMessage &msg); diff --git a/discord/objects.cpp b/discord/objects.cpp index 723ca09..77d5286 100644 --- a/discord/objects.cpp +++ b/discord/objects.cpp @@ -503,3 +503,7 @@ void from_json(const nlohmann::json &j, ArchivedThreadsResponseData &m) { JS_D("members", m.Members); JS_D("has_more", m.HasMore); } + +void from_json(const nlohmann::json &j, ThreadMemberUpdateData &m) { + m.Member = j; +} diff --git a/discord/objects.hpp b/discord/objects.hpp index 9046162..4e7de81 100644 --- a/discord/objects.hpp +++ b/discord/objects.hpp @@ -708,3 +708,9 @@ struct ArchivedThreadsResponseData { friend void from_json(const nlohmann::json &j, ArchivedThreadsResponseData &m); }; + +struct ThreadMemberUpdateData { + ThreadMemberObject Member; + + friend void from_json(const nlohmann::json &j, ThreadMemberUpdateData &m); +};