diff options
author | ouwou <26526779+ouwou@users.noreply.github.com> | 2021-08-02 02:00:03 -0400 |
---|---|---|
committer | ouwou <26526779+ouwou@users.noreply.github.com> | 2021-08-02 02:00:03 -0400 |
commit | a19d21427206bcd5ab5cc0af273a05f3fe827720 (patch) | |
tree | 5cf31225cbe83450cd07619d546048a9ffeff5ca /discord | |
parent | 06f85c3a2de5af9e0d63ff86a8e411030d1ee45d (diff) | |
download | abaddon-portaudio-a19d21427206bcd5ab5cc0af273a05f3fe827720.tar.gz abaddon-portaudio-a19d21427206bcd5ab5cc0af273a05f3fe827720.zip |
basic THREAD_MEMBERS_UPDATE handling for updating channel list
Diffstat (limited to 'discord')
-rw-r--r-- | discord/discord.cpp | 15 | ||||
-rw-r--r-- | discord/discord.hpp | 4 | ||||
-rw-r--r-- | discord/objects.cpp | 8 | ||||
-rw-r--r-- | discord/objects.hpp | 10 |
4 files changed, 36 insertions, 1 deletions
diff --git a/discord/discord.cpp b/discord/discord.cpp index dcab6be..82d2131 100644 --- a/discord/discord.cpp +++ b/discord/discord.cpp @@ -764,7 +764,7 @@ void DiscordClient::Unpin(Snowflake channel_id, Snowflake message_id, sigc::slot // i dont know if the location parameter is necessary at all but discord's thread implementation is extremely strange // so its here just in case void DiscordClient::LeaveThread(Snowflake channel_id, const std::string &location, sigc::slot<void(DiscordError code)> callback) { - m_http.MakeDELETE("/channels/" + std::to_string(channel_id) + "/thread-members/@me?location=" + location, [this, callback](const http::response_type& response) { + m_http.MakeDELETE("/channels/" + std::to_string(channel_id) + "/thread-members/@me?location=" + location, [this, callback](const http::response_type &response) { if (CheckCode(response, 204)) callback(DiscordError::NONE); else @@ -1176,6 +1176,9 @@ void DiscordClient::HandleGatewayMessage(std::string str) { case GatewayEvent::THREAD_LIST_SYNC: { HandleGatewayThreadListSync(m); } break; + case GatewayEvent::THREAD_MEMBERS_UPDATE: { + HandleGatewayThreadMembersUpdate(m); + } break; } } break; default: @@ -1680,6 +1683,11 @@ void DiscordClient::HandleGatewayThreadListSync(const GatewayMessage &msg) { m_signal_thread_list_sync.emit(data); } +void DiscordClient::HandleGatewayThreadMembersUpdate(const GatewayMessage &msg) { + ThreadMembersUpdateData data = msg.Data; + m_signal_thread_members_update.emit(data); +} + void DiscordClient::HandleGatewayReadySupplemental(const GatewayMessage &msg) { ReadySupplementalData data = msg.Data; for (const auto &p : data.MergedPresences.Friends) { @@ -2045,6 +2053,7 @@ void DiscordClient::LoadEventMap() { m_event_map["THREAD_CREATE"] = GatewayEvent::THREAD_CREATE; 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; } DiscordClient::type_signal_gateway_ready DiscordClient::signal_gateway_ready() { @@ -2195,6 +2204,10 @@ DiscordClient::type_signal_thread_list_sync DiscordClient::signal_thread_list_sy return m_signal_thread_list_sync; } +DiscordClient::type_signal_thread_members_update DiscordClient::signal_thread_members_update() { + return m_signal_thread_members_update; +} + DiscordClient::type_signal_message_sent DiscordClient::signal_message_sent() { return m_signal_message_sent; } diff --git a/discord/discord.hpp b/discord/discord.hpp index 616941b..619a898 100644 --- a/discord/discord.hpp +++ b/discord/discord.hpp @@ -240,6 +240,7 @@ private: void HandleGatewayThreadCreate(const GatewayMessage &msg); void HandleGatewayThreadDelete(const GatewayMessage &msg); void HandleGatewayThreadListSync(const GatewayMessage &msg); + void HandleGatewayThreadMembersUpdate(const GatewayMessage &msg); void HandleGatewayReadySupplemental(const GatewayMessage &msg); void HandleGatewayReconnect(const GatewayMessage &msg); void HandleGatewayInvalidSession(const GatewayMessage &msg); @@ -336,6 +337,7 @@ public: typedef sigc::signal<void, ChannelData> type_signal_thread_create; typedef sigc::signal<void, ThreadDeleteData> type_signal_thread_delete; typedef sigc::signal<void, ThreadListSyncData> type_signal_thread_list_sync; + typedef sigc::signal<void, ThreadMembersUpdateData> type_signal_thread_members_update; typedef sigc::signal<void, Message> type_signal_message_unpinned; // not a real event typedef sigc::signal<void, Message> type_signal_message_pinned; // not a real event either typedef sigc::signal<void, Message> type_signal_message_sent; @@ -378,6 +380,7 @@ public: type_signal_thread_create signal_thread_create(); type_signal_thread_delete signal_thread_delete(); type_signal_thread_list_sync signal_thread_list_sync(); + type_signal_thread_members_update signal_thread_members_update(); type_signal_message_sent signal_message_sent(); type_signal_message_send_fail signal_message_send_fail(); type_signal_disconnected signal_disconnected(); @@ -419,6 +422,7 @@ protected: type_signal_thread_create m_signal_thread_create; type_signal_thread_delete m_signal_thread_delete; type_signal_thread_list_sync m_signal_thread_list_sync; + type_signal_thread_members_update m_signal_thread_members_update; type_signal_message_sent m_signal_message_sent; type_signal_message_send_fail m_signal_message_send_fail; type_signal_disconnected m_signal_disconnected; diff --git a/discord/objects.cpp b/discord/objects.cpp index e7b421f..41164a4 100644 --- a/discord/objects.cpp +++ b/discord/objects.cpp @@ -489,3 +489,11 @@ void from_json(const nlohmann::json &j, ThreadListSyncData &m) { JS_D("threads", m.Threads); JS_D("guild_id", m.GuildID); } + +void from_json(const nlohmann::json &j, ThreadMembersUpdateData &m) { + JS_D("id", m.ID); + JS_D("guild_id", m.GuildID); + JS_D("member_count", m.MemberCount); + JS_O("added_members", m.AddedMembers); + JS_O("removed_member_ids", m.RemovedMemberIDs); +} diff --git a/discord/objects.hpp b/discord/objects.hpp index 7493404..889671f 100644 --- a/discord/objects.hpp +++ b/discord/objects.hpp @@ -690,3 +690,13 @@ struct ThreadListSyncData { friend void from_json(const nlohmann::json &j, ThreadListSyncData &m); }; + +struct ThreadMembersUpdateData { + Snowflake ID; + Snowflake GuildID; + int MemberCount; + std::optional<std::vector<ThreadMemberObject>> AddedMembers; + std::optional<std::vector<Snowflake>> RemovedMemberIDs; + + friend void from_json(const nlohmann::json &j, ThreadMembersUpdateData &m); +}; |