forked from OpenGamers/abaddon
improve handling of ROLE_ gateway events
This commit is contained in:
@@ -1072,7 +1072,7 @@ ChatMessageHeader::ChatMessageHeader(const Message *data) {
|
|||||||
show_all();
|
show_all();
|
||||||
|
|
||||||
auto &discord = Abaddon::Get().GetDiscordClient();
|
auto &discord = Abaddon::Get().GetDiscordClient();
|
||||||
auto role_update_cb = [this](const auto &) { UpdateNameColor(); };
|
auto role_update_cb = [this](...) { UpdateNameColor(); };
|
||||||
discord.signal_role_update().connect(sigc::track_obj(role_update_cb, *this));
|
discord.signal_role_update().connect(sigc::track_obj(role_update_cb, *this));
|
||||||
auto guild_member_update_cb = [this](const auto &, const auto &) { UpdateNameColor(); };
|
auto guild_member_update_cb = [this](const auto &, const auto &) { UpdateNameColor(); };
|
||||||
discord.signal_guild_member_update().connect(sigc::track_obj(guild_member_update_cb, *this));
|
discord.signal_guild_member_update().connect(sigc::track_obj(guild_member_update_cb, *this));
|
||||||
|
|||||||
@@ -1031,19 +1031,29 @@ void DiscordClient::HandleGatewayGuildUpdate(const GatewayMessage &msg) {
|
|||||||
void DiscordClient::HandleGatewayGuildRoleUpdate(const GatewayMessage &msg) {
|
void DiscordClient::HandleGatewayGuildRoleUpdate(const GatewayMessage &msg) {
|
||||||
GuildRoleUpdateObject data = msg.Data;
|
GuildRoleUpdateObject data = msg.Data;
|
||||||
m_store.SetRole(data.Role.ID, data.Role);
|
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) {
|
void DiscordClient::HandleGatewayGuildRoleCreate(const GatewayMessage &msg) {
|
||||||
GuildRoleCreateObject data = msg.Data;
|
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_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) {
|
void DiscordClient::HandleGatewayGuildRoleDelete(const GatewayMessage &msg) {
|
||||||
GuildRoleDeleteObject data = msg.Data;
|
GuildRoleDeleteObject data = msg.Data;
|
||||||
// todo: actually delete it
|
auto guild = *m_store.GetGuild(data.GuildID);
|
||||||
m_signal_role_delete.emit(data.RoleID);
|
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) {
|
void DiscordClient::HandleGatewayMessageReactionAdd(const GatewayMessage &msg) {
|
||||||
|
|||||||
@@ -256,9 +256,9 @@ public:
|
|||||||
typedef sigc::signal<void, Snowflake> type_signal_channel_update;
|
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_channel_create;
|
||||||
typedef sigc::signal<void, Snowflake> type_signal_guild_update;
|
typedef sigc::signal<void, Snowflake> type_signal_guild_update;
|
||||||
typedef sigc::signal<void, Snowflake> type_signal_role_update;
|
typedef sigc::signal<void, Snowflake, Snowflake> type_signal_role_update; // guild id, role id
|
||||||
typedef sigc::signal<void, Snowflake> type_signal_role_create;
|
typedef sigc::signal<void, Snowflake, Snowflake> type_signal_role_create; // guild id, role id
|
||||||
typedef sigc::signal<void, Snowflake> type_signal_role_delete;
|
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_add;
|
||||||
typedef sigc::signal<void, Snowflake, Glib::ustring> type_signal_reaction_remove;
|
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
|
typedef sigc::signal<void, Snowflake, Snowflake> type_signal_typing_start; // user id, channel id
|
||||||
|
|||||||
Reference in New Issue
Block a user