rust_tdlib/
lib.rs

1//! rust-tdlib is a wrapper for [TDlib (Telegram Database library)](https://core.telegram.org/tdlib).
2//! It allows you to make all the things that you can do with real telegram. So, yes, you can build your own telegram client using Rust language.
3//!
4//! First of all you have to initialize client. Your steps:
5//! 1. use [WorkerBuilder](crate::client::worker::WorkerBuilder) to build a [Worker](crate::client::worker::Worker).
6//! 2. start worker.
7//! 3. initialize [TdlibParameters](crate::types::TdlibParameters) with two required parameters: api_id and api_hash.
8//! 4. create new [Client](crate::client::client::Client) with [ClientBuilder](crate::client::client::ClientBuilder).
9//! 5. [Authorize](crate::client::worker::Worker::auth_client) it with worker.
10//! 6. write your own code to interact with Telegram.
11//! ```
12//! use rust_tdlib::{client::{Client, Worker}, tdjson, types::*};
13//! #[tokio::main]
14//! async fn main() {
15//!     let mut worker = Worker::builder().build().unwrap();
16//!     let waiter = worker.start();
17//!     let tdlib_params = TdlibParameters::builder().api_id(env!("API_ID").parse::<i32>().unwrap()).api_hash(env!("API_HASH")).build();
18//!     let client = rust_tdlib::client::Client::builder().with_tdlib_parameters(tdlib_params).build();
19//!     let (client_state, client) = worker.bind_client(client1).await.unwrap();
20//!     let me = client.get_me(GetMe::builder().build()).await.unwrap();
21//!     println!("{:?}", me);
22//! }
23//! ```
24//!
25//! You can read all updates, received from Telegram server, such as: new messages, chats updates, new chats, user updates and so on. All updates varians declared within [Update](crate::types::Update).
26//! ```
27//! use rust_tdlib::{client::{Client, Worker}, types::{Update, TdlibParameters}};
28//! #[tokio::main]
29//! async fn main() {
30//!     let (sender, mut receiver) = tokio::sync::mpsc::channel::<Update>(10);
31//!     let tdlib_params = TdlibParameters::builder().api_id(env!("API_ID").parse::<i32>().unwrap()).api_hash(env!("API_HASH")).build();
32//!     let client = rust_tdlib::client::Client::builder().with_tdlib_parameters(tdlib_params).with_updates_sender(sender).build();
33//!     let mut worker = Worker::builder().build().unwrap();
34//!     let waiter = worker.start();
35//!     let (client_state, client) = worker.auth_client(client).await.unwrap();
36//!     if let Some(message) = receiver.recv().await.unwrap() {
37//!         eprintln!("updates handler received {:?}", message);
38//!     }
39//! }
40//! ```
41#![allow(
42    clippy::borrowed_box,
43    clippy::upper_case_acronyms,
44    clippy::field_reassign_with_default,
45    clippy::manual_non_exhaustive
46)]
47
48#[macro_use]
49extern crate serde_derive;
50
51#[cfg(feature = "client")]
52pub mod client;
53
54#[cfg(feature = "tdjson")]
55pub mod tdjson;
56
57pub mod errors;
58pub mod types;
59
60mod utils;