1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
use crate::{types, Client};
pub use grammers_mtsender::{AuthorizationError, InvocationError};
use grammers_tl_types as tl;
use std::io;
use std::time::{SystemTime, UNIX_EPOCH};
fn generate_random_message_id() -> i64 {
SystemTime::now()
.duration_since(UNIX_EPOCH)
.expect("system time is before epoch")
.as_nanos() as i64
}
impl Client {
pub async fn send_message(
&mut self,
chat: tl::enums::InputPeer,
message: types::Message,
) -> Result<(), InvocationError> {
self.invoke(&tl::functions::messages::SendMessage {
no_webpage: !message.link_preview,
silent: message.silent,
background: message.background,
clear_draft: message.clear_draft,
peer: chat,
reply_to_msg_id: message.reply_to,
message: message.text,
random_id: generate_random_message_id(),
reply_markup: message.reply_markup,
entities: if message.entities.is_empty() {
None
} else {
Some(message.entities)
},
schedule_date: message.schedule_date,
})
.await?;
Ok(())
}
pub async fn input_peer_for_username(
&mut self,
username: &str,
) -> Result<tl::enums::InputPeer, InvocationError> {
if username.eq_ignore_ascii_case("me") {
Ok(tl::enums::InputPeer::PeerSelf(tl::types::InputPeerSelf {}))
} else if let Some(user) = self.resolve_username(username).await? {
Ok(tl::types::InputPeerUser {
user_id: user.id,
access_hash: user.access_hash.unwrap(),
}
.into())
} else {
Err(InvocationError::IO(io::Error::new(
io::ErrorKind::NotFound,
"no user has that username",
)))
}
}
}