summaryrefslogtreecommitdiff
path: root/discord
diff options
context:
space:
mode:
authorouwou <26526779+ouwou@users.noreply.github.com>2021-08-02 02:00:03 -0400
committerouwou <26526779+ouwou@users.noreply.github.com>2021-08-02 02:00:03 -0400
commita19d21427206bcd5ab5cc0af273a05f3fe827720 (patch)
tree5cf31225cbe83450cd07619d546048a9ffeff5ca /discord
parent06f85c3a2de5af9e0d63ff86a8e411030d1ee45d (diff)
downloadabaddon-portaudio-a19d21427206bcd5ab5cc0af273a05f3fe827720.tar.gz
abaddon-portaudio-a19d21427206bcd5ab5cc0af273a05f3fe827720.zip
basic THREAD_MEMBERS_UPDATE handling for updating channel list
Diffstat (limited to 'discord')
-rw-r--r--discord/discord.cpp15
-rw-r--r--discord/discord.hpp4
-rw-r--r--discord/objects.cpp8
-rw-r--r--discord/objects.hpp10
4 files changed, 36 insertions, 1 deletions
diff --git a/discord/discord.cpp b/discord/discord.cpp
index dcab6be..82d2131 100644
--- a/discord/discord.cpp
+++ b/discord/discord.cpp
@@ -764,7 +764,7 @@ void DiscordClient::Unpin(Snowflake channel_id, Snowflake message_id, sigc::slot
// i dont know if the location parameter is necessary at all but discord's thread implementation is extremely strange
// so its here just in case
void DiscordClient::LeaveThread(Snowflake channel_id, const std::string &location, sigc::slot<void(DiscordError code)> callback) {
- m_http.MakeDELETE("/channels/" + std::to_string(channel_id) + "/thread-members/@me?location=" + location, [this, callback](const http::response_type& response) {
+ m_http.MakeDELETE("/channels/" + std::to_string(channel_id) + "/thread-members/@me?location=" + location, [this, callback](const http::response_type &response) {
if (CheckCode(response, 204))
callback(DiscordError::NONE);
else
@@ -1176,6 +1176,9 @@ void DiscordClient::HandleGatewayMessage(std::string str) {
case GatewayEvent::THREAD_LIST_SYNC: {
HandleGatewayThreadListSync(m);
} break;
+ case GatewayEvent::THREAD_MEMBERS_UPDATE: {
+ HandleGatewayThreadMembersUpdate(m);
+ } break;
}
} break;
default:
@@ -1680,6 +1683,11 @@ void DiscordClient::HandleGatewayThreadListSync(const GatewayMessage &msg) {
m_signal_thread_list_sync.emit(data);
}
+void DiscordClient::HandleGatewayThreadMembersUpdate(const GatewayMessage &msg) {
+ ThreadMembersUpdateData data = msg.Data;
+ m_signal_thread_members_update.emit(data);
+}
+
void DiscordClient::HandleGatewayReadySupplemental(const GatewayMessage &msg) {
ReadySupplementalData data = msg.Data;
for (const auto &p : data.MergedPresences.Friends) {
@@ -2045,6 +2053,7 @@ void DiscordClient::LoadEventMap() {
m_event_map["THREAD_CREATE"] = GatewayEvent::THREAD_CREATE;
m_event_map["THREAD_DELETE"] = GatewayEvent::THREAD_DELETE;
m_event_map["THREAD_LIST_SYNC"] = GatewayEvent::THREAD_LIST_SYNC;
+ m_event_map["THREAD_MEMBERS_UPDATE"] = GatewayEvent::THREAD_MEMBERS_UPDATE;
}
DiscordClient::type_signal_gateway_ready DiscordClient::signal_gateway_ready() {
@@ -2195,6 +2204,10 @@ DiscordClient::type_signal_thread_list_sync DiscordClient::signal_thread_list_sy
return m_signal_thread_list_sync;
}
+DiscordClient::type_signal_thread_members_update DiscordClient::signal_thread_members_update() {
+ return m_signal_thread_members_update;
+}
+
DiscordClient::type_signal_message_sent DiscordClient::signal_message_sent() {
return m_signal_message_sent;
}
diff --git a/discord/discord.hpp b/discord/discord.hpp
index 616941b..619a898 100644
--- a/discord/discord.hpp
+++ b/discord/discord.hpp
@@ -240,6 +240,7 @@ private:
void HandleGatewayThreadCreate(const GatewayMessage &msg);
void HandleGatewayThreadDelete(const GatewayMessage &msg);
void HandleGatewayThreadListSync(const GatewayMessage &msg);
+ void HandleGatewayThreadMembersUpdate(const GatewayMessage &msg);
void HandleGatewayReadySupplemental(const GatewayMessage &msg);
void HandleGatewayReconnect(const GatewayMessage &msg);
void HandleGatewayInvalidSession(const GatewayMessage &msg);
@@ -336,6 +337,7 @@ public:
typedef sigc::signal<void, ChannelData> type_signal_thread_create;
typedef sigc::signal<void, ThreadDeleteData> type_signal_thread_delete;
typedef sigc::signal<void, ThreadListSyncData> type_signal_thread_list_sync;
+ typedef sigc::signal<void, ThreadMembersUpdateData> type_signal_thread_members_update;
typedef sigc::signal<void, Message> type_signal_message_unpinned; // not a real event
typedef sigc::signal<void, Message> type_signal_message_pinned; // not a real event either
typedef sigc::signal<void, Message> type_signal_message_sent;
@@ -378,6 +380,7 @@ public:
type_signal_thread_create signal_thread_create();
type_signal_thread_delete signal_thread_delete();
type_signal_thread_list_sync signal_thread_list_sync();
+ type_signal_thread_members_update signal_thread_members_update();
type_signal_message_sent signal_message_sent();
type_signal_message_send_fail signal_message_send_fail();
type_signal_disconnected signal_disconnected();
@@ -419,6 +422,7 @@ protected:
type_signal_thread_create m_signal_thread_create;
type_signal_thread_delete m_signal_thread_delete;
type_signal_thread_list_sync m_signal_thread_list_sync;
+ type_signal_thread_members_update m_signal_thread_members_update;
type_signal_message_sent m_signal_message_sent;
type_signal_message_send_fail m_signal_message_send_fail;
type_signal_disconnected m_signal_disconnected;
diff --git a/discord/objects.cpp b/discord/objects.cpp
index e7b421f..41164a4 100644
--- a/discord/objects.cpp
+++ b/discord/objects.cpp
@@ -489,3 +489,11 @@ void from_json(const nlohmann::json &j, ThreadListSyncData &m) {
JS_D("threads", m.Threads);
JS_D("guild_id", m.GuildID);
}
+
+void from_json(const nlohmann::json &j, ThreadMembersUpdateData &m) {
+ JS_D("id", m.ID);
+ JS_D("guild_id", m.GuildID);
+ JS_D("member_count", m.MemberCount);
+ JS_O("added_members", m.AddedMembers);
+ JS_O("removed_member_ids", m.RemovedMemberIDs);
+}
diff --git a/discord/objects.hpp b/discord/objects.hpp
index 7493404..889671f 100644
--- a/discord/objects.hpp
+++ b/discord/objects.hpp
@@ -690,3 +690,13 @@ struct ThreadListSyncData {
friend void from_json(const nlohmann::json &j, ThreadListSyncData &m);
};
+
+struct ThreadMembersUpdateData {
+ Snowflake ID;
+ Snowflake GuildID;
+ int MemberCount;
+ std::optional<std::vector<ThreadMemberObject>> AddedMembers;
+ std::optional<std::vector<Snowflake>> RemovedMemberIDs;
+
+ friend void from_json(const nlohmann::json &j, ThreadMembersUpdateData &m);
+};