22个版本

0.3.1 2019年12月10日
0.3.0 2019年6月12日
0.2.10 2018年9月11日
0.2.9 2018年5月19日
0.0.4 2016年12月31日

#995 in 网络编程


4 crate中使用

MIT/Apache

400KB
2K SLoC

Telebot - Rust语言的Telegram机器人库

Travis Build Status License MIT Crates.io doc.rs

此库允许您使用Rust语言编写Telegram机器人。它是Telegram机器人API的几乎完整的包装器,并使用hyper向Telegram服务器发送请求。每个Telegram函数调用都返回一个future,它携带实际的机器人和答案。

用法

将其添加到您的 Cargo.toml

[dependencies]
telebot = "0.3.0"

您需要Rust编译器的夜间版本,因为在稳定通道中尚不支持过程宏。

工作原理

此示例展示了telebot库的基本用法。它为简单的"/reply"命令创建了一个新的处理器,并回复接收到的文本。tokio事件循环每200ms轮询一次新更新,并将它们与已注册的事件进行匹配。如果命令与"/reply"匹配,它将调用该函数并执行返回的future。

use telebot::Bot;
use futures::stream::Stream;
use std::env;

// import all available functions
use telebot::functions::*;

fn main() {
    // Create the bot
    let mut bot = Bot::new(&env::var("TELEGRAM_BOT_KEY").unwrap()).update_interval(200);

    // Register a reply command which answers a message
    let handle = bot.new_cmd("/reply")
        .and_then(|(bot, msg)| {
            let mut text = msg.text.unwrap().clone();
            if text.is_empty() {
                text = "<empty>".into();
            }

            bot.message(msg.chat.id, text).send()
        })
        .for_each(|_| Ok(()));

    bot.run_with(handle);
}

其他示例

前面的示例非常简单,只有一个处理器,没有错误处理。如果您想看到一个更详细和说明性的示例,请参阅这里

在源代码中查找Telegram函数

此crate使用自定义 derive 生成Telegram API的函数。因此,每个完整的函数都用一个结构体在functions.rs中进行描述,辅助crate telebot-derive生成完整的签名。为了找到函数,可以使用结构体签名。例如,考虑sendLocation。

/// Use this method to send point on the map. On success, the sent Message is returned.
#[derive(TelegramFunction, Serialize)]
#[call = "sendLocation"]
#[answer = "Message"]
#[function = "location"]
pub struct SendLocation {
    chat_id: u32,
    latitude: f32,
    longitude: f32,
#[serde(skip_serializing_if="Option::is_none")]
    disable_notification: Option<bool>,
#[serde(skip_serializing_if="Option::is_none")]
    reply_to_message_id: Option<u32>,
#[serde(skip_serializing_if="Option::is_none")]
    reply_markup: Option<NotImplemented>
}

字段 "function" 定义了本地 API 中函数的名称。结构体中的每个可选字段都可以通过调用一个额外的函数并传入字段名称来更改。例如,要将巴黎的位置发送到聊天 432432 而不发送通知:bot.location(432432, 48.8566, 2.3522).disable_notification(true).send()

许可证

根据您选择的以下任一项许可证:

(任选其一)。

贡献

除非您明确声明,否则根据 Apache-2.0 许可证定义的,您有意提交以包含在作品中的任何贡献,应如上所述双重许可,不附加任何额外的条款或条件。

依赖

~11-21MB
~298K SLoC