diff --git a/crates/quark/src/events/impl.rs b/crates/quark/src/events/impl.rs index 6010e6f0..ffac793e 100644 --- a/crates/quark/src/events/impl.rs +++ b/crates/quark/src/events/impl.rs @@ -99,7 +99,7 @@ impl State { let mut user = self.clone_user(); // Find all relationships to the user. - let mut user_ids: Vec = user + let mut user_ids: HashSet = user .relations .as_ref() .map(|arr| arr.iter().map(|x| x.id.to_string()).collect()) @@ -128,14 +128,15 @@ impl State { for channel in &channels { match channel { Channel::DirectMessage { recipients, .. } | Channel::Group { recipients, .. } => { - user_ids.append(&mut recipients.clone()); + user_ids.extend(&mut recipients.clone().into_iter()); } _ => {} } } // Fetch presence data for known users. - let online_ids = presence_filter_online(&user_ids).await; + let online_ids = + presence_filter_online(&user_ids.iter().cloned().collect::>()).await; user.online = Some(true); // Fetch user data. diff --git a/crates/quark/src/impl/generic/channels/message.rs b/crates/quark/src/impl/generic/channels/message.rs index 8e4a0e6e..aaee8e2d 100644 --- a/crates/quark/src/impl/generic/channels/message.rs +++ b/crates/quark/src/impl/generic/channels/message.rs @@ -305,12 +305,12 @@ impl IntoUsers for Message { impl IntoUsers for Vec { fn get_user_ids(&self) -> Vec { - let mut ids = vec![]; + let mut ids = HashSet::new(); for message in self { - ids.append(&mut message.get_user_ids()); + ids.extend(&mut message.get_user_ids().into_iter()); } - ids + ids.into_iter().collect() } }