mirror of
https://github.com/teloxide/teloxide.git
synced 2024-12-31 16:40:37 +01:00
Add proper support for answer_inline_query
and answer_web_app_query
in DefaultParseMode
This commit is contained in:
parent
746302f851
commit
88eb35ad95
1 changed files with 75 additions and 6 deletions
|
@ -4,9 +4,9 @@ use url::Url;
|
||||||
|
|
||||||
use crate::{
|
use crate::{
|
||||||
payloads::{
|
payloads::{
|
||||||
CopyMessage, EditMessageCaption, EditMessageCaptionInline, EditMessageText,
|
AnswerInlineQuery, AnswerWebAppQuery, CopyMessage, EditMessageCaption,
|
||||||
EditMessageTextInline, SendAnimation, SendAudio, SendDocument, SendMessage, SendPhoto,
|
EditMessageCaptionInline, EditMessageText, EditMessageTextInline, SendAnimation, SendAudio,
|
||||||
SendPoll, SendVideo, SendVoice,
|
SendDocument, SendMessage, SendPhoto, SendPoll, SendVideo, SendVoice,
|
||||||
},
|
},
|
||||||
prelude::Requester,
|
prelude::Requester,
|
||||||
requests::{HasPayload, Output, Request},
|
requests::{HasPayload, Output, Request},
|
||||||
|
@ -145,6 +145,8 @@ where
|
||||||
B::EditMessageCaptionInline: Clone,
|
B::EditMessageCaptionInline: Clone,
|
||||||
B::SendPoll: Clone,
|
B::SendPoll: Clone,
|
||||||
B::CopyMessage: Clone,
|
B::CopyMessage: Clone,
|
||||||
|
B::AnswerInlineQuery: Clone,
|
||||||
|
B::AnswerWebAppQuery: Clone,
|
||||||
{
|
{
|
||||||
type Err = B::Err;
|
type Err = B::Err;
|
||||||
|
|
||||||
|
@ -161,7 +163,10 @@ where
|
||||||
edit_message_text_inline,
|
edit_message_text_inline,
|
||||||
edit_message_caption,
|
edit_message_caption,
|
||||||
edit_message_caption_inline,
|
edit_message_caption_inline,
|
||||||
copy_message => f, fty
|
copy_message,
|
||||||
|
answer_inline_query,
|
||||||
|
answer_web_app_query,
|
||||||
|
=> f, fty
|
||||||
}
|
}
|
||||||
|
|
||||||
requester_forward! {
|
requester_forward! {
|
||||||
|
@ -234,8 +239,6 @@ where
|
||||||
set_my_default_administrator_rights,
|
set_my_default_administrator_rights,
|
||||||
get_my_default_administrator_rights,
|
get_my_default_administrator_rights,
|
||||||
delete_my_commands,
|
delete_my_commands,
|
||||||
answer_inline_query,
|
|
||||||
answer_web_app_query,
|
|
||||||
edit_message_media,
|
edit_message_media,
|
||||||
edit_message_media_inline,
|
edit_message_media_inline,
|
||||||
edit_message_reply_markup,
|
edit_message_reply_markup,
|
||||||
|
@ -316,3 +319,69 @@ impl_visit_parse_modes! {
|
||||||
CopyMessage => [parse_mode],
|
CopyMessage => [parse_mode],
|
||||||
SendPoll => [explanation_parse_mode],
|
SendPoll => [explanation_parse_mode],
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl VisitParseModes for AnswerInlineQuery {
|
||||||
|
fn visit_parse_modes(&mut self, mut visitor: impl FnMut(&mut Option<ParseMode>)) {
|
||||||
|
for result in &mut self.results {
|
||||||
|
visit_parse_modes_in_inline_query_result(result, &mut visitor);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl VisitParseModes for AnswerWebAppQuery {
|
||||||
|
fn visit_parse_modes(&mut self, mut visitor: impl FnMut(&mut Option<ParseMode>)) {
|
||||||
|
visit_parse_modes_in_inline_query_result(&mut self.result, &mut visitor);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn visit_parse_modes_in_inline_query_result(
|
||||||
|
result: &mut InlineQueryResult,
|
||||||
|
visitor: &mut impl FnMut(&mut Option<ParseMode>),
|
||||||
|
) {
|
||||||
|
use InlineQueryResult::*;
|
||||||
|
|
||||||
|
let parse_mode = match result {
|
||||||
|
// Simply contain `parse_mode`
|
||||||
|
CachedAudio(r) => &mut r.parse_mode,
|
||||||
|
CachedDocument(r) => &mut r.parse_mode,
|
||||||
|
CachedGif(r) => &mut r.parse_mode,
|
||||||
|
CachedMpeg4Gif(r) => &mut r.parse_mode,
|
||||||
|
CachedPhoto(r) => &mut r.parse_mode,
|
||||||
|
CachedVideo(r) => &mut r.parse_mode,
|
||||||
|
CachedVoice(r) => &mut r.parse_mode,
|
||||||
|
Audio(r) => &mut r.parse_mode,
|
||||||
|
Document(r) => &mut r.parse_mode,
|
||||||
|
Gif(r) => &mut r.parse_mode,
|
||||||
|
Mpeg4Gif(r) => &mut r.parse_mode,
|
||||||
|
Photo(r) => &mut r.parse_mode,
|
||||||
|
Video(r) => &mut r.parse_mode,
|
||||||
|
Voice(r) => &mut r.parse_mode,
|
||||||
|
|
||||||
|
// Can contain parse mode if `InputMessageContent::Text`
|
||||||
|
CachedSticker(r) => match &mut r.input_message_content {
|
||||||
|
Some(InputMessageContent::Text(t)) => &mut t.parse_mode,
|
||||||
|
_ => return,
|
||||||
|
},
|
||||||
|
Article(r) => match &mut r.input_message_content {
|
||||||
|
InputMessageContent::Text(t) => &mut t.parse_mode,
|
||||||
|
_ => return,
|
||||||
|
},
|
||||||
|
Contact(r) => match &mut r.input_message_content {
|
||||||
|
Some(InputMessageContent::Text(t)) => &mut t.parse_mode,
|
||||||
|
_ => return,
|
||||||
|
},
|
||||||
|
Location(r) => match &mut r.input_message_content {
|
||||||
|
Some(InputMessageContent::Text(t)) => &mut t.parse_mode,
|
||||||
|
_ => return,
|
||||||
|
},
|
||||||
|
Venue(r) => match &mut r.input_message_content {
|
||||||
|
Some(InputMessageContent::Text(t)) => &mut t.parse_mode,
|
||||||
|
_ => return,
|
||||||
|
},
|
||||||
|
|
||||||
|
// Can't contain `parse_mode` at all
|
||||||
|
Game(_r) => return,
|
||||||
|
};
|
||||||
|
|
||||||
|
visitor(parse_mode);
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in a new issue