#telegram-bot #bot-api #telegram-api #telegram #api-bindings

telegram-bot-api

Rust 对 Telegram Bot API 的绑定

3 个版本

0.1.2 2022年10月13日
0.1.1 2022年10月13日
0.1.0 2022年10月13日

#1865 in 网页编程

36 每月下载次数
用于 certsd

MIT 许可证

405KB
7K SLoC

Rust 对 Telegram Bot API 的绑定

参考 golang 项目 go-telegram-bot-api

所有方法都相当直观,如果有什么不清楚的地方,请打开一个问题或提交一个拉取请求。

本项目范围仅限于提供一个 API 包装器,不包含任何额外功能。还有其他项目可以创建带有插件和命令处理器的应用程序,无需自己设计这些。

示例

首先,将依赖项添加到您的 Cargo.toml

[dependencies]
telegram-bot-api = "0.1.0"
use telegram_bot_api::{bot, methods, types};

#[tokio::main]
async fn main() {
    let bot = bot::BotApi::new(String::from("token"), None).await;
    if bot.is_err() {
        panic!("{:?}", bot);
    }
    let bot = bot.unwrap();

    match bot.get_me().await {
        Ok(user) => {
            println!("get_me result: {:#?}", user);
        }
        Err(err) => {
            println!("err:{:?}", err);
        }
    }

    let mut entities = Vec::with_capacity(1);
    entities.push(types::MessageEntity::new_url(6, 22));
    let mut send_message = methods::SendMessage::new(
        types::ChatId::IntType(123456),
        String::from("hello https://www.google.com"),
    );
    send_message.entities = Some(entities);
    let mut btn = types::InlineKeyboardButton::new(String::from("google"));
    btn.url = Some(String::from("https://www.google.com"));
    let mut btn2 = types::InlineKeyboardButton::new(String::from("telegram"));
    btn2.url = Some(String::from("https://telegram.org"));
    let keyboard = vec![vec![btn, btn2]];
    send_message.reply_markup = Some(types::ReplyMarkup::InlineKeyboardMarkup(
        types::InlineKeyboardMarkup::new(keyboard),
    ));
    match bot.send_message(send_message).await {
        Ok(message) => {
            println!("send_message result: {:#?}", message);
        }
        Err(err) => {
            println!("err:{:?}", err);
        }
    }

    let mut get_chat_menu_button = methods::GetChatMenuButton::new();
    get_chat_menu_button.chat_id = Some(123456);
    match bot.get_chat_menu_button(get_chat_menu_button).await {
        Ok(result) => match result {
            _ => {
                println!("get_chat_menu_button result: {:#?}", result);
            }
        },
        Err(err) => {
            println!("err:{:?}", err);
        }
    }

    let mut media = Vec::new();
    media.push(types::InputMedia::InputMediaPhoto(
        types::InputMediaPhoto::new(types::InputFile::FilePath(String::from("logo_256.png"))),
    ));
    media.push(types::InputMedia::InputMediaPhoto(
        types::InputMediaPhoto::new(types::InputFile::FileID(
            String::from("AgACAgQAAx0EYIAjxwADkGNGxUhE7P-hV_54gWPJs_IKj7v4AAK3ujEbNBcRUoJ4Nhu7bEmQAQADAgADcwADKgQ"),
        )),
    ));
    media.push(types::InputMedia::InputMediaPhoto(
        types::InputMediaPhoto::new(types::InputFile::FilePath(String::from("iconbig_green.png"))),
    ));
    match bot
        .send_media_group(methods::SendMediaGroup::new(
            types::ChatId::IntType(123456),
            media,
        ))
        .await
    {
        Ok(result) => {
            println!("send_media_group result: {:#?}", result);
        }
        Err(err) => {
            println!("err:{:?}", err);
        }
    }
}

依赖项

~6–18MB
~276K SLoC