Reaction watcher with fixed duration

This commit is contained in:
Natsu Kagami 2020-05-25 11:15:03 -04:00
parent 6ce110c203
commit 3e42c74c78
Signed by: nki
GPG key ID: 73376E117CD20735
2 changed files with 26 additions and 2 deletions

View file

@ -50,7 +50,7 @@ impl ReactionWatcher {
}
/// React! to a series of reaction
///
/// The reactions stop after `duration`.
/// The reactions stop after `duration` of idle.
pub fn handle_reactions(
&self,
mut h: impl ReactionHandler,
@ -72,4 +72,28 @@ impl ReactionWatcher {
}
Ok(())
}
/// React! to a series of reaction
///
/// The handler will stop after `duration` no matter what.
pub fn handle_reactions_timed(
&self,
mut h: impl ReactionHandler,
duration: std::time::Duration,
) -> CommandResult {
let (send, reactions) = bounded(0);
{
self.channels.lock().expect("Poisoned!").push(send);
}
let timeout = after(duration);
loop {
let r = select! {
recv(reactions) -> r => { let (r, is_added) = r.unwrap(); h.handle_reaction(&*r, is_added) },
recv(timeout) -> _ => break,
};
if let Err(v) = r {
dbg!(v);
}
}
Ok(())
}
}