summaryrefslogtreecommitdiff
path: root/discord
diff options
context:
space:
mode:
authorouwou <26526779+ouwou@users.noreply.github.com>2020-12-22 23:52:41 -0500
committerouwou <26526779+ouwou@users.noreply.github.com>2020-12-22 23:52:41 -0500
commitdbd8564af7258dd41e7d3ba73d55fa7c7a1b822c (patch)
tree85069de7c2516affcd60a13d0811e8db96e5a681 /discord
parentcb18543c503320cf9d2132b0077625acb0e78e51 (diff)
downloadabaddon-portaudio-dbd8564af7258dd41e7d3ba73d55fa7c7a1b822c.tar.gz
abaddon-portaudio-dbd8564af7258dd41e7d3ba73d55fa7c7a1b822c.zip
CHANNEL_RECIPIENT_ADD, CHANNEL_RECIPIENT_REMOVE
Diffstat (limited to 'discord')
-rw-r--r--discord/discord.cpp27
-rw-r--r--discord/discord.hpp2
-rw-r--r--discord/objects.cpp10
-rw-r--r--discord/objects.hpp16
4 files changed, 55 insertions, 0 deletions
diff --git a/discord/discord.cpp b/discord/discord.cpp
index 4ddad12..63d00c1 100644
--- a/discord/discord.cpp
+++ b/discord/discord.cpp
@@ -584,6 +584,12 @@ void DiscordClient::HandleGatewayMessage(std::string str) {
case GatewayEvent::MESSAGE_REACTION_REMOVE: {
HandleGatewayMessageReactionRemove(m);
} break;
+ case GatewayEvent::CHANNEL_RECIPIENT_ADD: {
+ HandleGatewayChannelRecipientAdd(m);
+ } break;
+ case GatewayEvent::CHANNEL_RECIPIENT_REMOVE: {
+ HandleGatewayChannelRecipientRemove(m);
+ } break;
}
} break;
default:
@@ -845,6 +851,25 @@ void DiscordClient::HandleGatewayMessageReactionRemove(const GatewayMessage &msg
m_signal_reaction_remove.emit(data.MessageID, std::to_string(data.Emoji.ID));
}
+// todo: update channel list item and member list
+void DiscordClient::HandleGatewayChannelRecipientAdd(const GatewayMessage &msg) {
+ ChannelRecipientAdd data = msg.Data;
+ auto cur = m_store.GetChannel(data.ChannelID);
+ if (!cur.has_value() || !cur->RecipientIDs.has_value()) return;
+ if (std::find(cur->RecipientIDs->begin(), cur->RecipientIDs->end(), data.User.ID) == cur->RecipientIDs->end())
+ cur->RecipientIDs->push_back(data.User.ID);
+ m_store.SetUser(data.User.ID, data.User);
+ m_store.SetChannel(cur->ID, *cur);
+}
+
+void DiscordClient::HandleGatewayChannelRecipientRemove(const GatewayMessage &msg) {
+ ChannelRecipientRemove data = msg.Data;
+ auto cur = m_store.GetChannel(data.ChannelID);
+ if (!cur.has_value() || !cur->RecipientIDs.has_value()) return;
+ cur->RecipientIDs->erase(std::remove(cur->RecipientIDs->begin(), cur->RecipientIDs->end(), data.User.ID));
+ m_store.SetChannel(cur->ID, *cur);
+}
+
void DiscordClient::HandleGatewayReconnect(const GatewayMessage &msg) {
m_signal_disconnected.emit(true);
inflateEnd(&m_zstream);
@@ -1055,6 +1080,8 @@ void DiscordClient::LoadEventMap() {
m_event_map["GUILD_ROLE_DELETE"] = GatewayEvent::GUILD_ROLE_DELETE;
m_event_map["MESSAGE_REACTION_ADD"] = GatewayEvent::MESSAGE_REACTION_ADD;
m_event_map["MESSAGE_REACTION_REMOVE"] = GatewayEvent::MESSAGE_REACTION_REMOVE;
+ m_event_map["CHANNEL_RECIPIENT_ADD"] = GatewayEvent::CHANNEL_RECIPIENT_ADD;
+ m_event_map["CHANNEL_RECIPIENT_REMOVE"] = GatewayEvent::CHANNEL_RECIPIENT_REMOVE;
}
DiscordClient::type_signal_gateway_ready DiscordClient::signal_gateway_ready() {
diff --git a/discord/discord.hpp b/discord/discord.hpp
index 125c85a..de8b748 100644
--- a/discord/discord.hpp
+++ b/discord/discord.hpp
@@ -144,6 +144,8 @@ private:
void HandleGatewayGuildRoleDelete(const GatewayMessage &msg);
void HandleGatewayMessageReactionAdd(const GatewayMessage &msg);
void HandleGatewayMessageReactionRemove(const GatewayMessage &msg);
+ void HandleGatewayChannelRecipientAdd(const GatewayMessage &msg);
+ void HandleGatewayChannelRecipientRemove(const GatewayMessage &msg);
void HandleGatewayReconnect(const GatewayMessage &msg);
void HeartbeatThread();
void SendIdentify();
diff --git a/discord/objects.cpp b/discord/objects.cpp
index 8008177..2f8ace2 100644
--- a/discord/objects.cpp
+++ b/discord/objects.cpp
@@ -229,3 +229,13 @@ void from_json(const nlohmann::json &j, MessageReactionRemoveObject &m) {
JS_O("guild_id", m.GuildID);
JS_D("emoji", m.Emoji);
}
+
+void from_json(const nlohmann::json &j, ChannelRecipientAdd &m) {
+ JS_D("user", m.User);
+ JS_D("channel_id", m.ChannelID);
+}
+
+void from_json(const nlohmann::json &j, ChannelRecipientRemove &m) {
+ JS_D("user", m.User);
+ JS_D("channel_id", m.ChannelID);
+}
diff --git a/discord/objects.hpp b/discord/objects.hpp
index 1d058de..177be64 100644
--- a/discord/objects.hpp
+++ b/discord/objects.hpp
@@ -51,6 +51,8 @@ enum class GatewayEvent : int {
GUILD_ROLE_DELETE,
MESSAGE_REACTION_ADD,
MESSAGE_REACTION_REMOVE,
+ CHANNEL_RECIPIENT_ADD,
+ CHANNEL_RECIPIENT_REMOVE,
};
struct GatewayMessage {
@@ -318,3 +320,17 @@ struct MessageReactionRemoveObject {
friend void from_json(const nlohmann::json &j, MessageReactionRemoveObject &m);
};
+
+struct ChannelRecipientAdd {
+ User User;
+ Snowflake ChannelID;
+
+ friend void from_json(const nlohmann::json &j, ChannelRecipientAdd &m);
+};
+
+struct ChannelRecipientRemove {
+ User User;
+ Snowflake ChannelID;
+
+ friend void from_json(const nlohmann::json &j, ChannelRecipientRemove &m);
+};