Skip to main content

rust_tg_bot_raw/bot/
editing.rs

1use super::{push_opt, push_opt_str, Bot, ChatId, MessageOrBool, Result};
2use crate::request::request_parameter::RequestParameter;
3use crate::types::{input_checklist, link_preview_options, message, message_entity, poll};
4
5#[allow(dead_code)]
6impl Bot {
7    // ======================================================================
8    // Editing messages
9    // ======================================================================
10
11    /// Edits the text of a message. Internal raw method used by builder APIs.
12    ///
13    /// Calls the Telegram `editMessageText` API method.
14    pub async fn edit_message_text_raw(
15        &self,
16        text: &str,
17        chat_id: Option<ChatId>,
18        message_id: Option<i64>,
19        inline_message_id: Option<&str>,
20        parse_mode: Option<&str>,
21        entities: Option<Vec<message_entity::MessageEntity>>,
22        link_preview_options: Option<link_preview_options::LinkPreviewOptions>,
23        reply_markup: Option<serde_json::Value>,
24        business_connection_id: Option<&str>,
25    ) -> Result<MessageOrBool> {
26        let mut params = vec![RequestParameter::new(
27            "text",
28            serde_json::Value::String(text.to_owned()),
29        )];
30        push_opt(&mut params, "chat_id", &chat_id)?;
31        push_opt(&mut params, "message_id", &message_id)?;
32        push_opt_str(&mut params, "inline_message_id", inline_message_id);
33        push_opt_str(&mut params, "parse_mode", parse_mode);
34        push_opt(&mut params, "entities", &entities)?;
35        push_opt(&mut params, "link_preview_options", &link_preview_options)?;
36        push_opt(&mut params, "reply_markup", &reply_markup)?;
37        push_opt_str(
38            &mut params,
39            "business_connection_id",
40            business_connection_id,
41        );
42        self.do_post("editMessageText", params).await
43    }
44
45    /// Edits the caption of a message. Internal raw method used by builder APIs.
46    ///
47    /// Calls the Telegram `editMessageCaption` API method.
48    pub async fn edit_message_caption_raw(
49        &self,
50        chat_id: Option<ChatId>,
51        message_id: Option<i64>,
52        inline_message_id: Option<&str>,
53        caption: Option<&str>,
54        parse_mode: Option<&str>,
55        caption_entities: Option<Vec<message_entity::MessageEntity>>,
56        reply_markup: Option<serde_json::Value>,
57        show_caption_above_media: Option<bool>,
58        business_connection_id: Option<&str>,
59    ) -> Result<MessageOrBool> {
60        let mut params = Vec::new();
61        push_opt(&mut params, "chat_id", &chat_id)?;
62        push_opt(&mut params, "message_id", &message_id)?;
63        push_opt_str(&mut params, "inline_message_id", inline_message_id);
64        push_opt_str(&mut params, "caption", caption);
65        push_opt_str(&mut params, "parse_mode", parse_mode);
66        push_opt(&mut params, "caption_entities", &caption_entities)?;
67        push_opt(&mut params, "reply_markup", &reply_markup)?;
68        push_opt(
69            &mut params,
70            "show_caption_above_media",
71            &show_caption_above_media,
72        )?;
73        push_opt_str(
74            &mut params,
75            "business_connection_id",
76            business_connection_id,
77        );
78        self.do_post("editMessageCaption", params).await
79    }
80
81    /// Edits the media content of a message. Internal raw method used by builder APIs.
82    ///
83    /// Calls the Telegram `editMessageMedia` API method.
84    pub async fn edit_message_media_raw(
85        &self,
86        media: serde_json::Value,
87        chat_id: Option<ChatId>,
88        message_id: Option<i64>,
89        inline_message_id: Option<&str>,
90        reply_markup: Option<serde_json::Value>,
91        business_connection_id: Option<&str>,
92    ) -> Result<MessageOrBool> {
93        let mut params = vec![RequestParameter::new("media", media)];
94        push_opt(&mut params, "chat_id", &chat_id)?;
95        push_opt(&mut params, "message_id", &message_id)?;
96        push_opt_str(&mut params, "inline_message_id", inline_message_id);
97        push_opt(&mut params, "reply_markup", &reply_markup)?;
98        push_opt_str(
99            &mut params,
100            "business_connection_id",
101            business_connection_id,
102        );
103        self.do_post("editMessageMedia", params).await
104    }
105
106    /// Edits the reply markup of a message. Internal raw method used by builder APIs.
107    ///
108    /// Calls the Telegram `editMessageReplyMarkup` API method.
109    pub async fn edit_message_reply_markup_raw(
110        &self,
111        chat_id: Option<ChatId>,
112        message_id: Option<i64>,
113        inline_message_id: Option<&str>,
114        reply_markup: Option<serde_json::Value>,
115        business_connection_id: Option<&str>,
116    ) -> Result<MessageOrBool> {
117        let mut params = Vec::new();
118        push_opt(&mut params, "chat_id", &chat_id)?;
119        push_opt(&mut params, "message_id", &message_id)?;
120        push_opt_str(&mut params, "inline_message_id", inline_message_id);
121        push_opt(&mut params, "reply_markup", &reply_markup)?;
122        push_opt_str(
123            &mut params,
124            "business_connection_id",
125            business_connection_id,
126        );
127        self.do_post("editMessageReplyMarkup", params).await
128    }
129
130    /// Use this method to edit live location messages.
131    ///
132    /// Calls the Telegram `editMessageLiveLocation` API method.
133    pub async fn edit_message_live_location_raw(
134        &self,
135        latitude: f64,
136        longitude: f64,
137        chat_id: Option<ChatId>,
138        message_id: Option<i64>,
139        inline_message_id: Option<&str>,
140        horizontal_accuracy: Option<f64>,
141        heading: Option<i64>,
142        proximity_alert_radius: Option<i64>,
143        reply_markup: Option<serde_json::Value>,
144        live_period: Option<i64>,
145        business_connection_id: Option<&str>,
146    ) -> Result<MessageOrBool> {
147        let mut params = vec![
148            RequestParameter::new("latitude", serde_json::to_value(latitude)?),
149            RequestParameter::new("longitude", serde_json::to_value(longitude)?),
150        ];
151        push_opt(&mut params, "chat_id", &chat_id)?;
152        push_opt(&mut params, "message_id", &message_id)?;
153        push_opt_str(&mut params, "inline_message_id", inline_message_id);
154        push_opt(&mut params, "horizontal_accuracy", &horizontal_accuracy)?;
155        push_opt(&mut params, "heading", &heading)?;
156        push_opt(
157            &mut params,
158            "proximity_alert_radius",
159            &proximity_alert_radius,
160        )?;
161        push_opt(&mut params, "reply_markup", &reply_markup)?;
162        push_opt(&mut params, "live_period", &live_period)?;
163        push_opt_str(
164            &mut params,
165            "business_connection_id",
166            business_connection_id,
167        );
168        self.do_post("editMessageLiveLocation", params).await
169    }
170
171    /// Use this method to stop updating a live location message.
172    ///
173    /// Calls the Telegram `stopMessageLiveLocation` API method.
174    pub async fn stop_message_live_location_raw(
175        &self,
176        chat_id: Option<ChatId>,
177        message_id: Option<i64>,
178        inline_message_id: Option<&str>,
179        reply_markup: Option<serde_json::Value>,
180        business_connection_id: Option<&str>,
181    ) -> Result<MessageOrBool> {
182        let mut params = Vec::new();
183        push_opt(&mut params, "chat_id", &chat_id)?;
184        push_opt(&mut params, "message_id", &message_id)?;
185        push_opt_str(&mut params, "inline_message_id", inline_message_id);
186        push_opt(&mut params, "reply_markup", &reply_markup)?;
187        push_opt_str(
188            &mut params,
189            "business_connection_id",
190            business_connection_id,
191        );
192        self.do_post("stopMessageLiveLocation", params).await
193    }
194
195    /// Use this method to edit a checklist message sent by the bot on behalf of a business account.
196    ///
197    /// Calls the Telegram `editMessageChecklist` API method.
198    pub async fn edit_message_checklist_raw(
199        &self,
200        business_connection_id: &str,
201        chat_id: i64,
202        message_id: i64,
203        checklist: input_checklist::InputChecklist,
204        reply_markup: Option<serde_json::Value>,
205    ) -> Result<message::Message> {
206        let mut params = vec![
207            RequestParameter::new(
208                "business_connection_id",
209                serde_json::Value::String(business_connection_id.to_owned()),
210            ),
211            RequestParameter::new("chat_id", serde_json::to_value(chat_id)?),
212            RequestParameter::new("message_id", serde_json::to_value(message_id)?),
213            RequestParameter::new("checklist", serde_json::to_value(&checklist)?),
214        ];
215        push_opt(&mut params, "reply_markup", &reply_markup)?;
216        self.do_post("editMessageChecklist", params).await
217    }
218
219    /// Use this method to stop a poll which was sent by the bot.
220    ///
221    /// Calls the Telegram `stopPoll` API method.
222    pub async fn stop_poll_raw(
223        &self,
224        chat_id: ChatId,
225        message_id: i64,
226        reply_markup: Option<serde_json::Value>,
227        business_connection_id: Option<&str>,
228    ) -> Result<poll::Poll> {
229        let mut params = vec![
230            RequestParameter::new("chat_id", serde_json::to_value(&chat_id)?),
231            RequestParameter::new("message_id", serde_json::to_value(message_id)?),
232        ];
233        push_opt(&mut params, "reply_markup", &reply_markup)?;
234        push_opt_str(
235            &mut params,
236            "business_connection_id",
237            business_connection_id,
238        );
239        self.do_post("stopPoll", params).await
240    }
241}