tgbot 0.47.0

A Telegram Bot library
Documentation
#![allow(missing_docs)]
use std::io::Cursor;

use tgbot::types::*;

mod cx;

use cx::Cx;

#[tokio::test]
async fn execute() {
    let mut cx = Cx::new().await;
    cx.execute_batch([
        (
            "send-media-group-base",
            SendMediaGroup::new(
                1,
                MediaGroup::new(vec![
                    InputMediaDocument::from(InputFileReader::from(Cursor::new("document-1"))),
                    InputMediaDocument::from(InputFileReader::from(Cursor::new("document-2"))),
                ])
                .unwrap(),
            ),
            |x| {
                assert_eq!(x.len(), 2);
                for i in x {
                    assert!(matches!(i.data, MessageData::Document(_)));
                }
            },
        ),
        (
            "send-media-group-all",
            SendMediaGroup::new(
                1,
                MediaGroup::new(vec![
                    MediaGroupItem::from(InputMediaAudio::from(InputFileReader::from(Cursor::new("test-audio")))),
                    MediaGroupItem::from(InputMediaDocument::from(InputFileReader::from(Cursor::new(
                        "test-document",
                    )))),
                    MediaGroupItem::from(InputMediaLivePhoto::from((
                        InputFile::file_id("file-id"),
                        InputFile::file_id("photo-id"),
                    ))),
                    MediaGroupItem::from(InputMediaPhoto::from(InputFileReader::from(Cursor::new(
                        "test-photo-1",
                    )))),
                    MediaGroupItem::from(InputMediaPhoto::from(Cursor::new("test-photo-2")).with_caption("caption")),
                    MediaGroupItem::from(
                        InputMediaVideo::from(InputFileReader::from(Cursor::new("test-video")))
                            .with_cover(InputFile::url("cover-url")),
                    ),
                    MediaGroupItem::from(
                        InputMediaAudio::from(InputFile::file_id("file-id"))
                            .with_thumbnail(InputFile::url("thumb-url")),
                    ),
                    MediaGroupItem::from(
                        InputMediaDocument::from(InputFile::file_id("file-id"))
                            .with_thumbnail(InputFile::url("thumb-url")),
                    ),
                    MediaGroupItem::from(
                        InputMediaVideo::from(InputFile::file_id("file-id"))
                            .with_thumbnail(InputFile::url("thumb-url")),
                    ),
                ])
                .unwrap(),
            )
            .with_allow_paid_broadcast(true)
            .with_business_connection_id("id")
            .with_direct_messages_topic_id(1)
            .with_disable_notification(true)
            .with_message_effect_id("effect-id")
            .with_message_thread_id(1)
            .with_protect_content(true)
            .with_reply_parameters(ReplyParameters::new(1)),
            |x| {
                assert_eq!(x.len(), 9);
                assert!(matches!(x[0].data, MessageData::Audio(_)));
                assert!(matches!(x[1].data, MessageData::Document(_)));
                assert!(matches!(x[2].data, MessageData::LivePhoto(_)));
                assert!(matches!(x[3].data, MessageData::Photo(_)));
                assert!(matches!(x[4].data, MessageData::Photo(_)));
                assert!(matches!(x[5].data, MessageData::Video(_)));
                assert!(matches!(x[6].data, MessageData::Audio(_)));
                assert!(matches!(x[7].data, MessageData::Document(_)));
                assert!(matches!(x[8].data, MessageData::Video(_)));
            },
        ),
    ])
    .await;

    cx.execute_batch([
        (
            "send-paid-media-base",
            SendPaidMedia::new(
                1,
                InputPaidMediaGroup::new([InputPaidMediaPhoto::from(InputFile::file_id("file-id"))]).unwrap(),
                100,
            ),
            |x| {
                assert_eq!(x.id, 1);
                if let MessageData::PaidMedia(data) = x.data {
                    assert_eq!(data.star_count, 100);
                    assert_eq!(data.paid_media.len(), 1);
                    assert!(matches!(data.paid_media[0], PaidMedia::Photo(_)));
                } else {
                    panic!("Got an unexpected message data: {:?}", x.data);
                }
            },
        ),
        (
            "send-paid-media-all",
            SendPaidMedia::new(
                1,
                InputPaidMediaGroup::new([
                    InputPaidMedia::from(InputPaidMediaPhoto::from(InputFile::file_id("file-id"))),
                    InputPaidMedia::from(InputPaidMediaLivePhoto::from((
                        InputFile::file_id("media-id"),
                        InputFile::file_id("photo-id"),
                    ))),
                    InputPaidMedia::from(InputPaidMediaVideo::from(Cursor::new(b"test-video-1"))),
                    InputPaidMedia::from(
                        InputPaidMediaVideo::from(Cursor::new(b"test-video-2"))
                            .with_cover(InputFile::file_id("test-cover"))
                            .with_duration(10)
                            .with_height(200)
                            .with_start_timestamp(0)
                            .with_supports_streaming(true)
                            .with_thumbnail(InputFile::file_id("test-thumbnail"))
                            .with_width(200),
                    ),
                ])
                .unwrap(),
                100,
            )
            .with_allow_paid_broadcast(true)
            .with_business_connection_id("c-id")
            .with_caption(("caption", [TextEntity::bold(0..1)]))
            .with_direct_messages_topic_id(1)
            .with_disable_notification(true)
            .with_message_thread_id(1)
            .with_payload("payload")
            .with_protect_content(true)
            .with_reply_parameters(ReplyParameters::new(1))
            .with_reply_markup(ForceReply::new(true))
            .with_suggested_post_parameters(SuggestedPostParameters::default())
            .with_show_caption_above_media(true),
            |x| {
                assert_eq!(x.id, 1);
                if let MessageData::PaidMedia(data) = x.data {
                    assert_eq!(data.star_count, 100);
                    assert_eq!(data.paid_media.len(), 4);
                    assert!(matches!(data.paid_media[0], PaidMedia::Photo(_)));
                    assert!(matches!(data.paid_media[1], PaidMedia::LivePhoto(_)));
                    assert!(matches!(data.paid_media[2], PaidMedia::Video(_)));
                    assert!(matches!(data.paid_media[3], PaidMedia::Preview(_)));
                } else {
                    panic!("Got an unexpected message data: {:?}", x.data);
                }
            },
        ),
    ])
    .await;
}