grammers_client/update/
inline_send.rs1use std::fmt;
10
11use grammers_mtsender::InvocationError;
12use grammers_session::types::{PeerId, PeerRef};
13use grammers_session::updates::State;
14use grammers_tl_types as tl;
15
16use crate::Client;
17use crate::message::InputMessage;
18use crate::peer::{Peer, PeerMap, User};
19
20#[derive(Clone)]
24pub struct InlineSend {
25 pub raw: tl::enums::Update,
26 pub state: State,
27 pub(crate) client: Client,
28 pub(crate) peers: PeerMap,
29}
30
31impl InlineSend {
32 fn update(&self) -> &tl::types::UpdateBotInlineSend {
33 match &self.raw {
34 tl::enums::Update::BotInlineSend(update) => update,
35 _ => unreachable!(),
36 }
37 }
38
39 pub fn text(&self) -> &str {
41 self.update().query.as_str()
42 }
43
44 pub fn sender_id(&self) -> PeerId {
46 PeerId::user_unchecked(self.update().user_id)
47 }
48
49 pub async fn sender_ref(
51 &self,
52 ) -> Result<Option<PeerRef>, Box<dyn std::error::Error + Send + Sync>> {
53 self.peers.get_ref(self.sender_id()).await
54 }
55
56 pub fn sender(&self) -> Option<&User> {
58 match self.peers.get(self.sender_id()) {
59 Some(Peer::User(user)) => Some(user),
60 None => None,
61 _ => unreachable!(),
62 }
63 }
64
65 pub fn result_id(&self) -> &str {
67 self.update().id.as_str()
68 }
69
70 pub fn message_id(&self) -> Option<tl::enums::InputBotInlineMessageId> {
74 self.update().msg_id.clone()
75 }
76
77 pub async fn edit_message(
81 &self,
82 input_message: impl Into<InputMessage>,
83 ) -> Result<Option<bool>, InvocationError> {
84 let msg_id = match self.update().msg_id.clone() {
85 None => return Ok(None),
86 Some(msg_id) => msg_id,
87 };
88
89 Ok(Some(
90 self.client
91 .edit_inline_message(msg_id, input_message.into())
92 .await?,
93 ))
94 }
95}
96
97impl fmt::Debug for InlineSend {
98 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
99 f.debug_struct("InlineSend")
100 .field("text", &self.text())
101 .field("sender", &self.sender())
102 .field("result_id", &self.result_id())
103 .field("message_id", &self.message_id())
104 .finish()
105 }
106}