diff options
author | ouwou <26526779+ouwou@users.noreply.github.com> | 2022-03-26 02:58:59 -0400 |
---|---|---|
committer | ouwou <26526779+ouwou@users.noreply.github.com> | 2022-03-26 02:58:59 -0400 |
commit | a0b3c9f8a4f8d2c39258d4c142f8604423576d91 (patch) | |
tree | 841155a65b439b61a5c58c1f64878152c20d4f51 /src/abaddon.cpp | |
parent | 481685b3bbb2b0270870dec5de87e60fc2d84d15 (diff) | |
parent | a2a45757e917aa97e71cf0b84a01dc843759a5f6 (diff) | |
download | abaddon-portaudio-a0b3c9f8a4f8d2c39258d4c142f8604423576d91.tar.gz abaddon-portaudio-a0b3c9f8a4f8d2c39258d4c142f8604423576d91.zip |
Merge branch 'master' into msys
Diffstat (limited to 'src/abaddon.cpp')
-rw-r--r-- | src/abaddon.cpp | 23 |
1 files changed, 21 insertions, 2 deletions
diff --git a/src/abaddon.cpp b/src/abaddon.cpp index bf1c6cf..1ab6f8c 100644 --- a/src/abaddon.cpp +++ b/src/abaddon.cpp @@ -348,6 +348,20 @@ void Abaddon::ShowGuildVerificationGateDialog(Snowflake guild_id) { } } +void Abaddon::CheckMessagesForMembers(const ChannelData &chan, const std::vector<Message> &msgs) { + if (!chan.GuildID.has_value()) return; + + std::vector<Snowflake> unknown; + std::transform(msgs.begin(), msgs.end(), + std::back_inserter(unknown), + [](const Message &msg) -> Snowflake { + return msg.Author.ID; + }); + + const auto fetch = m_discord.FilterUnknownMembersFrom(*chan.GuildID, unknown.begin(), unknown.end()); + m_discord.RequestMembers(*chan.GuildID, fetch.begin(), fetch.end()); +} + void Abaddon::SetupUserMenu() { m_user_menu = Gtk::manage(new Gtk::Menu); m_user_menu_insert_mention = Gtk::manage(new Gtk::MenuItem("Insert Mention")); @@ -559,7 +573,8 @@ void Abaddon::ActionChannelOpened(Snowflake id) { if (m_channels_requested.find(id) == m_channels_requested.end()) { // dont fire requests we know will fail if (can_access) { - m_discord.FetchMessagesInChannel(id, [this, id](const std::vector<Message> &msgs) { + m_discord.FetchMessagesInChannel(id, [channel, this, id](const std::vector<Message> &msgs) { + CheckMessagesForMembers(*channel, msgs); m_main_window->UpdateChatWindowContents(); m_channels_requested.insert(id); }); @@ -602,7 +617,11 @@ void Abaddon::ActionChatLoadHistory(Snowflake id) { m_discord.FetchMessagesInChannelBefore(id, before_id, [this, id](const std::vector<Message> &msgs) { m_channels_history_loading.erase(id); - if (msgs.size() == 0) { + const auto channel = m_discord.GetChannel(id); + if (channel.has_value()) + CheckMessagesForMembers(*channel, msgs); + + if (msgs.empty()) { m_channels_history_loaded.insert(id); } else { m_main_window->UpdateChatPrependHistory(msgs); |