tbot 0.5.0

Make cool Telegram bots with Rust easily.
Documentation
use std::sync::Arc;
use tbot::{
    prelude::*,
    types::{
        inline_query::{self, result::Article},
        input_message_content::Text,
        parameters::Text as ParseMode,
    },
};
use tokio::sync::Mutex;

#[tokio::main]
async fn main() {
    let mut bot = tbot::from_env!("BOT_TOKEN").event_loop();

    bot.text(|context| {
        async move {
            let calc_result = meval::eval_str(&context.text.value);
            let message = if let Ok(answer) = calc_result {
                format!("= `{}`", answer)
            } else {
                "Whops, I couldn't evaluate your expression :(".into()
            };
            let reply = ParseMode::markdown(&message);

            let call_result = context.send_message_in_reply(reply).call().await;
            if let Err(err) = call_result {
                dbg!(err);
            }
        }
    });

    let id = Arc::new(Mutex::new(0_u32));
    bot.inline(move |context| {
        let id = Arc::clone(&id);
        async move {
            let calc_result = meval::eval_str(&context.query);
            let (title, message) = if let Ok(answer) = calc_result {
                let title = answer.to_string();
                let message = format!("`{} = {}`", context.query, answer);
                (title, message)
            } else {
                let title = "Whops...".into();
                let message = "I couldn't evaluate your expression :(".into();
                (title, message)
            };

            let id = {
                let mut id = id.lock().await;
                *id += 1;
                id.to_string()
            };
            let content = Text::new(ParseMode::markdown(&message));
            let article = Article::new(&title, content).description(&message);
            let result = inline_query::Result::new(&id, article);

            let call_result = context.answer(&[result]).call().await;
            if let Err(err) = call_result {
                dbg!(err);
            }
        }
    });

    bot.polling().start().await.unwrap();
}