mirror of
https://github.com/celisej567/abaddon.git
synced 2026-09-13 20:18:50 +03:00
some better member/role update handling
This commit is contained in:
@@ -1071,6 +1071,11 @@ ChatMessageHeader::ChatMessageHeader(const Message *data) {
|
||||
|
||||
show_all();
|
||||
|
||||
auto &discord = Abaddon::Get().GetDiscordClient();
|
||||
auto role_update_cb = [this](const auto &) { UpdateNameColor(); };
|
||||
discord.signal_role_update().connect(sigc::track_obj(role_update_cb, *this));
|
||||
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));
|
||||
UpdateNameColor();
|
||||
AttachUserMenuHandler(*m_meta_ev);
|
||||
AttachUserMenuHandler(*m_avatar_ev);
|
||||
|
||||
@@ -735,8 +735,12 @@ void DiscordClient::HandleGatewayMessageDeleteBulk(const GatewayMessage &msg) {
|
||||
|
||||
void DiscordClient::HandleGatewayGuildMemberUpdate(const GatewayMessage &msg) {
|
||||
GuildMemberUpdateMessage data = msg.Data;
|
||||
auto member = GuildMember::from_update_json(msg.Data); // meh
|
||||
m_store.SetGuildMember(data.GuildID, data.User.ID, member);
|
||||
auto cur = m_store.GetGuildMember(data.GuildID, data.User.ID);
|
||||
if (cur.has_value()) {
|
||||
cur->update_from_json(msg.Data);
|
||||
m_store.SetGuildMember(data.GuildID, data.User.ID, *cur);
|
||||
}
|
||||
m_signal_guild_member_update.emit(data.GuildID, data.User.ID);
|
||||
}
|
||||
|
||||
void DiscordClient::HandleGatewayPresenceUpdate(const GatewayMessage &msg) {
|
||||
@@ -1224,3 +1228,7 @@ DiscordClient::type_signal_reaction_remove DiscordClient::signal_reaction_remove
|
||||
DiscordClient::type_signal_typing_start DiscordClient::signal_typing_start() {
|
||||
return m_signal_typing_start;
|
||||
}
|
||||
|
||||
DiscordClient::type_signal_guild_member_update DiscordClient::signal_guild_member_update() {
|
||||
return m_signal_guild_member_update;
|
||||
}
|
||||
|
||||
@@ -218,6 +218,7 @@ public:
|
||||
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
|
||||
typedef sigc::signal<void, Snowflake, Snowflake> type_signal_guild_member_update; // guild id, user id
|
||||
typedef sigc::signal<void, bool> type_signal_disconnected; // bool true if reconnecting
|
||||
typedef sigc::signal<void> type_signal_connected;
|
||||
|
||||
@@ -238,6 +239,7 @@ public:
|
||||
type_signal_reaction_add signal_reaction_add();
|
||||
type_signal_reaction_remove signal_reaction_remove();
|
||||
type_signal_typing_start signal_typing_start();
|
||||
type_signal_guild_member_update signal_guild_member_update();
|
||||
type_signal_disconnected signal_disconnected();
|
||||
type_signal_connected signal_connected();
|
||||
|
||||
@@ -259,6 +261,7 @@ protected:
|
||||
type_signal_reaction_add m_signal_reaction_add;
|
||||
type_signal_reaction_remove m_signal_reaction_remove;
|
||||
type_signal_typing_start m_signal_typing_start;
|
||||
type_signal_guild_member_update m_signal_guild_member_update;
|
||||
type_signal_disconnected m_signal_disconnected;
|
||||
type_signal_connected m_signal_connected;
|
||||
};
|
||||
|
||||
@@ -26,12 +26,10 @@ std::vector<RoleData> GuildMember::GetSortedRoles() const {
|
||||
return roles;
|
||||
}
|
||||
|
||||
GuildMember GuildMember::from_update_json(const nlohmann::json &j) {
|
||||
GuildMember ret;
|
||||
JS_D("roles", ret.Roles);
|
||||
JS_D("user", ret.User);
|
||||
JS_ON("nick", ret.Nickname);
|
||||
JS_D("joined_at", ret.JoinedAt);
|
||||
JS_ON("premium_since", ret.PremiumSince);
|
||||
return ret;
|
||||
void GuildMember::update_from_json(const nlohmann::json &j) {
|
||||
JS_RD("roles", Roles);
|
||||
JS_RD("user", User);
|
||||
JS_RD("nick", Nickname);
|
||||
JS_RD("joined_at", JoinedAt);
|
||||
JS_RD("premium_since", PremiumSince);
|
||||
}
|
||||
|
||||
@@ -17,6 +17,6 @@ struct GuildMember {
|
||||
|
||||
std::vector<RoleData> GetSortedRoles() const;
|
||||
|
||||
void update_from_json(const nlohmann::json &j);
|
||||
friend void from_json(const nlohmann::json &j, GuildMember &m);
|
||||
static GuildMember from_update_json(const nlohmann::json &j);
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user