From 36f2ec0996d937400e2fce028c3da729ad951f31 Mon Sep 17 00:00:00 2001 From: ouwou <26526779+ouwou@users.noreply.github.com> Date: Mon, 28 Aug 2023 21:47:04 -0400 Subject: fix webhook messages not using right username + avatar (fixes #209) --- src/components/chatmessage.cpp | 40 +++++++++++++++++++++++++++++++--------- 1 file changed, 31 insertions(+), 9 deletions(-) (limited to 'src/components/chatmessage.cpp') diff --git a/src/components/chatmessage.cpp b/src/components/chatmessage.cpp index d1d9f72..09083e3 100644 --- a/src/components/chatmessage.cpp +++ b/src/components/chatmessage.cpp @@ -918,11 +918,22 @@ ChatMessageHeader::ChatMessageHeader(const Message &data) const auto author = Abaddon::Get().GetDiscordClient().GetUser(UserID); auto &img = Abaddon::Get().GetImageManager(); + std::string avatar_url; + if (data.IsWebhook()) { + const auto webhook_data = Abaddon::Get().GetDiscordClient().GetWebhookMessageData(data.ID); + if (webhook_data.has_value()) { + avatar_url = webhook_data->GetAvatarURL(); + } + } + if (avatar_url.empty()) { + avatar_url = author->GetAvatarURL(data.GuildID); + } + auto cb = [this](const Glib::RefPtr &pb) { m_static_avatar = pb->scale_simple(AvatarSize, AvatarSize, Gdk::INTERP_BILINEAR); m_avatar.property_pixbuf() = m_static_avatar; }; - img.LoadFromURL(author->GetAvatarURL(data.GuildID), sigc::track_obj(cb, *this)); + img.LoadFromURL(avatar_url, sigc::track_obj(cb, *this)); if (author->HasAnimatedAvatar(data.GuildID)) { auto cb = [this](const Glib::RefPtr &pb) { @@ -955,10 +966,11 @@ ChatMessageHeader::ChatMessageHeader(const Message &data) m_extra->set_can_focus(false); m_extra->set_use_markup(true); } - if (author->IsABot()) - m_extra->set_markup("BOT"); - else if (data.WebhookID.has_value()) + if (data.IsWebhook()) { m_extra->set_markup("Webhook"); + } else if (author->IsABot()) { + m_extra->set_markup("BOT"); + } m_timestamp.set_text(data.ID.GetLocalTimestamp()); m_timestamp.set_hexpand(true); @@ -1018,11 +1030,21 @@ ChatMessageHeader::ChatMessageHeader(const Message &data) show_all(); auto &discord = Abaddon::Get().GetDiscordClient(); - auto role_update_cb = [this](...) { UpdateName(); }; - discord.signal_role_update().connect(sigc::track_obj(role_update_cb, *this)); - auto guild_member_update_cb = [this](const auto &, const auto &) { UpdateName(); }; - discord.signal_guild_member_update().connect(sigc::track_obj(guild_member_update_cb, *this)); - UpdateName(); + if (data.IsWebhook()) { + const auto webhook_data = discord.GetWebhookMessageData(data.ID); + if (webhook_data.has_value()) { + const auto name = Glib::Markup::escape_text(webhook_data->Username); + m_author.set_markup("" + name + ""); + } else { + UpdateName(); + } + } else { + auto role_update_cb = [this](...) { UpdateName(); }; + discord.signal_role_update().connect(sigc::track_obj(role_update_cb, *this)); + auto guild_member_update_cb = [this](const auto &, const auto &) { UpdateName(); }; + discord.signal_guild_member_update().connect(sigc::track_obj(guild_member_update_cb, *this)); + UpdateName(); + } AttachUserMenuHandler(m_meta_ev); AttachUserMenuHandler(m_avatar_ev); } -- cgit v1.2.3