Prevent sending duplicate reaction events (#240)
This commit is contained in:
committed by
GitHub
parent
72d35431de
commit
aba72aa64d
16
src/base.rs
16
src/base.rs
@@ -1149,6 +1149,22 @@ impl RoomInfo {
|
||||
|
||||
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.
|
||||
|
||||
@@ -372,6 +372,13 @@ impl ChatState {
|
||||
},
|
||||
};
|
||||
|
||||
if info.user_reactions_contains(&settings.profile.user_id, &event_id, &emoji) {
|
||||
let msg = format!("You’ve already reacted to this message with {}", emoji);
|
||||
let err = UIError::Failure(msg);
|
||||
|
||||
return Err(err);
|
||||
}
|
||||
|
||||
let reaction = Annotation::new(event_id, emoji);
|
||||
let msg = ReactionEventContent::new(reaction);
|
||||
let _ = room.send(msg).await.map_err(IambError::from)?;
|
||||
|
||||
Reference in New Issue
Block a user