Skip to content

Commit

Permalink
Bot API v6 web apps changes (#59)
Browse files Browse the repository at this point in the history
* Bot API v6 web apps changes

* add menu button
  • Loading branch information
ayrat555 authored Apr 18, 2022
1 parent e7e0794 commit f92f717
Show file tree
Hide file tree
Showing 4 changed files with 140 additions and 11 deletions.
39 changes: 32 additions & 7 deletions src/api_params.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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<bool>,
}
#[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<i64>,

#[serde(skip_serializing_if = "Option::is_none")]
#[builder(setter(into, strip_option), default)]
pub menu_button: Option<MenuButton>,
}

#[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<i64>,
}
30 changes: 28 additions & 2 deletions src/api_traits/async_telegram_api.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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;
Expand Down Expand Up @@ -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;
Expand All @@ -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;
Expand Down Expand Up @@ -1007,12 +1012,33 @@ pub trait AsyncTelegramApi {

async fn get_my_default_administrator_rights(
&self,
params: &GetMyDefaultAdministratorRights,
params: &GetMyDefaultAdministratorRightsParams,
) -> Result<MethodResponse<ChatAdministratorRights>, Self::Error> {
self.request("getMyDefaultAdministratorRights", Some(params))
.await
}

async fn answer_web_app_query(
&self,
params: &AnswerWebAppQueryParams,
) -> Result<MethodResponse<SentWebAppMessage>, Self::Error> {
self.request("answerWebAppQuery", Some(params)).await
}

async fn set_chat_menu_button(
&self,
params: SetChatMenuButtonParams,
) -> Result<MethodResponse<bool>, Self::Error> {
self.request("setChatMenuButton", Some(params)).await
}

async fn get_chat_menu_button(
&self,
params: GetChatMenuButtonParams,
) -> Result<MethodResponse<MenuButton>, Self::Error> {
self.request("getChatMenuButton", Some(params)).await
}

async fn request_without_body<T: serde::de::DeserializeOwned>(
&self,
method: &str,
Expand Down
30 changes: 28 additions & 2 deletions src/api_traits/telegram_api.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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;
Expand Down Expand Up @@ -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;
Expand All @@ -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;
Expand Down Expand Up @@ -952,11 +957,32 @@ pub trait TelegramApi {

fn get_my_default_administrator_rights(
&self,
params: &GetMyDefaultAdministratorRights,
params: &GetMyDefaultAdministratorRightsParams,
) -> Result<MethodResponse<ChatAdministratorRights>, Self::Error> {
self.request("getMyDefaultAdministratorRights", Some(params))
}

fn answer_web_app_query(
&self,
params: &AnswerWebAppQueryParams,
) -> Result<MethodResponse<SentWebAppMessage>, Self::Error> {
self.request("answerWebAppQuery", Some(params))
}

fn set_chat_menu_button(
&self,
params: SetChatMenuButtonParams,
) -> Result<MethodResponse<bool>, Self::Error> {
self.request("setChatMenuButton", Some(params))
}

fn get_chat_menu_button(
&self,
params: GetChatMenuButtonParams,
) -> Result<MethodResponse<MenuButton>, Self::Error> {
self.request("getChatMenuButton", Some(params))
}

fn request_without_body<T: serde::de::DeserializeOwned>(
&self,
method: &str,
Expand Down
52 changes: 52 additions & 0 deletions src/objects.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down Expand Up @@ -682,6 +701,10 @@ pub struct Message {
#[builder(setter(into, strip_option), default)]
pub video_chat_participants_invited: Option<VideoChatParticipantsInvited>,

#[serde(skip_serializing_if = "Option::is_none")]
#[builder(setter(into, strip_option), default)]
pub web_app_data: Option<WebAppData>,

#[serde(skip_serializing_if = "Option::is_none")]
#[builder(setter(into, strip_option), default)]
pub reply_markup: Option<InlineKeyboardMarkup>,
Expand Down Expand Up @@ -1118,6 +1141,10 @@ pub struct KeyboardButton {
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(setter(into, strip_option), default)]
pub request_poll: Option<KeyboardButtonPollType>,

#[serde(skip_serializing_if = "Option::is_none")]
#[builder(setter(into, strip_option), default)]
pub web_app: Option<WebAppInfo>,
}

#[derive(Debug, Clone, Copy, Serialize, Deserialize, PartialEq, Eq, Builder)]
Expand Down Expand Up @@ -1159,6 +1186,10 @@ pub struct InlineKeyboardButton {
#[builder(setter(into, strip_option), default)]
pub callback_data: Option<String>,

#[serde(skip_serializing_if = "Option::is_none")]
#[builder(setter(into, strip_option), default)]
pub web_app: Option<WebAppInfo>,

#[serde(skip_serializing_if = "Option::is_none")]
#[builder(setter(into, strip_option), default)]
pub switch_inline_query: Option<String>,
Expand Down Expand Up @@ -2811,3 +2842,24 @@ pub struct ChatAdministratorRights {
#[builder(setter(into, strip_option), default)]
pub can_pin_messages: Option<bool>,
}

#[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,
}

0 comments on commit f92f717

Please sign in to comment.