11 个版本

0.4.3 2023年4月9日
0.4.2 2023年3月24日
0.4.1 2022年8月16日
0.4.0 2022年7月2日
0.1.0-beta.0 2020年12月25日

#999 in 网页编程

MIT 许可证

4MB
114K SLoC

rust-tdlib

Rust 的 TDlib 客户端。该库允许您与 Telegram 数据库库进行交互。目前支持 tdlib v1.8.0。

特性

  • 客户端 - 提供与 TDlib API 的完全集成。参见 examples 目录。默认启用。启用此特性后,rust-tdlib 仅提供 TDlib 类型。

运行示例

  1. 构建 tdlib.
  2. 注册 您的应用并获取 api_hashapi_id
  3. RUST_LOG=infoAPI_ID=api_idAPI_HASH=api_hash cargo run--example main
  4. RUST_LOG=infoAPI_ID=api_idAPI_HASH=api_hash cargo run--example read_updates

lib.rs:

rust-tdlib 是 TDlib (Telegram 数据库库) 的包装器。它允许您完成所有可以在真实 Telegram 中完成的事情。因此,是的,您可以使用 Rust 语言构建自己的 Telegram 客户端。

首先,您必须初始化客户端。您的步骤

  1. 使用 WorkerBuilder 构建 Worker
  2. 启动 worker。
  3. 使用两个必需参数:api_id 和 api_hash 初始化 TdlibParameters
  4. 使用 ClientBuilder 创建新的 Client
  5. 使用 worker 授权 它。
  6. 编写您自己的代码以与 Telegram 交互。
use rust_tdlib::{client::{Client, Worker}, tdjson, types::*};
#[tokio::main]
async fn main() {
    let mut worker = Worker::builder().build().unwrap();
    let waiter = worker.start();
    let tdlib_params = TdlibParameters::builder().api_id(env!("API_ID").parse::<i32>().unwrap()).api_hash(env!("API_HASH")).build();
    let client = rust_tdlib::client::Client::builder().with_tdlib_parameters(tdlib_params).build();
    let (client_state, client) = worker.bind_client(client1).await.unwrap();
    let me = client.get_me(GetMe::builder().build()).await.unwrap();
    println!("{:?}", me);
}

您可以读取从 Telegram 服务器接收的所有更新,例如:新消息、聊天更新、新聊天、用户更新等。所有更新变体都在 Update 中声明。

use rust_tdlib::{client::{Client, Worker}, types::{Update, TdlibParameters}};
#[tokio::main]
async fn main() {
    let (sender, mut receiver) = tokio::sync::mpsc::channel::<Update>(10);
    let tdlib_params = TdlibParameters::builder().api_id(env!("API_ID").parse::<i32>().unwrap()).api_hash(env!("API_HASH")).build();
    let client = rust_tdlib::client::Client::builder().with_tdlib_parameters(tdlib_params).with_updates_sender(sender).build();
    let mut worker = Worker::builder().build().unwrap();
    let waiter = worker.start();
    let (client_state, client) = worker.auth_client(client).await.unwrap();
    if let Some(message) = receiver.recv().await.unwrap() {
        eprintln!("updates handler received {:?}", message);
    }
}

依赖项

~1.5–3.5MB
~71K SLoC