summaryrefslogtreecommitdiff
path: root/discord
diff options
context:
space:
mode:
authorouwou <26526779+ouwou@users.noreply.github.com>2021-01-23 18:23:14 -0500
committerouwou <26526779+ouwou@users.noreply.github.com>2021-01-23 18:23:14 -0500
commitfd72d91ceef0bba92fe886719b6e30e81f9ec838 (patch)
tree01ad325aeaf4b6b8f5443227cd94b8bfa7636819 /discord
parent04734e7e55366e3138f7d818f5267e76fbfa1041 (diff)
downloadabaddon-portaudio-fd72d91ceef0bba92fe886719b6e30e81f9ec838.tar.gz
abaddon-portaudio-fd72d91ceef0bba92fe886719b6e30e81f9ec838.zip
handle merged_members in ready object
this way you dont have to load a channel to make the client aware of your permissions
Diffstat (limited to 'discord')
-rw-r--r--discord/discord.cpp12
-rw-r--r--discord/member.cpp1
-rw-r--r--discord/member.hpp1
-rw-r--r--discord/objects.cpp1
-rw-r--r--discord/objects.hpp1
5 files changed, 16 insertions, 0 deletions
diff --git a/discord/discord.cpp b/discord/discord.cpp
index 03e7df3..75be116 100644
--- a/discord/discord.cpp
+++ b/discord/discord.cpp
@@ -780,15 +780,27 @@ void DiscordClient::HandleGatewayReady(const GatewayMessage &msg) {
ProcessNewGuild(g);
m_store.BeginTransaction();
+
for (const auto &dm : data.PrivateChannels) {
m_store.SetChannel(dm.ID, dm);
if (dm.Recipients.has_value())
for (const auto &recipient : *dm.Recipients)
m_store.SetUser(recipient.ID, recipient);
}
+
if (data.Users.has_value())
for (const auto &user : *data.Users)
m_store.SetUser(user.ID, user);
+
+ if (data.MergedMembers.has_value()) {
+ for (int i = 0; i < data.MergedMembers->size(); i++) {
+ const auto guild_id = data.Guilds[i].ID;
+ for (const auto &member : data.MergedMembers.value()[i]) {
+ m_store.SetGuildMember(guild_id, *member.UserID, member);
+ }
+ }
+ }
+
m_store.EndTransaction();
m_session_id = data.SessionID;
diff --git a/discord/member.cpp b/discord/member.cpp
index 3fa1f71..fee007f 100644
--- a/discord/member.cpp
+++ b/discord/member.cpp
@@ -9,6 +9,7 @@ void from_json(const nlohmann::json &j, GuildMember &m) {
JS_ON("premium_since", m.PremiumSince);
JS_D("deaf", m.IsDeafened);
JS_D("mute", m.IsMuted);
+ JS_O("user_id", m.UserID);
}
std::vector<RoleData> GuildMember::GetSortedRoles() const {
diff --git a/discord/member.hpp b/discord/member.hpp
index 8a9d609..5910f18 100644
--- a/discord/member.hpp
+++ b/discord/member.hpp
@@ -14,6 +14,7 @@ struct GuildMember {
std::optional<std::string> PremiumSince; // null
bool IsDeafened;
bool IsMuted;
+ std::optional<Snowflake> UserID; // present in merged_members
std::vector<RoleData> GetSortedRoles() const;
diff --git a/discord/objects.cpp b/discord/objects.cpp
index bcc7b04..4cc03e0 100644
--- a/discord/objects.cpp
+++ b/discord/objects.cpp
@@ -98,6 +98,7 @@ void from_json(const nlohmann::json &j, ReadyEventData &m) {
JS_D("user_settings", m.Settings);
JS_D("private_channels", m.PrivateChannels);
JS_O("users", m.Users);
+ JS_ON("merged_members", m.MergedMembers);
}
void to_json(nlohmann::json &j, const IdentifyProperties &m) {
diff --git a/discord/objects.hpp b/discord/objects.hpp
index 6c04602..1f37ce9 100644
--- a/discord/objects.hpp
+++ b/discord/objects.hpp
@@ -170,6 +170,7 @@ struct ReadyEventData {
std::optional<std::string> AnalyticsToken;
std::optional<int> FriendSuggestionCount;
UserSettings Settings;
+ std::optional<std::vector<std::vector<GuildMember>>> MergedMembers;
// std::vector<Unknown> ConnectedAccounts; // opt
// std::map<std::string, Unknown> Consents; // opt
// std::vector<Unknown> Experiments; // opt