diff options
author | ouwou <26526779+ouwou@users.noreply.github.com> | 2021-02-28 01:44:31 -0500 |
---|---|---|
committer | ouwou <26526779+ouwou@users.noreply.github.com> | 2021-02-28 01:44:31 -0500 |
commit | 11358da24e0e73044aed389b1dbbf479808ca036 (patch) | |
tree | 8133a877286e5d4c3f8c77e96fa7213a4468111b /discord | |
parent | e81fdf1c3619392b41b66d87a7a6d3de0ca85ff7 (diff) | |
download | abaddon-portaudio-11358da24e0e73044aed389b1dbbf479808ca036.tar.gz abaddon-portaudio-11358da24e0e73044aed389b1dbbf479808ca036.zip |
handle UPDATE in GUILD_MEMBER_LIST_UPDATE
Diffstat (limited to 'discord')
-rw-r--r-- | discord/discord.cpp | 8 | ||||
-rw-r--r-- | discord/objects.cpp | 10 | ||||
-rw-r--r-- | discord/objects.hpp | 7 |
3 files changed, 19 insertions, 6 deletions
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<const GuildMemberListUpdateMessage::MemberItem *>(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<const GuildMemberListUpdateMessage::MemberItem *>(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<GuildMemberListUpdateMessage::GroupItem>(ij.at("group"))); + m.Items->push_back(std::make_unique<GuildMemberListUpdateMessage::GroupItem>(ij.at("group"))); else if (ij.contains("member")) - m.Items.push_back(std::make_unique<GuildMemberListUpdateMessage::MemberItem>(ij.at("member"))); + m.Items->push_back(std::make_unique<GuildMemberListUpdateMessage::MemberItem>(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<GuildMemberListUpdateMessage::MemberItem>(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<std::unique_ptr<Item>> Items; // SYNC - std::pair<int, int> Range; // SYNC + std::optional<int> Index; + std::optional<std::vector<std::unique_ptr<Item>>> Items; // SYNC + std::optional<std::pair<int, int>> Range; // SYNC + std::optional<std::unique_ptr<Item>> OpItem; // UPDATE friend void from_json(const nlohmann::json &j, OpObject &m); }; |