summaryrefslogtreecommitdiff
path: root/discord
diff options
context:
space:
mode:
authorouwou <26526779+ouwou@users.noreply.github.com>2020-10-13 02:05:59 -0400
committerouwou <26526779+ouwou@users.noreply.github.com>2020-10-13 02:05:59 -0400
commitc17842c16f10f55f2f0923e94033a482ef98838e (patch)
tree58888e4401fa23b2ea231e591367cd1c1a8cf73b /discord
parentf29cfc69519593017986f3b969ad62f9b8672375 (diff)
downloadabaddon-portaudio-c17842c16f10f55f2f0923e94033a482ef98838e.tar.gz
abaddon-portaudio-c17842c16f10f55f2f0923e94033a482ef98838e.zip
handle GUILD_MEMBER_UPDATE
Diffstat (limited to 'discord')
-rw-r--r--discord/discord.cpp10
-rw-r--r--discord/discord.hpp1
-rw-r--r--discord/member.cpp10
-rw-r--r--discord/member.hpp1
-rw-r--r--discord/objects.cpp8
-rw-r--r--discord/objects.hpp12
6 files changed, 42 insertions, 0 deletions
diff --git a/discord/discord.cpp b/discord/discord.cpp
index 725f76f..73b03a3 100644
--- a/discord/discord.cpp
+++ b/discord/discord.cpp
@@ -516,6 +516,9 @@ void DiscordClient::HandleGatewayMessage(std::string str) {
case GatewayEvent::MESSAGE_DELETE_BULK: {
HandleGatewayMessageDeleteBulk(m);
} break;
+ case GatewayEvent::GUILD_MEMBER_UPDATE: {
+ HandleGatewayGuildMemberUpdate(m);
+ } break;
}
} break;
default:
@@ -591,6 +594,12 @@ void DiscordClient::HandleGatewayMessageDeleteBulk(const GatewayMessage &msg) {
}
}
+void DiscordClient::HandleGatewayGuildMemberUpdate(const GatewayMessage &msg) {
+ GuildMemberUpdateMessage data = msg.Data;
+ auto member = GuildMember::from_update_json(msg.Data); // meh
+ m_store.SetGuildMemberData(data.GuildID, data.User.ID, member);
+}
+
void DiscordClient::HandleGatewayMessageUpdate(const GatewayMessage &msg) {
Snowflake id = msg.Data.at("id");
@@ -718,6 +727,7 @@ void DiscordClient::LoadEventMap() {
m_event_map["GUILD_CREATE"] = GatewayEvent::GUILD_CREATE;
m_event_map["GUILD_DELETE"] = GatewayEvent::GUILD_DELETE;
m_event_map["MESSAGE_DELETE_BULK"] = GatewayEvent::MESSAGE_DELETE_BULK;
+ m_event_map["GUILD_MEMBER_UPDATE"] = GatewayEvent::GUILD_MEMBER_UPDATE;
}
DiscordClient::type_signal_gateway_ready DiscordClient::signal_gateway_ready() {
diff --git a/discord/discord.hpp b/discord/discord.hpp
index 5bfb29a..d479433 100644
--- a/discord/discord.hpp
+++ b/discord/discord.hpp
@@ -123,6 +123,7 @@ private:
void HandleGatewayGuildCreate(const GatewayMessage &msg);
void HandleGatewayGuildDelete(const GatewayMessage &msg);
void HandleGatewayMessageDeleteBulk(const GatewayMessage &msg);
+ void HandleGatewayGuildMemberUpdate(const GatewayMessage &msg);
void HeartbeatThread();
void SendIdentify();
diff --git a/discord/member.cpp b/discord/member.cpp
index 9452695..35e7c93 100644
--- a/discord/member.cpp
+++ b/discord/member.cpp
@@ -9,3 +9,13 @@ void from_json(const nlohmann::json &j, GuildMember &m) {
JS_D("deaf", m.IsDeafened);
JS_D("mute", m.IsMuted);
}
+
+GuildMember GuildMember::from_update_json(const nlohmann::json &j) {
+ GuildMember ret;
+ JS_D("roles", ret.Roles);
+ JS_D("user", ret.User);
+ JS_ON("nick", ret.Nickname);
+ JS_D("joined_at", ret.JoinedAt);
+ JS_ON("premium_since", ret.PremiumSince);
+ return ret;
+}
diff --git a/discord/member.hpp b/discord/member.hpp
index 4ff84fc..0b7e0d6 100644
--- a/discord/member.hpp
+++ b/discord/member.hpp
@@ -15,4 +15,5 @@ struct GuildMember {
bool IsMuted; //
friend void from_json(const nlohmann::json &j, GuildMember &m);
+ static GuildMember from_update_json(const nlohmann::json &j);
};
diff --git a/discord/objects.cpp b/discord/objects.cpp
index 76de515..c3f1e4f 100644
--- a/discord/objects.cpp
+++ b/discord/objects.cpp
@@ -133,3 +133,11 @@ void to_json(nlohmann::json &j, const MessageEditObject &m) {
if (m.Flags != -1)
j["flags"] = m.Flags;
}
+
+void from_json(const nlohmann::json &j, GuildMemberUpdateMessage &m) {
+ JS_D("guild_id", m.GuildID);
+ JS_D("roles", m.Roles);
+ JS_D("user", m.User);
+ JS_ON("nick", m.Nick);
+ JS_D("joined_at", m.JoinedAt);
+}
diff --git a/discord/objects.hpp b/discord/objects.hpp
index 43182a6..602991b 100644
--- a/discord/objects.hpp
+++ b/discord/objects.hpp
@@ -35,6 +35,7 @@ enum class GatewayEvent : int {
GUILD_CREATE,
GUILD_DELETE,
MESSAGE_DELETE_BULK,
+ GUILD_MEMBER_UPDATE,
};
struct GatewayMessage {
@@ -189,3 +190,14 @@ struct MessageEditObject {
friend void to_json(nlohmann::json &j, const MessageEditObject &m);
};
+
+struct GuildMemberUpdateMessage {
+ Snowflake GuildID; //
+ std::vector<Snowflake> Roles; //
+ User User; //
+ std::string Nick; // opt, null
+ std::string JoinedAt;
+ std::string PremiumSince; // opt, null
+
+ friend void from_json(const nlohmann::json &j, GuildMemberUpdateMessage &m);
+};