diff --git a/src/api_params.rs b/src/api_params.rs index c2b9071..624bb89 100644 --- a/src/api_params.rs +++ b/src/api_params.rs @@ -6,12 +6,12 @@ use crate::objects::{ InlineQueryResultCachedVoice, InlineQueryResultContact, InlineQueryResultDocument, InlineQueryResultGame, InlineQueryResultGif, InlineQueryResultLocation, InlineQueryResultMpeg4Gif, InlineQueryResultPhoto, InlineQueryResultVenue, - InlineQueryResultVideo, InlineQueryResultVoice, LabeledPrice, MaskPosition, MessageEntity, - PassportElementErrorDataField, PassportElementErrorFile, PassportElementErrorFiles, - PassportElementErrorFrontSide, PassportElementErrorReverseSide, PassportElementErrorSelfie, - PassportElementErrorTranslationFile, PassportElementErrorTranslationFiles, - PassportElementErrorUnspecified, PollType, ReplyKeyboardMarkup, ReplyKeyboardRemove, - ShippingOption, + InlineQueryResultVideo, InlineQueryResultVoice, LabeledPrice, MaskPosition, MenuButton, + MessageEntity, PassportElementErrorDataField, PassportElementErrorFile, + PassportElementErrorFiles, PassportElementErrorFrontSide, PassportElementErrorReverseSide, + PassportElementErrorSelfie, PassportElementErrorTranslationFile, + PassportElementErrorTranslationFiles, PassportElementErrorUnspecified, PollType, + ReplyKeyboardMarkup, ReplyKeyboardRemove, ShippingOption, }; use crate::ParseMode; use serde::Deserialize; @@ -2103,8 +2103,33 @@ pub struct SetMyDefaultAdministratorRightsParams { } #[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Builder)] -pub struct GetMyDefaultAdministratorRights { +pub struct GetMyDefaultAdministratorRightsParams { #[serde(skip_serializing_if = "Option::is_none")] #[builder(setter(into, strip_option), default)] pub for_channels: Option, } +#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Builder)] +pub struct AnswerWebAppQueryParams { + #[builder(setter(into))] + pub web_app_query_id: String, + + pub result: InlineQueryResult, +} + +#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Builder)] +pub struct SetChatMenuButtonParams { + #[serde(skip_serializing_if = "Option::is_none")] + #[builder(setter(into, strip_option), default)] + pub chat_id: Option, + + #[serde(skip_serializing_if = "Option::is_none")] + #[builder(setter(into, strip_option), default)] + pub menu_button: Option, +} + +#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Builder)] +pub struct GetChatMenuButtonParams { + #[serde(skip_serializing_if = "Option::is_none")] + #[builder(setter(into, strip_option), default)] + pub chat_id: Option, +} diff --git a/src/api_traits/async_telegram_api.rs b/src/api_traits/async_telegram_api.rs index 7d8779d..338d476 100644 --- a/src/api_traits/async_telegram_api.rs +++ b/src/api_traits/async_telegram_api.rs @@ -5,6 +5,7 @@ use crate::api_params::AnswerCallbackQueryParams; use crate::api_params::AnswerInlineQueryParams; use crate::api_params::AnswerPreCheckoutQueryParams; use crate::api_params::AnswerShippingQueryParams; +use crate::api_params::AnswerWebAppQueryParams; use crate::api_params::ApproveChatJoinRequestParams; use crate::api_params::BanChatMemberParams; use crate::api_params::BanChatSenderChatParams; @@ -30,11 +31,12 @@ use crate::api_params::ForwardMessageParams; use crate::api_params::GetChatAdministratorsParams; use crate::api_params::GetChatMemberCountParams; use crate::api_params::GetChatMemberParams; +use crate::api_params::GetChatMenuButtonParams; use crate::api_params::GetChatParams; use crate::api_params::GetFileParams; use crate::api_params::GetGameHighScoresParams; use crate::api_params::GetMyCommandsParams; -use crate::api_params::GetMyDefaultAdministratorRights; +use crate::api_params::GetMyDefaultAdministratorRightsParams; use crate::api_params::GetStickerSetParams; use crate::api_params::GetUpdatesParams; use crate::api_params::GetUserProfilePhotosParams; @@ -65,6 +67,7 @@ use crate::api_params::SendVideoParams; use crate::api_params::SendVoiceParams; use crate::api_params::SetChatAdministratorCustomTitleParams; use crate::api_params::SetChatDescriptionParams; +use crate::api_params::SetChatMenuButtonParams; use crate::api_params::SetChatPermissionsParams; use crate::api_params::SetChatPhotoParams; use crate::api_params::SetChatStickerSetParams; @@ -88,9 +91,11 @@ use crate::objects::ChatInviteLink; use crate::objects::ChatMember; use crate::objects::File as FileObject; use crate::objects::GameHighScore; +use crate::objects::MenuButton; use crate::objects::Message; use crate::objects::MessageId; use crate::objects::Poll; +use crate::objects::SentWebAppMessage; use crate::objects::StickerSet; use crate::objects::Update; use crate::objects::User; @@ -1007,12 +1012,33 @@ pub trait AsyncTelegramApi { async fn get_my_default_administrator_rights( &self, - params: &GetMyDefaultAdministratorRights, + params: &GetMyDefaultAdministratorRightsParams, ) -> Result, Self::Error> { self.request("getMyDefaultAdministratorRights", Some(params)) .await } + async fn answer_web_app_query( + &self, + params: &AnswerWebAppQueryParams, + ) -> Result, Self::Error> { + self.request("answerWebAppQuery", Some(params)).await + } + + async fn set_chat_menu_button( + &self, + params: SetChatMenuButtonParams, + ) -> Result, Self::Error> { + self.request("setChatMenuButton", Some(params)).await + } + + async fn get_chat_menu_button( + &self, + params: GetChatMenuButtonParams, + ) -> Result, Self::Error> { + self.request("getChatMenuButton", Some(params)).await + } + async fn request_without_body( &self, method: &str, diff --git a/src/api_traits/telegram_api.rs b/src/api_traits/telegram_api.rs index 1a8eb03..ed1ae71 100644 --- a/src/api_traits/telegram_api.rs +++ b/src/api_traits/telegram_api.rs @@ -5,6 +5,7 @@ use crate::api_params::AnswerCallbackQueryParams; use crate::api_params::AnswerInlineQueryParams; use crate::api_params::AnswerPreCheckoutQueryParams; use crate::api_params::AnswerShippingQueryParams; +use crate::api_params::AnswerWebAppQueryParams; use crate::api_params::ApproveChatJoinRequestParams; use crate::api_params::BanChatMemberParams; use crate::api_params::BanChatSenderChatParams; @@ -30,11 +31,12 @@ use crate::api_params::ForwardMessageParams; use crate::api_params::GetChatAdministratorsParams; use crate::api_params::GetChatMemberCountParams; use crate::api_params::GetChatMemberParams; +use crate::api_params::GetChatMenuButtonParams; use crate::api_params::GetChatParams; use crate::api_params::GetFileParams; use crate::api_params::GetGameHighScoresParams; use crate::api_params::GetMyCommandsParams; -use crate::api_params::GetMyDefaultAdministratorRights; +use crate::api_params::GetMyDefaultAdministratorRightsParams; use crate::api_params::GetStickerSetParams; use crate::api_params::GetUpdatesParams; use crate::api_params::GetUserProfilePhotosParams; @@ -65,6 +67,7 @@ use crate::api_params::SendVideoParams; use crate::api_params::SendVoiceParams; use crate::api_params::SetChatAdministratorCustomTitleParams; use crate::api_params::SetChatDescriptionParams; +use crate::api_params::SetChatMenuButtonParams; use crate::api_params::SetChatPermissionsParams; use crate::api_params::SetChatPhotoParams; use crate::api_params::SetChatStickerSetParams; @@ -88,9 +91,11 @@ use crate::objects::ChatInviteLink; use crate::objects::ChatMember; use crate::objects::File as FileObject; use crate::objects::GameHighScore; +use crate::objects::MenuButton; use crate::objects::Message; use crate::objects::MessageId; use crate::objects::Poll; +use crate::objects::SentWebAppMessage; use crate::objects::StickerSet; use crate::objects::Update; use crate::objects::User; @@ -952,11 +957,32 @@ pub trait TelegramApi { fn get_my_default_administrator_rights( &self, - params: &GetMyDefaultAdministratorRights, + params: &GetMyDefaultAdministratorRightsParams, ) -> Result, Self::Error> { self.request("getMyDefaultAdministratorRights", Some(params)) } + fn answer_web_app_query( + &self, + params: &AnswerWebAppQueryParams, + ) -> Result, Self::Error> { + self.request("answerWebAppQuery", Some(params)) + } + + fn set_chat_menu_button( + &self, + params: SetChatMenuButtonParams, + ) -> Result, Self::Error> { + self.request("setChatMenuButton", Some(params)) + } + + fn get_chat_menu_button( + &self, + params: GetChatMenuButtonParams, + ) -> Result, Self::Error> { + self.request("getChatMenuButton", Some(params)) + } + fn request_without_body( &self, method: &str, diff --git a/src/objects.rs b/src/objects.rs index 7cd2e3f..a78ba09 100644 --- a/src/objects.rs +++ b/src/objects.rs @@ -145,6 +145,25 @@ pub enum PassportElementErrorTranslationFileType { TemporaryRegistration, } +#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)] +#[serde(tag = "type")] +pub enum MenuButton { + #[serde(rename = "commands")] + Commands, + #[serde(rename = "web_app")] + WebApp(MenuButtonWebApp), + #[serde(rename = "default")] + Default, +} + +#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq, Builder)] +pub struct MenuButtonWebApp { + #[builder(setter(into))] + pub text: String, + + pub web_app: WebAppInfo, +} + #[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Builder)] pub struct ChatMemberOwner { pub user: User, @@ -682,6 +701,10 @@ pub struct Message { #[builder(setter(into, strip_option), default)] pub video_chat_participants_invited: Option, + #[serde(skip_serializing_if = "Option::is_none")] + #[builder(setter(into, strip_option), default)] + pub web_app_data: Option, + #[serde(skip_serializing_if = "Option::is_none")] #[builder(setter(into, strip_option), default)] pub reply_markup: Option, @@ -1118,6 +1141,10 @@ pub struct KeyboardButton { #[serde(skip_serializing_if = "Option::is_none")] #[builder(setter(into, strip_option), default)] pub request_poll: Option, + + #[serde(skip_serializing_if = "Option::is_none")] + #[builder(setter(into, strip_option), default)] + pub web_app: Option, } #[derive(Debug, Clone, Copy, Serialize, Deserialize, PartialEq, Eq, Builder)] @@ -1159,6 +1186,10 @@ pub struct InlineKeyboardButton { #[builder(setter(into, strip_option), default)] pub callback_data: Option, + #[serde(skip_serializing_if = "Option::is_none")] + #[builder(setter(into, strip_option), default)] + pub web_app: Option, + #[serde(skip_serializing_if = "Option::is_none")] #[builder(setter(into, strip_option), default)] pub switch_inline_query: Option, @@ -2811,3 +2842,24 @@ pub struct ChatAdministratorRights { #[builder(setter(into, strip_option), default)] pub can_pin_messages: Option, } + +#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq, Builder)] +pub struct WebAppInfo { + #[builder(setter(into))] + pub url: String, +} + +#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq, Builder)] +pub struct SentWebAppMessage { + #[builder(setter(into))] + pub inline_message_id: String, +} + +#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq, Builder)] +pub struct WebAppData { + #[builder(setter(into))] + pub data: String, + + #[builder(setter(into))] + pub button_text: String, +}