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 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 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 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 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 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 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 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 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 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}