tgbot 0.18.0

A Telegram Bot library
Documentation
use dotenv::dotenv;
use futures_util::future::BoxFuture;
use std::env;
use tgbot::{
    longpoll::LongPoll,
    methods::SendMediaGroup,
    types::{InputFile, InputMediaPhoto, InputMediaVideo, MediaGroup, Update},
    Api, UpdateHandler,
};

#[derive(Clone)]
struct Handler {
    api: Api,
    photo_path: String,
    photo_url: String,
    video_path: String,
}

impl UpdateHandler for Handler {
    type Future = BoxFuture<'static, ()>;

    fn handle(&self, update: Update) -> Self::Future {
        let this = self.clone();
        Box::pin(async move {
            log::info!("got an update: {:?}\n", update);
            if let Some(chat_id) = update.get_chat_id() {
                let photo_url = InputFile::url(this.photo_url);
                let photo_path = InputFile::path(this.photo_path).await.unwrap();
                let video_path = InputFile::path(this.video_path).await.unwrap();
                let media = MediaGroup::default()
                    .add_item(photo_url, InputMediaPhoto::default().caption("Photo 01"))
                    .add_item(photo_path, InputMediaPhoto::default().caption("Photo 02"))
                    .add_item(video_path, InputMediaVideo::default().caption("Video 01"));
                let method = SendMediaGroup::new(chat_id, media).unwrap();
                this.api.execute(method).await.unwrap();
            }
        })
    }
}

#[tokio::main]
async fn main() {
    dotenv().ok();
    env_logger::init();

    let token = env::var("TGBOT_TOKEN").expect("TGBOT_TOKEN is not set");
    let photo_path = env::var("TGBOT_PHOTO_PATH").expect("TGBOT_PHOTO_PATH is not set");
    let photo_url = env::var("TGBOT_PHOTO_URL").expect("TGBOT_PHOTO_URL is not set");
    let video_path = env::var("TGBOT_VIDEO_PATH").expect("TGBOT_VIDEO_PATH is not set");
    let api = Api::new(token).expect("Failed to create API");
    LongPoll::new(
        api.clone(),
        Handler {
            api,
            photo_path,
            photo_url,
            video_path,
        },
    )
    .run()
    .await;
}