middlewares/
middlewares.rs

1use teloxide::prelude::*;
2
3type HandlerResult = Result<(), teloxide::RequestError>;
4
5#[tokio::main]
6async fn main() {
7    pretty_env_logger::init();
8    log::info!("Starting middlewares bot...");
9
10    let bot = Bot::from_env();
11
12    let handler = Update::filter_message()
13        // Executes before the endpoint.
14        .inspect(|msg: Message| println!("Before (message #{}).", msg.id))
15        // Our "endpoint".
16        .map_async(my_endpoint)
17        // Executes after the endpoint (even if it fails).
18        .inspect(|msg: Message| {
19            println!("After (message #{}).", msg.id);
20        })
21        // Retrieve the result of the endpoint and pass it to the dispatcher.
22        .endpoint(|result: HandlerResult| async move {
23            // Alternatively, we could also pattern-match on this value for more
24            // fine-grained behaviour.
25            result
26        });
27
28    Dispatcher::builder(bot, handler).enable_ctrlc_handler().build().dispatch().await;
29}
30
31async fn my_endpoint(bot: Bot, msg: Message) -> HandlerResult {
32    bot.send_message(msg.chat.id, "Inside the endpoint.").await?;
33    Ok(())
34}