Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Dialogs & History


Fetch dialogs

#![allow(unused)]
fn main() {
// Fetch up to N dialogs (returns the most recent first)
let dialogs = client.get_dialogs(50).await?;

for d in &dialogs {
    println!("{}: {} unread: top msg: {}",
        d.title(), d.unread_count(), d.top_message());
}
}

Dialog accessors

MethodReturnDescription
d.title()StringChat name
d.peer()Option<&tl::enums::Peer>The peer for this dialog
d.unread_count()i32Unread message count
d.top_message()i32ID of the latest message

DialogIter: lazy paginated iterator

#![allow(unused)]
fn main() {
let mut iter = client.iter_dialogs();

// Total count (available after first page is fetched)
if let Some(total) = iter.total() {
    println!("Total dialogs: {total}");
}

while let Some(dialog) = iter.next(&client).await? {
    println!("{}", dialog.title());
}
}
MethodDescription
client.iter_dialogs()Create iterator
iter.total()Option<i32>: total count after first fetch
iter.next(&client)async → Option<Dialog>

MessageIter: lazy message history

#![allow(unused)]
fn main() {
let mut iter = client.iter_messages(peer.clone());

// Total count of messages in this chat
if let Some(total) = iter.total() {
    println!("Total messages: {total}");
}

while let Some(msg) = iter.next(&client).await? {
    println!("[{}] {}", msg.id, msg.message);
}
}
MethodDescription
client.iter_messages(peer)Create iterator (newest first)
iter.total()Option<i32>: total message count after first fetch
iter.next(&client)async → Option<tl::types::Message>

Fetch messages directly

#![allow(unused)]
fn main() {
// Latest N messages from a peer
let messages = client.get_messages(peer.clone(), 20).await?;

// Specific message IDs
let messages = client.get_messages_by_id(peer.clone(), &[100, 101, 102]).await?;
// Returns Vec<Option<tl::enums::Message>>: None if not found

// Pinned message
let pinned = client.get_pinned_message(peer.clone()).await?;

// The message a given message replies to
let parent = client.get_reply_to_message(peer.clone(), msg_id).await?;
}

Scheduled messages

#![allow(unused)]
fn main() {
// List all scheduled messages
let scheduled = client.get_scheduled_messages(peer.clone()).await?;

// Cancel a scheduled message
client.delete_scheduled_messages(peer.clone(), &[scheduled_id]).await?;
}

Dialog management

#![allow(unused)]
fn main() {
// Mark all messages as read
client.mark_as_read(peer.clone()).await?;

// Clear @mention badges
client.clear_mentions(peer.clone()).await?;

// Leave and remove from dialog list
client.delete_dialog(peer.clone()).await?;

// Join a public group/channel
client.join_chat("@somegroup").await?;

// Accept a private invite link
client.accept_invite_link("https://t.me/joinchat/AbCdEfG").await?;

// Parse invite hash from any link format
let hash = Client::parse_invite_hash("https://t.me/+AbCdEfG12345");
}