Skip to main content

rust_tg_bot_raw/bot/
media.rs

1use super::{input_file_param, push_opt, push_opt_file, push_opt_str, Bot, ChatId, Result};
2use crate::request::request_parameter::RequestParameter;
3use crate::types::{files, message, message_entity, reply, suggested_post};
4
5#[allow(dead_code)]
6impl Bot {
7    // ======================================================================
8    // Sending media
9    // ======================================================================
10
11    /// Sends a photo. Internal raw method used by builder APIs.
12    ///
13    /// Calls the Telegram `sendPhoto` API method.
14    pub async fn send_photo_raw(
15        &self,
16        chat_id: ChatId,
17        photo: files::input_file::InputFile,
18        caption: Option<&str>,
19        parse_mode: Option<&str>,
20        caption_entities: Option<Vec<message_entity::MessageEntity>>,
21        disable_notification: Option<bool>,
22        protect_content: Option<bool>,
23        reply_parameters: Option<reply::ReplyParameters>,
24        reply_markup: Option<serde_json::Value>,
25        message_thread_id: Option<i64>,
26        has_spoiler: Option<bool>,
27        business_connection_id: Option<&str>,
28        message_effect_id: Option<&str>,
29        allow_paid_broadcast: Option<bool>,
30        show_caption_above_media: Option<bool>,
31        direct_messages_topic_id: Option<i64>,
32        suggested_post_parameters: Option<suggested_post::SuggestedPostParameters>,
33    ) -> Result<message::Message> {
34        let mut params = vec![
35            RequestParameter::new("chat_id", serde_json::to_value(&chat_id)?),
36            input_file_param("photo", photo),
37        ];
38        push_opt_str(&mut params, "caption", caption);
39        push_opt_str(&mut params, "parse_mode", parse_mode);
40        push_opt(&mut params, "caption_entities", &caption_entities)?;
41        push_opt(&mut params, "disable_notification", &disable_notification)?;
42        push_opt(&mut params, "protect_content", &protect_content)?;
43        push_opt(&mut params, "reply_parameters", &reply_parameters)?;
44        push_opt(&mut params, "reply_markup", &reply_markup)?;
45        push_opt(&mut params, "message_thread_id", &message_thread_id)?;
46        push_opt(&mut params, "has_spoiler", &has_spoiler)?;
47        push_opt_str(
48            &mut params,
49            "business_connection_id",
50            business_connection_id,
51        );
52        push_opt_str(&mut params, "message_effect_id", message_effect_id);
53        push_opt(&mut params, "allow_paid_broadcast", &allow_paid_broadcast)?;
54        push_opt(
55            &mut params,
56            "show_caption_above_media",
57            &show_caption_above_media,
58        )?;
59        push_opt(
60            &mut params,
61            "direct_messages_topic_id",
62            &direct_messages_topic_id,
63        )?;
64        push_opt(
65            &mut params,
66            "suggested_post_parameters",
67            &suggested_post_parameters,
68        )?;
69        self.do_post("sendPhoto", params).await
70    }
71
72    /// Sends an audio file. Internal raw method used by builder APIs.
73    ///
74    /// Calls the Telegram `sendAudio` API method.
75    pub async fn send_audio_raw(
76        &self,
77        chat_id: ChatId,
78        audio: files::input_file::InputFile,
79        caption: Option<&str>,
80        parse_mode: Option<&str>,
81        caption_entities: Option<Vec<message_entity::MessageEntity>>,
82        duration: Option<i64>,
83        performer: Option<&str>,
84        title: Option<&str>,
85        thumbnail: Option<files::input_file::InputFile>,
86        disable_notification: Option<bool>,
87        protect_content: Option<bool>,
88        reply_parameters: Option<reply::ReplyParameters>,
89        reply_markup: Option<serde_json::Value>,
90        message_thread_id: Option<i64>,
91        business_connection_id: Option<&str>,
92        message_effect_id: Option<&str>,
93        allow_paid_broadcast: Option<bool>,
94        direct_messages_topic_id: Option<i64>,
95        suggested_post_parameters: Option<suggested_post::SuggestedPostParameters>,
96    ) -> Result<message::Message> {
97        let mut params = vec![
98            RequestParameter::new("chat_id", serde_json::to_value(&chat_id)?),
99            input_file_param("audio", audio),
100        ];
101        push_opt_str(&mut params, "caption", caption);
102        push_opt_str(&mut params, "parse_mode", parse_mode);
103        push_opt(&mut params, "caption_entities", &caption_entities)?;
104        push_opt(&mut params, "duration", &duration)?;
105        push_opt_str(&mut params, "performer", performer);
106        push_opt_str(&mut params, "title", title);
107        push_opt_file(&mut params, "thumbnail", thumbnail);
108        push_opt(&mut params, "disable_notification", &disable_notification)?;
109        push_opt(&mut params, "protect_content", &protect_content)?;
110        push_opt(&mut params, "reply_parameters", &reply_parameters)?;
111        push_opt(&mut params, "reply_markup", &reply_markup)?;
112        push_opt(&mut params, "message_thread_id", &message_thread_id)?;
113        push_opt_str(
114            &mut params,
115            "business_connection_id",
116            business_connection_id,
117        );
118        push_opt_str(&mut params, "message_effect_id", message_effect_id);
119        push_opt(&mut params, "allow_paid_broadcast", &allow_paid_broadcast)?;
120        push_opt(
121            &mut params,
122            "direct_messages_topic_id",
123            &direct_messages_topic_id,
124        )?;
125        push_opt(
126            &mut params,
127            "suggested_post_parameters",
128            &suggested_post_parameters,
129        )?;
130        self.do_post("sendAudio", params).await
131    }
132
133    /// Sends a general file. Internal raw method used by builder APIs.
134    ///
135    /// Calls the Telegram `sendDocument` API method.
136    pub async fn send_document_raw(
137        &self,
138        chat_id: ChatId,
139        document: files::input_file::InputFile,
140        caption: Option<&str>,
141        parse_mode: Option<&str>,
142        caption_entities: Option<Vec<message_entity::MessageEntity>>,
143        disable_content_type_detection: Option<bool>,
144        thumbnail: Option<files::input_file::InputFile>,
145        disable_notification: Option<bool>,
146        protect_content: Option<bool>,
147        reply_parameters: Option<reply::ReplyParameters>,
148        reply_markup: Option<serde_json::Value>,
149        message_thread_id: Option<i64>,
150        business_connection_id: Option<&str>,
151        message_effect_id: Option<&str>,
152        allow_paid_broadcast: Option<bool>,
153        direct_messages_topic_id: Option<i64>,
154        suggested_post_parameters: Option<suggested_post::SuggestedPostParameters>,
155    ) -> Result<message::Message> {
156        let mut params = vec![
157            RequestParameter::new("chat_id", serde_json::to_value(&chat_id)?),
158            input_file_param("document", document),
159        ];
160        push_opt_str(&mut params, "caption", caption);
161        push_opt_str(&mut params, "parse_mode", parse_mode);
162        push_opt(&mut params, "caption_entities", &caption_entities)?;
163        push_opt(
164            &mut params,
165            "disable_content_type_detection",
166            &disable_content_type_detection,
167        )?;
168        push_opt_file(&mut params, "thumbnail", thumbnail);
169        push_opt(&mut params, "disable_notification", &disable_notification)?;
170        push_opt(&mut params, "protect_content", &protect_content)?;
171        push_opt(&mut params, "reply_parameters", &reply_parameters)?;
172        push_opt(&mut params, "reply_markup", &reply_markup)?;
173        push_opt(&mut params, "message_thread_id", &message_thread_id)?;
174        push_opt_str(
175            &mut params,
176            "business_connection_id",
177            business_connection_id,
178        );
179        push_opt_str(&mut params, "message_effect_id", message_effect_id);
180        push_opt(&mut params, "allow_paid_broadcast", &allow_paid_broadcast)?;
181        push_opt(
182            &mut params,
183            "direct_messages_topic_id",
184            &direct_messages_topic_id,
185        )?;
186        push_opt(
187            &mut params,
188            "suggested_post_parameters",
189            &suggested_post_parameters,
190        )?;
191        self.do_post("sendDocument", params).await
192    }
193
194    /// Sends a video file. Internal raw method used by builder APIs.
195    ///
196    /// Calls the Telegram `sendVideo` API method.
197    pub async fn send_video_raw(
198        &self,
199        chat_id: ChatId,
200        video: files::input_file::InputFile,
201        duration: Option<i64>,
202        width: Option<i64>,
203        height: Option<i64>,
204        caption: Option<&str>,
205        parse_mode: Option<&str>,
206        caption_entities: Option<Vec<message_entity::MessageEntity>>,
207        supports_streaming: Option<bool>,
208        thumbnail: Option<files::input_file::InputFile>,
209        has_spoiler: Option<bool>,
210        show_caption_above_media: Option<bool>,
211        cover: Option<files::input_file::InputFile>,
212        start_timestamp: Option<i64>,
213        disable_notification: Option<bool>,
214        protect_content: Option<bool>,
215        reply_parameters: Option<reply::ReplyParameters>,
216        reply_markup: Option<serde_json::Value>,
217        message_thread_id: Option<i64>,
218        business_connection_id: Option<&str>,
219        message_effect_id: Option<&str>,
220        allow_paid_broadcast: Option<bool>,
221        direct_messages_topic_id: Option<i64>,
222        suggested_post_parameters: Option<suggested_post::SuggestedPostParameters>,
223    ) -> Result<message::Message> {
224        let mut params = vec![
225            RequestParameter::new("chat_id", serde_json::to_value(&chat_id)?),
226            input_file_param("video", video),
227        ];
228        push_opt(&mut params, "duration", &duration)?;
229        push_opt(&mut params, "width", &width)?;
230        push_opt(&mut params, "height", &height)?;
231        push_opt_str(&mut params, "caption", caption);
232        push_opt_str(&mut params, "parse_mode", parse_mode);
233        push_opt(&mut params, "caption_entities", &caption_entities)?;
234        push_opt(&mut params, "supports_streaming", &supports_streaming)?;
235        push_opt_file(&mut params, "thumbnail", thumbnail);
236        push_opt(&mut params, "has_spoiler", &has_spoiler)?;
237        push_opt(
238            &mut params,
239            "show_caption_above_media",
240            &show_caption_above_media,
241        )?;
242        push_opt_file(&mut params, "cover", cover);
243        push_opt(&mut params, "start_timestamp", &start_timestamp)?;
244        push_opt(&mut params, "disable_notification", &disable_notification)?;
245        push_opt(&mut params, "protect_content", &protect_content)?;
246        push_opt(&mut params, "reply_parameters", &reply_parameters)?;
247        push_opt(&mut params, "reply_markup", &reply_markup)?;
248        push_opt(&mut params, "message_thread_id", &message_thread_id)?;
249        push_opt_str(
250            &mut params,
251            "business_connection_id",
252            business_connection_id,
253        );
254        push_opt_str(&mut params, "message_effect_id", message_effect_id);
255        push_opt(&mut params, "allow_paid_broadcast", &allow_paid_broadcast)?;
256        push_opt(
257            &mut params,
258            "direct_messages_topic_id",
259            &direct_messages_topic_id,
260        )?;
261        push_opt(
262            &mut params,
263            "suggested_post_parameters",
264            &suggested_post_parameters,
265        )?;
266        self.do_post("sendVideo", params).await
267    }
268
269    /// Sends an animation (GIF or H.264/MPEG-4 AVC video without sound). Internal raw method.
270    ///
271    /// Calls the Telegram `sendAnimation` API method.
272    pub async fn send_animation_raw(
273        &self,
274        chat_id: ChatId,
275        animation: files::input_file::InputFile,
276        duration: Option<i64>,
277        width: Option<i64>,
278        height: Option<i64>,
279        caption: Option<&str>,
280        parse_mode: Option<&str>,
281        caption_entities: Option<Vec<message_entity::MessageEntity>>,
282        thumbnail: Option<files::input_file::InputFile>,
283        has_spoiler: Option<bool>,
284        show_caption_above_media: Option<bool>,
285        disable_notification: Option<bool>,
286        protect_content: Option<bool>,
287        reply_parameters: Option<reply::ReplyParameters>,
288        reply_markup: Option<serde_json::Value>,
289        message_thread_id: Option<i64>,
290        business_connection_id: Option<&str>,
291        message_effect_id: Option<&str>,
292        allow_paid_broadcast: Option<bool>,
293        direct_messages_topic_id: Option<i64>,
294        suggested_post_parameters: Option<suggested_post::SuggestedPostParameters>,
295    ) -> Result<message::Message> {
296        let mut params = vec![
297            RequestParameter::new("chat_id", serde_json::to_value(&chat_id)?),
298            input_file_param("animation", animation),
299        ];
300        push_opt(&mut params, "duration", &duration)?;
301        push_opt(&mut params, "width", &width)?;
302        push_opt(&mut params, "height", &height)?;
303        push_opt_str(&mut params, "caption", caption);
304        push_opt_str(&mut params, "parse_mode", parse_mode);
305        push_opt(&mut params, "caption_entities", &caption_entities)?;
306        push_opt_file(&mut params, "thumbnail", thumbnail);
307        push_opt(&mut params, "has_spoiler", &has_spoiler)?;
308        push_opt(
309            &mut params,
310            "show_caption_above_media",
311            &show_caption_above_media,
312        )?;
313        push_opt(&mut params, "disable_notification", &disable_notification)?;
314        push_opt(&mut params, "protect_content", &protect_content)?;
315        push_opt(&mut params, "reply_parameters", &reply_parameters)?;
316        push_opt(&mut params, "reply_markup", &reply_markup)?;
317        push_opt(&mut params, "message_thread_id", &message_thread_id)?;
318        push_opt_str(
319            &mut params,
320            "business_connection_id",
321            business_connection_id,
322        );
323        push_opt_str(&mut params, "message_effect_id", message_effect_id);
324        push_opt(&mut params, "allow_paid_broadcast", &allow_paid_broadcast)?;
325        push_opt(
326            &mut params,
327            "direct_messages_topic_id",
328            &direct_messages_topic_id,
329        )?;
330        push_opt(
331            &mut params,
332            "suggested_post_parameters",
333            &suggested_post_parameters,
334        )?;
335        self.do_post("sendAnimation", params).await
336    }
337
338    /// Sends a voice message. Internal raw method used by builder APIs.
339    ///
340    /// Calls the Telegram `sendVoice` API method.
341    pub async fn send_voice_raw(
342        &self,
343        chat_id: ChatId,
344        voice: files::input_file::InputFile,
345        caption: Option<&str>,
346        parse_mode: Option<&str>,
347        caption_entities: Option<Vec<message_entity::MessageEntity>>,
348        duration: Option<i64>,
349        disable_notification: Option<bool>,
350        protect_content: Option<bool>,
351        reply_parameters: Option<reply::ReplyParameters>,
352        reply_markup: Option<serde_json::Value>,
353        message_thread_id: Option<i64>,
354        business_connection_id: Option<&str>,
355        message_effect_id: Option<&str>,
356        allow_paid_broadcast: Option<bool>,
357        direct_messages_topic_id: Option<i64>,
358        suggested_post_parameters: Option<suggested_post::SuggestedPostParameters>,
359    ) -> Result<message::Message> {
360        let mut params = vec![
361            RequestParameter::new("chat_id", serde_json::to_value(&chat_id)?),
362            input_file_param("voice", voice),
363        ];
364        push_opt_str(&mut params, "caption", caption);
365        push_opt_str(&mut params, "parse_mode", parse_mode);
366        push_opt(&mut params, "caption_entities", &caption_entities)?;
367        push_opt(&mut params, "duration", &duration)?;
368        push_opt(&mut params, "disable_notification", &disable_notification)?;
369        push_opt(&mut params, "protect_content", &protect_content)?;
370        push_opt(&mut params, "reply_parameters", &reply_parameters)?;
371        push_opt(&mut params, "reply_markup", &reply_markup)?;
372        push_opt(&mut params, "message_thread_id", &message_thread_id)?;
373        push_opt_str(
374            &mut params,
375            "business_connection_id",
376            business_connection_id,
377        );
378        push_opt_str(&mut params, "message_effect_id", message_effect_id);
379        push_opt(&mut params, "allow_paid_broadcast", &allow_paid_broadcast)?;
380        push_opt(
381            &mut params,
382            "direct_messages_topic_id",
383            &direct_messages_topic_id,
384        )?;
385        push_opt(
386            &mut params,
387            "suggested_post_parameters",
388            &suggested_post_parameters,
389        )?;
390        self.do_post("sendVoice", params).await
391    }
392
393    /// Sends a video note (rounded square video). Internal raw method used by builder APIs.
394    ///
395    /// Calls the Telegram `sendVideoNote` API method.
396    pub async fn send_video_note_raw(
397        &self,
398        chat_id: ChatId,
399        video_note: files::input_file::InputFile,
400        duration: Option<i64>,
401        length: Option<i64>,
402        thumbnail: Option<files::input_file::InputFile>,
403        disable_notification: Option<bool>,
404        protect_content: Option<bool>,
405        reply_parameters: Option<reply::ReplyParameters>,
406        reply_markup: Option<serde_json::Value>,
407        message_thread_id: Option<i64>,
408        business_connection_id: Option<&str>,
409        message_effect_id: Option<&str>,
410        allow_paid_broadcast: Option<bool>,
411        direct_messages_topic_id: Option<i64>,
412        suggested_post_parameters: Option<suggested_post::SuggestedPostParameters>,
413    ) -> Result<message::Message> {
414        let mut params = vec![
415            RequestParameter::new("chat_id", serde_json::to_value(&chat_id)?),
416            input_file_param("video_note", video_note),
417        ];
418        push_opt(&mut params, "duration", &duration)?;
419        push_opt(&mut params, "length", &length)?;
420        push_opt_file(&mut params, "thumbnail", thumbnail);
421        push_opt(&mut params, "disable_notification", &disable_notification)?;
422        push_opt(&mut params, "protect_content", &protect_content)?;
423        push_opt(&mut params, "reply_parameters", &reply_parameters)?;
424        push_opt(&mut params, "reply_markup", &reply_markup)?;
425        push_opt(&mut params, "message_thread_id", &message_thread_id)?;
426        push_opt_str(
427            &mut params,
428            "business_connection_id",
429            business_connection_id,
430        );
431        push_opt_str(&mut params, "message_effect_id", message_effect_id);
432        push_opt(&mut params, "allow_paid_broadcast", &allow_paid_broadcast)?;
433        push_opt(
434            &mut params,
435            "direct_messages_topic_id",
436            &direct_messages_topic_id,
437        )?;
438        push_opt(
439            &mut params,
440            "suggested_post_parameters",
441            &suggested_post_parameters,
442        )?;
443        self.do_post("sendVideoNote", params).await
444    }
445
446    /// Use this method to send a group of photos, videos, documents or audios as an album.
447    ///
448    /// Calls the Telegram `sendMediaGroup` API method.
449    pub async fn send_media_group_raw(
450        &self,
451        chat_id: ChatId,
452        media: Vec<serde_json::Value>,
453        disable_notification: Option<bool>,
454        protect_content: Option<bool>,
455        message_thread_id: Option<i64>,
456        reply_parameters: Option<reply::ReplyParameters>,
457        business_connection_id: Option<&str>,
458        message_effect_id: Option<&str>,
459        allow_paid_broadcast: Option<bool>,
460        direct_messages_topic_id: Option<i64>,
461        suggested_post_parameters: Option<suggested_post::SuggestedPostParameters>,
462    ) -> Result<Vec<message::Message>> {
463        let mut params = vec![
464            RequestParameter::new("chat_id", serde_json::to_value(&chat_id)?),
465            RequestParameter::new("media", serde_json::to_value(&media)?),
466        ];
467        push_opt(&mut params, "disable_notification", &disable_notification)?;
468        push_opt(&mut params, "protect_content", &protect_content)?;
469        push_opt(&mut params, "message_thread_id", &message_thread_id)?;
470        push_opt(&mut params, "reply_parameters", &reply_parameters)?;
471        push_opt_str(
472            &mut params,
473            "business_connection_id",
474            business_connection_id,
475        );
476        push_opt_str(&mut params, "message_effect_id", message_effect_id);
477        push_opt(&mut params, "allow_paid_broadcast", &allow_paid_broadcast)?;
478        push_opt(
479            &mut params,
480            "direct_messages_topic_id",
481            &direct_messages_topic_id,
482        )?;
483        push_opt(
484            &mut params,
485            "suggested_post_parameters",
486            &suggested_post_parameters,
487        )?;
488        self.do_post("sendMediaGroup", params).await
489    }
490
491    /// Use this method to send paid media.
492    ///
493    /// Calls the Telegram `sendPaidMedia` API method.
494    pub async fn send_paid_media_raw(
495        &self,
496        chat_id: ChatId,
497        star_count: i64,
498        media: Vec<serde_json::Value>,
499        caption: Option<&str>,
500        parse_mode: Option<&str>,
501        caption_entities: Option<Vec<message_entity::MessageEntity>>,
502        show_caption_above_media: Option<bool>,
503        disable_notification: Option<bool>,
504        protect_content: Option<bool>,
505        reply_parameters: Option<reply::ReplyParameters>,
506        reply_markup: Option<serde_json::Value>,
507        business_connection_id: Option<&str>,
508        payload: Option<&str>,
509        allow_paid_broadcast: Option<bool>,
510        direct_messages_topic_id: Option<i64>,
511        suggested_post_parameters: Option<suggested_post::SuggestedPostParameters>,
512        message_thread_id: Option<i64>,
513    ) -> Result<message::Message> {
514        let mut params = vec![
515            RequestParameter::new("chat_id", serde_json::to_value(&chat_id)?),
516            RequestParameter::new("star_count", serde_json::to_value(star_count)?),
517            RequestParameter::new("media", serde_json::to_value(&media)?),
518        ];
519        push_opt_str(&mut params, "caption", caption);
520        push_opt_str(&mut params, "parse_mode", parse_mode);
521        push_opt(&mut params, "caption_entities", &caption_entities)?;
522        push_opt(
523            &mut params,
524            "show_caption_above_media",
525            &show_caption_above_media,
526        )?;
527        push_opt(&mut params, "disable_notification", &disable_notification)?;
528        push_opt(&mut params, "protect_content", &protect_content)?;
529        push_opt(&mut params, "reply_parameters", &reply_parameters)?;
530        push_opt(&mut params, "reply_markup", &reply_markup)?;
531        push_opt_str(
532            &mut params,
533            "business_connection_id",
534            business_connection_id,
535        );
536        push_opt_str(&mut params, "payload", payload);
537        push_opt(&mut params, "allow_paid_broadcast", &allow_paid_broadcast)?;
538        push_opt(
539            &mut params,
540            "direct_messages_topic_id",
541            &direct_messages_topic_id,
542        )?;
543        push_opt(
544            &mut params,
545            "suggested_post_parameters",
546            &suggested_post_parameters,
547        )?;
548        push_opt(&mut params, "message_thread_id", &message_thread_id)?;
549        self.do_post("sendPaidMedia", params).await
550    }
551}