diff --git a/src/api_params.rs b/src/api_params.rs index 0864a08..023e53d 100644 --- a/src/api_params.rs +++ b/src/api_params.rs @@ -1622,6 +1622,14 @@ pub struct AnswerCallbackQueryParams { pub cache_time: Option, } +#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq, Builder)] +pub struct GetUserChatBoostsParams { + #[builder(setter(into))] + pub chat_id: ChatId, + + pub user_id: u64, +} + #[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq, Builder)] pub struct SetMyCommandsParams { pub commands: Vec, diff --git a/src/api_traits/async_telegram_api.rs b/src/api_traits/async_telegram_api.rs index e2805d9..85edcb7 100644 --- a/src/api_traits/async_telegram_api.rs +++ b/src/api_traits/async_telegram_api.rs @@ -54,6 +54,7 @@ use crate::api_params::GetMyNameParams; use crate::api_params::GetMyShortDescriptionParams; use crate::api_params::GetStickerSetParams; use crate::api_params::GetUpdatesParams; +use crate::api_params::GetUserChatBoostsParams; use crate::api_params::GetUserProfilePhotosParams; use crate::api_params::HideGeneralForumTopicParams; use crate::api_params::InputMedia; @@ -134,6 +135,7 @@ use crate::objects::SentWebAppMessage; use crate::objects::StickerSet; use crate::objects::Update; use crate::objects::User; +use crate::objects::UserChatBoosts; use crate::objects::UserProfilePhotos; use crate::objects::WebhookInfo; use crate::Sticker; @@ -815,6 +817,13 @@ pub trait AsyncTelegramApi { self.request("answerCallbackQuery", Some(params)).await } + async fn get_user_chat_boosts( + &self, + params: &GetUserChatBoostsParams, + ) -> Result, Self::Error> { + self.request("getUserChatBoosts", Some(params)).await + } + async fn get_my_commands( &self, params: &GetMyCommandsParams, diff --git a/src/api_traits/telegram_api.rs b/src/api_traits/telegram_api.rs index f82e787..1fa8271 100644 --- a/src/api_traits/telegram_api.rs +++ b/src/api_traits/telegram_api.rs @@ -53,6 +53,7 @@ use crate::api_params::GetMyNameParams; use crate::api_params::GetMyShortDescriptionParams; use crate::api_params::GetStickerSetParams; use crate::api_params::GetUpdatesParams; +use crate::api_params::GetUserChatBoostsParams; use crate::api_params::GetUserProfilePhotosParams; use crate::api_params::HideGeneralForumTopicParams; use crate::api_params::InputMedia; @@ -133,6 +134,7 @@ use crate::objects::SentWebAppMessage; use crate::objects::StickerSet; use crate::objects::Update; use crate::objects::User; +use crate::objects::UserChatBoosts; use crate::objects::UserProfilePhotos; use crate::objects::WebhookInfo; use crate::GetCustomEmojiStickersParams; @@ -770,6 +772,13 @@ pub trait TelegramApi { self.request("answerCallbackQuery", Some(params)) } + fn get_user_chat_boosts( + &self, + params: &GetUserChatBoostsParams, + ) -> Result, Self::Error> { + self.request("getUserChatBoosts", Some(params)) + } + fn get_my_commands( &self, params: &GetMyCommandsParams, diff --git a/src/objects.rs b/src/objects.rs index 49f8bea..8fa23c7 100644 --- a/src/objects.rs +++ b/src/objects.rs @@ -357,6 +357,8 @@ pub enum UpdateContent { MyChatMember(ChatMemberUpdated), ChatMember(ChatMemberUpdated), ChatJoinRequest(ChatJoinRequest), + ChatBoost(ChatBoost), + RemovedChatBoost(ChatBoostRemoved), } #[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq, Builder)] @@ -416,6 +418,8 @@ pub enum AllowedUpdate { MyChatMember, ChatMember, ChatJoinRequest, + ChatBoost, + RemovedChatBoost, } #[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq, Builder)] @@ -3598,6 +3602,73 @@ pub struct WebAppData { pub button_text: String, } +#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)] +#[serde(tag = "source", rename_all = "snake_case")] +pub enum ChatBoostSource { + Premium(ChatBoostSourcePremium), + GiftCode(ChatBoostSourceGiftCode), + Giveaway(ChatBoostSourceGiveaway), +} + +#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq, Builder)] +pub struct ChatBoostSourcePremium { + pub user: User, +} + +#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq, Builder)] +pub struct ChatBoostSourceGiftCode { + pub user: User, +} + +#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq, Builder)] +pub struct ChatBoostSourceGiveaway { + pub giveaway_message_id: i32, + + #[serde(skip_serializing_if = "Option::is_none")] + #[builder(setter(into, strip_option), default)] + pub user: Option, + + #[serde(skip_serializing_if = "Option::is_none")] + #[builder(setter(into, strip_option), default)] + pub is_unclaimed: Option, +} + +#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq, Builder)] +pub struct ChatBoost { + #[builder(setter(into))] + pub boost_id: String, + + pub add_date: u64, + + pub expiration_date: u64, + + pub source: ChatBoostSource, +} + +#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Builder)] +pub struct ChatBoostUpdated { + pub chat: Chat, + + pub boost: ChatBoost, +} + +#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Builder)] +pub struct ChatBoostRemoved { + pub chat: Chat, + + #[builder(setter(into))] + pub boost_id: String, + + pub remove_date: u64, + + pub source: ChatBoostSource, +} + +#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Builder)] +pub struct UserChatBoosts { + pub boosts: Vec, +} + #[cfg(test)] mod serde_tests { use super::*;