summaryrefslogtreecommitdiff
path: root/discord
diff options
context:
space:
mode:
authorouwou <26526779+ouwou@users.noreply.github.com>2021-02-28 01:42:01 -0500
committerouwou <26526779+ouwou@users.noreply.github.com>2021-02-28 01:42:01 -0500
commite81fdf1c3619392b41b66d87a7a6d3de0ca85ff7 (patch)
treec5db5f9b03b208ea66a854672e176c49da52f199 /discord
parent619cff5ad8878865e0a9410d9e4d6446b395d1a3 (diff)
downloadabaddon-portaudio-e81fdf1c3619392b41b66d87a7a6d3de0ca85ff7.tar.gz
abaddon-portaudio-e81fdf1c3619392b41b66d87a7a6d3de0ca85ff7.zip
improve handling of ROLE_ gateway events
Diffstat (limited to 'discord')
-rw-r--r--discord/discord.cpp18
-rw-r--r--discord/discord.hpp6
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