33 个版本

0.13.0 2024年8月15日
0.12.2 2023年2月15日
0.12.0 2023年1月17日
0.11.3 2022年11月28日
0.2.0 2020年2月25日

#73 in 网页编程

Download history 2726/week @ 2024-05-03 2104/week @ 2024-05-10 2350/week @ 2024-05-17 2287/week @ 2024-05-24 2536/week @ 2024-05-31 2057/week @ 2024-06-07 2515/week @ 2024-06-14 2634/week @ 2024-06-21 2276/week @ 2024-06-28 2284/week @ 2024-07-05 3097/week @ 2024-07-12 2927/week @ 2024-07-19 3149/week @ 2024-07-26 2449/week @ 2024-08-02 3420/week @ 2024-08-09 2617/week @ 2024-08-16

12,098 每月下载量
53 个 Crates 中使用 (46 个直接使用)

MIT 许可证

2MB
35K SLoC

Rust 30K SLoC // 0.0% comments Rusty Object Notation 4.5K SLoC // 0.0% comments SQL 8 SLoC

请参阅仓库根目录下的 README.md


lib.rs:

一个功能齐全的框架,使您能够轻松使用 Telegram 机器人Rust。它处理所有困难的事情,让您只需关注业务逻辑。目前支持 Telegram Bot API 的第 7.0 版本。

要了解高级概述,请参阅 我们的 GitHub 仓库

[examples/throw_dice.rs]

use teloxide::prelude::*;

pretty_env_logger::init();
log::info!("Starting throw dice bot...");

let bot = Bot::from_env();

teloxide::repl(bot, |bot: Bot, msg: Message| async move {
    bot.send_dice(msg.chat.id).await?;
    Ok(())
})
.await;

处理更新和消息

有许多需要处理的 更新类型消息类型!通常,必须过滤特定的类型并在 handler functions 中处理它们。Teloxide 在 UpdateFilterExtMessageFilterExt 特性中为 UpdateMessage 类型提供了一些 filter methods。除了过滤之外,这些方法还会将适当类型 inject 到您的处理函数中。例如,如果您使用 Update::filter_message,则 Message 的实例将作为参数提供给您的处理函数。同样,使用 Message::filter_text 将将 String 注入到上下文中。

此外,filter_map函数可以根据模式流程注入一些依赖。下面有更多示例!

以下是一个快速示例(筛选文本消息并将文本注入处理函数中)

use teloxide::{prelude::*, types::User};

pub type Error = Box<dyn std::error::Error + Send + Sync>;

#[tokio::main]
async fn main() -> Result<(), Error> {
    let bot = Bot::from_env();
    let schema = Update::filter_message()
        /*
           Inject the `User` object representing the author of an incoming
           message into every successive handler function (1)
        */
        .filter_map(|update: Update| update.from().cloned())
        .branch(
            /*
               Use filter_text method of MessageFilterExt to accept
               only textual messages. Others will be ignored by this handler (2)
            */
            Message::filter_text().endpoint(process_text_message),
        );

    Dispatcher::builder(bot, schema).build().dispatch().await;
    Ok(())
}

/// Replies to the user's text messages
async fn process_text_message(bot: Bot, user: User, message_text: String) -> Result<(), Error> {
    /*
       The id of a chat with a user is the same as his telegram_id
       from the bot's perspective.

       Injected dependencies:
       - Bot is provided by the Dispatcher::dispatch
       - User is provided by the (1)
       - String is provided by the (2)
    */
    bot.send_message(user.id, format!("Hi! You sent: {message_text}"));
    Ok(())
}

依赖项

~9-32MB
~494K SLoC