diff options
author | ouwou <26526779+ouwou@users.noreply.github.com> | 2021-02-28 01:42:01 -0500 |
---|---|---|
committer | ouwou <26526779+ouwou@users.noreply.github.com> | 2021-02-28 01:42:01 -0500 |
commit | e81fdf1c3619392b41b66d87a7a6d3de0ca85ff7 (patch) | |
tree | c5db5f9b03b208ea66a854672e176c49da52f199 /discord | |
parent | 619cff5ad8878865e0a9410d9e4d6446b395d1a3 (diff) | |
download | abaddon-portaudio-e81fdf1c3619392b41b66d87a7a6d3de0ca85ff7.tar.gz abaddon-portaudio-e81fdf1c3619392b41b66d87a7a6d3de0ca85ff7.zip |
improve handling of ROLE_ gateway events
Diffstat (limited to 'discord')
-rw-r--r-- | discord/discord.cpp | 18 | ||||
-rw-r--r-- | discord/discord.hpp | 6 |
2 files changed, 17 insertions, 7 deletions
diff --git a/discord/discord.cpp b/discord/discord.cpp index c688895..f0254e3 100644 --- a/discord/discord.cpp +++ b/discord/discord.cpp @@ -1031,19 +1031,29 @@ void DiscordClient::HandleGatewayGuildUpdate(const GatewayMessage &msg) { void DiscordClient::HandleGatewayGuildRoleUpdate(const GatewayMessage &msg) { GuildRoleUpdateObject data = msg.Data; m_store.SetRole(data.Role.ID, data.Role); - m_signal_role_update.emit(data.Role.ID); + m_signal_role_update.emit(data.GuildID, data.Role.ID); } void DiscordClient::HandleGatewayGuildRoleCreate(const GatewayMessage &msg) { GuildRoleCreateObject data = msg.Data; + auto guild = *m_store.GetGuild(data.GuildID); + guild.Roles->push_back(data.Role); + m_store.BeginTransaction(); m_store.SetRole(data.Role.ID, data.Role); - m_signal_role_create.emit(data.Role.ID); + m_store.SetGuild(guild.ID, guild); + m_store.EndTransaction(); + m_signal_role_create.emit(data.GuildID, data.Role.ID); } void DiscordClient::HandleGatewayGuildRoleDelete(const GatewayMessage &msg) { GuildRoleDeleteObject data = msg.Data; - // todo: actually delete it - m_signal_role_delete.emit(data.RoleID); + auto guild = *m_store.GetGuild(data.GuildID); + const auto pred = [this, id = data.RoleID](const RoleData &role) -> bool { + return role.ID == id; + }; + guild.Roles->erase(std::remove_if(guild.Roles->begin(), guild.Roles->end(), pred), guild.Roles->end()); + m_store.SetGuild(guild.ID, guild); + m_signal_role_delete.emit(data.GuildID, data.RoleID); } void DiscordClient::HandleGatewayMessageReactionAdd(const GatewayMessage &msg) { diff --git a/discord/discord.hpp b/discord/discord.hpp index fc03682..c6723cd 100644 --- a/discord/discord.hpp +++ b/discord/discord.hpp @@ -256,9 +256,9 @@ public: typedef sigc::signal<void, Snowflake> type_signal_channel_update; typedef sigc::signal<void, Snowflake> type_signal_channel_create; typedef sigc::signal<void, Snowflake> type_signal_guild_update; - typedef sigc::signal<void, Snowflake> type_signal_role_update; - typedef sigc::signal<void, Snowflake> type_signal_role_create; - typedef sigc::signal<void, Snowflake> type_signal_role_delete; + typedef sigc::signal<void, Snowflake, Snowflake> type_signal_role_update; // guild id, role id + typedef sigc::signal<void, Snowflake, Snowflake> type_signal_role_create; // guild id, role id + typedef sigc::signal<void, Snowflake, Snowflake> type_signal_role_delete; // guild id, role id typedef sigc::signal<void, Snowflake, Glib::ustring> type_signal_reaction_add; typedef sigc::signal<void, Snowflake, Glib::ustring> type_signal_reaction_remove; typedef sigc::signal<void, Snowflake, Snowflake> type_signal_typing_start; // user id, channel id |