Standby

Standby is a utility to wait for an event to happen based on a predicate check. For example, you may have a command that makes a reaction menu of ✅ and ❌. If you want to handle a reaction to these, using something like an application-level state or event stream may not suit your use case. It may be cleaner to wait for a reaction inline to your function. This is where Standby comes in.

Examples

Wait for a message in channel 123 by user 456 with the content "test":

#[allow(unused_variables)]
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
use twilight_model::{
    gateway::payload::incoming::MessageCreate,
    id::{ChannelId, UserId},
};
use twilight_standby::Standby;

let standby = Standby::new();

// Later on in the application...
let message = standby
    .wait_for_message(
        ChannelId::new(123).expect("zero id"),
        |event: &MessageCreate| {
            event.author.id == UserId::new(456).expect("zero id") && event.content == "test"
        },
    )
    .await?;
    Ok(())
}

source: https://github.com/twilight-rs/twilight/tree/main/standby

docs: https://docs.rs/twilight-standby

crates.io: https://crates.io/crates/twilight-standby