Prevent sending duplicate reaction events (#240)

This commit is contained in:
Matthias Ahouansou 2024-04-02 15:21:24 +00:00 committed by GitHub
parent 72d35431de
commit aba72aa64d
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 23 additions and 0 deletions

View file

@ -1149,6 +1149,22 @@ impl RoomInfo {
return top; return top;
} }
/// Checks if a given user has reacted with the given emoji on the given event
pub fn user_reactions_contains(
&mut self,
user_id: &UserId,
event_id: &EventId,
emoji: &str,
) -> bool {
if let Some(reactions) = self.reactions.get(event_id) {
reactions
.values()
.any(|(annotation, user)| annotation == emoji && user == user_id)
} else {
false
}
}
} }
/// Generate a [CompletionMap] for Emoji shortcodes. /// Generate a [CompletionMap] for Emoji shortcodes.

View file

@ -372,6 +372,13 @@ impl ChatState {
}, },
}; };
if info.user_reactions_contains(&settings.profile.user_id, &event_id, &emoji) {
let msg = format!("Youve already reacted to this message with {}", emoji);
let err = UIError::Failure(msg);
return Err(err);
}
let reaction = Annotation::new(event_id, emoji); let reaction = Annotation::new(event_id, emoji);
let msg = ReactionEventContent::new(reaction); let msg = ReactionEventContent::new(reaction);
let _ = room.send(msg).await.map_err(IambError::from)?; let _ = room.send(msg).await.map_err(IambError::from)?;