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;
|
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.
|
||||||
|
|||||||
@@ -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 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)?;
|
||||||
|
|||||||
Reference in New Issue
Block a user