From 11358da24e0e73044aed389b1dbbf479808ca036 Mon Sep 17 00:00:00 2001 From: ouwou <26526779+ouwou@users.noreply.github.com> Date: Sun, 28 Feb 2021 01:44:31 -0500 Subject: handle UPDATE in GUILD_MEMBER_LIST_UPDATE --- discord/discord.cpp | 8 +++++++- discord/objects.cpp | 10 ++++++++-- discord/objects.hpp | 7 ++++--- 3 files changed, 19 insertions(+), 6 deletions(-) (limited to 'discord') diff --git a/discord/discord.cpp b/discord/discord.cpp index f0254e3..fbe6549 100644 --- a/discord/discord.cpp +++ b/discord/discord.cpp @@ -1303,7 +1303,7 @@ void DiscordClient::HandleGatewayGuildMemberListUpdate(const GatewayMessage &msg for (const auto &op : data.Ops) { if (op.Op == "SYNC") { has_sync = true; - for (const auto &item : op.Items) { + for (const auto &item : *op.Items) { if (item->Type == "member") { auto member = static_cast(item.get()); m_store.SetUser(member->User.ID, member->User); @@ -1322,6 +1322,12 @@ void DiscordClient::HandleGatewayGuildMemberListUpdate(const GatewayMessage &msg } } } + } else if (op.Op == "UPDATE") { + if (op.OpItem.has_value() && op.OpItem.value()->Type == "member") { + const auto &m = static_cast(op.OpItem.value().get())->GetAsMemberData(); + m_store.SetGuildMember(data.GuildID, m.User->ID, m); + m_signal_guild_member_update.emit(data.GuildID, m.User->ID); // cheeky + } } } diff --git a/discord/objects.cpp b/discord/objects.cpp index 16ae320..af82759 100644 --- a/discord/objects.cpp +++ b/discord/objects.cpp @@ -51,13 +51,19 @@ void from_json(const nlohmann::json &j, GuildMemberListUpdateMessage::MemberItem void from_json(const nlohmann::json &j, GuildMemberListUpdateMessage::OpObject &m) { JS_D("op", m.Op); if (m.Op == "SYNC") { + m.Items.emplace(); JS_D("range", m.Range); for (const auto &ij : j.at("items")) { if (ij.contains("group")) - m.Items.push_back(std::make_unique(ij.at("group"))); + m.Items->push_back(std::make_unique(ij.at("group"))); else if (ij.contains("member")) - m.Items.push_back(std::make_unique(ij.at("member"))); + m.Items->push_back(std::make_unique(ij.at("member"))); } + } else if (m.Op == "UPDATE") { + JS_D("index", m.Index); + const auto &ij = j.at("item"); + if (ij.contains("member")) + m.OpItem = std::make_unique(ij.at("member")); } } diff --git a/discord/objects.hpp b/discord/objects.hpp index 6cbef69..bdc16f8 100644 --- a/discord/objects.hpp +++ b/discord/objects.hpp @@ -152,9 +152,10 @@ struct GuildMemberListUpdateMessage { struct OpObject { std::string Op; - int Index; - std::vector> Items; // SYNC - std::pair Range; // SYNC + std::optional Index; + std::optional>> Items; // SYNC + std::optional> Range; // SYNC + std::optional> OpItem; // UPDATE friend void from_json(const nlohmann::json &j, OpObject &m); }; -- cgit v1.2.3