diff --git a/src/api_params.rs b/src/api_params.rs index ee8a696..023e53d 100644 --- a/src/api_params.rs +++ b/src/api_params.rs @@ -7,13 +7,13 @@ use crate::objects::{ InlineQueryResultCachedVoice, InlineQueryResultContact, InlineQueryResultDocument, InlineQueryResultGame, InlineQueryResultGif, InlineQueryResultLocation, InlineQueryResultMpeg4Gif, InlineQueryResultPhoto, InlineQueryResultVenue, - InlineQueryResultVideo, InlineQueryResultVoice, InputSticker, LabeledPrice, MaskPosition, - MenuButton, MessageEntity, PassportElementErrorDataField, PassportElementErrorFile, - PassportElementErrorFiles, PassportElementErrorFrontSide, PassportElementErrorReverseSide, - PassportElementErrorSelfie, PassportElementErrorTranslationFile, - PassportElementErrorTranslationFiles, PassportElementErrorUnspecified, PollType, ReactionType, - ReplyKeyboardMarkup, ReplyKeyboardRemove, ShippingOption, StickerFormat, StickerType, - WebAppInfo, + InlineQueryResultVideo, InlineQueryResultVoice, InputSticker, LabeledPrice, LinkPreviewOptions, + MaskPosition, MenuButton, MessageEntity, PassportElementErrorDataField, + PassportElementErrorFile, PassportElementErrorFiles, PassportElementErrorFrontSide, + PassportElementErrorReverseSide, PassportElementErrorSelfie, + PassportElementErrorTranslationFile, PassportElementErrorTranslationFiles, + PassportElementErrorUnspecified, PollType, ReactionType, ReplyKeyboardMarkup, + ReplyKeyboardRemove, ShippingOption, StickerFormat, StickerType, WebAppInfo, }; use crate::{AllowedUpdate, ParseMode}; use serde::Deserialize; @@ -298,7 +298,7 @@ pub struct SendMessageParams { #[serde(skip_serializing_if = "Option::is_none")] #[builder(setter(into, strip_option), default)] - pub disable_web_page_preview: Option, + pub link_preview_options: Option, #[serde(skip_serializing_if = "Option::is_none")] #[builder(setter(into, strip_option), default)] @@ -340,6 +340,29 @@ pub struct ForwardMessageParams { pub message_id: i32, } +#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq, Builder)] +pub struct ForwardMessagesParams { + #[builder(setter(into))] + pub chat_id: ChatId, + + #[serde(skip_serializing_if = "Option::is_none")] + #[builder(setter(into, strip_option), default)] + pub message_thread_id: Option, + + #[builder(setter(into))] + pub from_chat_id: ChatId, + + pub message_ids: Vec, + + #[serde(skip_serializing_if = "Option::is_none")] + #[builder(setter(into, strip_option), default)] + pub disable_notification: Option, + + #[serde(skip_serializing_if = "Option::is_none")] + #[builder(setter(into, strip_option), default)] + pub protect_content: Option, +} + #[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq, Builder)] pub struct CopyMessageParams { #[builder(setter(into))] @@ -383,6 +406,33 @@ pub struct CopyMessageParams { pub reply_markup: Option, } +#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq, Builder)] +pub struct CopyMessagesParams { + #[builder(setter(into))] + pub chat_id: ChatId, + + #[serde(skip_serializing_if = "Option::is_none")] + #[builder(setter(into, strip_option), default)] + pub message_thread_id: Option, + + #[builder(setter(into))] + pub from_chat_id: ChatId, + + pub message_ids: Vec, + + #[serde(skip_serializing_if = "Option::is_none")] + #[builder(setter(into, strip_option), default)] + pub disable_notification: Option, + + #[serde(skip_serializing_if = "Option::is_none")] + #[builder(setter(into, strip_option), default)] + pub protect_content: Option, + + #[serde(skip_serializing_if = "Option::is_none")] + #[builder(setter(into, strip_option), default)] + pub remove_caption: Option, +} + #[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq, Builder)] pub struct SendPhotoParams { #[builder(setter(into))] @@ -1572,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, @@ -1688,7 +1746,7 @@ pub struct EditMessageTextParams { #[serde(skip_serializing_if = "Option::is_none")] #[builder(setter(into, strip_option), default)] - pub disable_web_page_preview: Option, + pub link_preview_options: Option, #[serde(skip_serializing_if = "Option::is_none")] #[builder(setter(into, strip_option), default)] @@ -1787,6 +1845,14 @@ pub struct DeleteMessageParams { pub message_id: i32, } +#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq, Builder)] +pub struct DeleteMessagesParams { + #[builder(setter(into))] + pub chat_id: ChatId, + + pub message_ids: Vec, +} + #[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq, Builder)] pub struct SendStickerParams { #[builder(setter(into))] diff --git a/src/api_traits/async_telegram_api.rs b/src/api_traits/async_telegram_api.rs index c1c5565..85edcb7 100644 --- a/src/api_traits/async_telegram_api.rs +++ b/src/api_traits/async_telegram_api.rs @@ -12,6 +12,7 @@ use crate::api_params::BanChatSenderChatParams; use crate::api_params::CloseForumTopicParams; use crate::api_params::CloseGeneralForumTopicParams; use crate::api_params::CopyMessageParams; +use crate::api_params::CopyMessagesParams; use crate::api_params::CreateChatInviteLinkParams; use crate::api_params::CreateForumTopicParams; use crate::api_params::CreateInvoiceLinkParams; @@ -21,6 +22,7 @@ use crate::api_params::DeleteChatPhotoParams; use crate::api_params::DeleteChatStickerSetParams; use crate::api_params::DeleteForumTopicParams; use crate::api_params::DeleteMessageParams; +use crate::api_params::DeleteMessagesParams; use crate::api_params::DeleteMyCommandsParams; use crate::api_params::DeleteStickerFromSetParams; use crate::api_params::DeleteStickerSetParams; @@ -36,6 +38,7 @@ use crate::api_params::EditMessageTextParams; use crate::api_params::ExportChatInviteLinkParams; use crate::api_params::FileUpload; use crate::api_params::ForwardMessageParams; +use crate::api_params::ForwardMessagesParams; use crate::api_params::GetChatAdministratorsParams; use crate::api_params::GetChatMemberCountParams; use crate::api_params::GetChatMemberParams; @@ -51,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; @@ -131,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; @@ -193,6 +198,13 @@ pub trait AsyncTelegramApi { self.request("forwardMessage", Some(params)).await } + async fn forward_messages( + &self, + params: &ForwardMessagesParams, + ) -> Result>, Self::Error> { + self.request("forwardMessages", Some(params)).await + } + async fn copy_message( &self, params: &CopyMessageParams, @@ -200,6 +212,13 @@ pub trait AsyncTelegramApi { self.request("copyMessage", Some(params)).await } + async fn copy_messages( + &self, + params: &CopyMessagesParams, + ) -> Result>, Self::Error> { + self.request("copyMessages", Some(params)).await + } + async fn send_photo( &self, params: &SendPhotoParams, @@ -798,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, @@ -1031,6 +1057,13 @@ pub trait AsyncTelegramApi { self.request("deleteMessage", Some(params)).await } + async fn delete_messages( + &self, + params: &DeleteMessagesParams, + ) -> Result, Self::Error> { + self.request("deleteMessages", Some(params)).await + } + async fn send_sticker( &self, params: &SendStickerParams, diff --git a/src/api_traits/telegram_api.rs b/src/api_traits/telegram_api.rs index c8a38d8..1fa8271 100644 --- a/src/api_traits/telegram_api.rs +++ b/src/api_traits/telegram_api.rs @@ -12,6 +12,7 @@ use crate::api_params::BanChatSenderChatParams; use crate::api_params::CloseForumTopicParams; use crate::api_params::CloseGeneralForumTopicParams; use crate::api_params::CopyMessageParams; +use crate::api_params::CopyMessagesParams; use crate::api_params::CreateChatInviteLinkParams; use crate::api_params::CreateForumTopicParams; use crate::api_params::CreateInvoiceLinkParams; @@ -21,6 +22,7 @@ use crate::api_params::DeleteChatPhotoParams; use crate::api_params::DeleteChatStickerSetParams; use crate::api_params::DeleteForumTopicParams; use crate::api_params::DeleteMessageParams; +use crate::api_params::DeleteMessagesParams; use crate::api_params::DeleteMyCommandsParams; use crate::api_params::DeleteStickerFromSetParams; use crate::api_params::DeleteStickerSetParams; @@ -36,6 +38,7 @@ use crate::api_params::EditMessageTextParams; use crate::api_params::ExportChatInviteLinkParams; use crate::api_params::FileUpload; use crate::api_params::ForwardMessageParams; +use crate::api_params::ForwardMessagesParams; use crate::api_params::GetChatAdministratorsParams; use crate::api_params::GetChatMemberCountParams; use crate::api_params::GetChatMemberParams; @@ -50,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; @@ -130,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; @@ -188,6 +193,13 @@ pub trait TelegramApi { self.request("forwardMessage", Some(params)) } + fn forward_messages( + &self, + params: &ForwardMessagesParams, + ) -> Result>, Self::Error> { + self.request("forwardMessages", Some(params)) + } + fn copy_message( &self, params: &CopyMessageParams, @@ -195,6 +207,13 @@ pub trait TelegramApi { self.request("copyMessage", Some(params)) } + fn copy_messages( + &self, + params: &CopyMessagesParams, + ) -> Result>, Self::Error> { + self.request("copyMessages", Some(params)) + } + fn send_photo(&self, params: &SendPhotoParams) -> Result, Self::Error> { let method_name = "sendPhoto"; let mut files: Vec<(&str, PathBuf)> = vec![]; @@ -753,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, @@ -979,6 +1005,13 @@ pub trait TelegramApi { self.request("deleteMessage", Some(params)) } + fn delete_messages( + &self, + params: &DeleteMessagesParams, + ) -> Result, Self::Error> { + self.request("deleteMessages", Some(params)) + } + fn send_sticker( &self, params: &SendStickerParams, diff --git a/src/objects.rs b/src/objects.rs index 13c14db..519e6b7 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)] @@ -499,6 +503,22 @@ pub struct Chat { #[builder(setter(into, strip_option), default)] pub available_reactions: Option>, + #[serde(skip_serializing_if = "Option::is_none")] + #[builder(setter(into, strip_option), default)] + pub accent_color_id: Option, + + #[serde(skip_serializing_if = "Option::is_none")] + #[builder(setter(into, strip_option), default)] + pub background_custom_emoji_id: Option, + + #[serde(skip_serializing_if = "Option::is_none")] + #[builder(setter(into, strip_option), default)] + pub profile_accent_color_id: Option, + + #[serde(skip_serializing_if = "Option::is_none")] + #[builder(setter(into, strip_option), default)] + pub profile_background_custom_emoji_id: Option, + #[serde(skip_serializing_if = "Option::is_none")] #[builder(setter(into, strip_option), default)] pub emoji_status_custom_emoji_id: Option, @@ -563,6 +583,10 @@ pub struct Chat { #[builder(setter(into, strip_option), default)] pub has_protected_content: Option, + #[serde(skip_serializing_if = "Option::is_none")] + #[builder(setter(into, strip_option), default)] + pub has_visible_history: Option, + #[serde(skip_serializing_if = "Option::is_none")] #[builder(setter(into, strip_option), default)] pub sticker_set_name: Option, @@ -603,27 +627,7 @@ pub struct Message { #[serde(skip_serializing_if = "Option::is_none")] #[builder(setter(into, strip_option), default)] - pub forward_from: Option>, - - #[serde(skip_serializing_if = "Option::is_none")] - #[builder(setter(into, strip_option), default)] - pub forward_from_chat: Option>, - - #[serde(skip_serializing_if = "Option::is_none")] - #[builder(setter(into, strip_option), default)] - pub forward_from_message_id: Option, - - #[serde(skip_serializing_if = "Option::is_none")] - #[builder(setter(into, strip_option), default)] - pub forward_signature: Option, - - #[serde(skip_serializing_if = "Option::is_none")] - #[builder(setter(into, strip_option), default)] - pub forward_sender_name: Option, - - #[serde(skip_serializing_if = "Option::is_none")] - #[builder(setter(into, strip_option), default)] - pub forward_date: Option, + pub forward_origin: Option>, #[serde(skip_serializing_if = "Option::is_none")] #[builder(setter(into, strip_option), default)] @@ -673,6 +677,10 @@ pub struct Message { #[builder(setter(into, strip_option), default)] pub entities: Option>, + #[serde(skip_serializing_if = "Option::is_none")] + #[builder(setter(into, strip_option), default)] + pub link_preview_options: Option, + #[serde(skip_serializing_if = "Option::is_none")] #[builder(setter(into, strip_option), default)] pub animation: Option>, @@ -791,7 +799,7 @@ pub struct Message { #[serde(skip_serializing_if = "Option::is_none")] #[builder(setter(into, strip_option), default)] - pub pinned_message: Option>, + pub pinned_message: Option>, #[serde(skip_serializing_if = "Option::is_none")] #[builder(setter(into, strip_option), default)] @@ -803,7 +811,7 @@ pub struct Message { #[serde(skip_serializing_if = "Option::is_none")] #[builder(setter(into, strip_option), default)] - pub user_shared: Option>, + pub users_shared: Option>, #[serde(skip_serializing_if = "Option::is_none")] #[builder(setter(into, strip_option), default)] @@ -849,6 +857,22 @@ pub struct Message { #[builder(setter(into, strip_option), default)] pub general_forum_topic_unhidden: Option>, + #[serde(skip_serializing_if = "Option::is_none")] + #[builder(setter(into, strip_option), default)] + pub giveaway_created: Option, + + #[serde(skip_serializing_if = "Option::is_none")] + #[builder(setter(into, strip_option), default)] + pub giveaway: Option, + + #[serde(skip_serializing_if = "Option::is_none")] + #[builder(setter(into, strip_option), default)] + pub giveaway_winners: Option, + + #[serde(skip_serializing_if = "Option::is_none")] + #[builder(setter(into, strip_option), default)] + pub giveaway_completed: Option, + #[serde(skip_serializing_if = "Option::is_none")] #[builder(setter(into, strip_option), default)] pub video_chat_started: Option>, @@ -1060,7 +1084,7 @@ pub struct MessageOriginChannel { pub author_signature: Option, } -#[derive(Builder, Clone, Debug, Serialize, Deserialize, PartialEq)] +#[derive(Builder, Clone, Debug, Serialize, Deserialize, PartialEq, Eq)] pub struct LinkPreviewOptions { #[serde(skip_serializing_if = "Option::is_none")] #[builder(setter(into, strip_option), default)] @@ -1456,17 +1480,17 @@ pub struct GeneralForumTopicHidden {} pub struct GeneralForumTopicUnhidden {} #[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq, Builder)] -pub struct UserShared { +pub struct UsersShared { pub request_id: i32, - pub user_id: u64, + pub user_ids: Vec, } #[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq, Builder)] pub struct ChatShared { pub request_id: i32, - pub user_id: u64, + pub chat_id: u64, } #[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq, Builder)] @@ -1552,7 +1576,7 @@ pub struct KeyboardButton { #[serde(skip_serializing_if = "Option::is_none")] #[builder(setter(into, strip_option), default)] - pub request_user: Option, + pub request_users: Option, #[serde(skip_serializing_if = "Option::is_none")] #[builder(setter(into, strip_option), default)] @@ -1576,7 +1600,7 @@ pub struct KeyboardButton { } #[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq, Builder)] -pub struct KeyboardButtonRequestUser { +pub struct KeyboardButtonRequestUsers { pub request_id: i32, #[serde(skip_serializing_if = "Option::is_none")] @@ -1586,6 +1610,10 @@ pub struct KeyboardButtonRequestUser { #[serde(skip_serializing_if = "Option::is_none")] #[builder(setter(into, strip_option), default)] pub user_is_premium: Option, + + #[serde(skip_serializing_if = "Option::is_none")] + #[builder(setter(into, strip_option), default)] + pub max_quantity: Option, } #[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq, Builder)] @@ -1733,7 +1761,7 @@ pub struct CallbackQuery { #[serde(skip_serializing_if = "Option::is_none")] #[builder(setter(into, strip_option), default)] - pub message: Option, + pub message: Option, #[serde(skip_serializing_if = "Option::is_none")] #[builder(setter(into, strip_option), default)] @@ -2937,7 +2965,7 @@ pub struct InputTextMessageContent { #[serde(skip_serializing_if = "Option::is_none")] #[builder(setter(into, strip_option), default)] - pub disable_web_page_preview: Option, + pub link_preview_options: Option, } #[derive(Debug, Clone, Copy, Serialize, Deserialize, PartialEq, Builder)] @@ -3456,6 +3484,9 @@ pub struct GameHighScore { pub score: i32, } +#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Builder)] +pub struct GiveawayCreated {} + #[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Builder)] pub struct Giveaway { pub chats: Vec, @@ -3522,6 +3553,19 @@ pub struct GiveawayWinners { pub prize_description: Option, } +#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Builder)] +pub struct GiveawayCompleted { + pub winner_count: u32, + + #[serde(skip_serializing_if = "Option::is_none")] + #[builder(setter(into, strip_option), default)] + pub unclaimed_prize_count: Option, + + #[serde(skip_serializing_if = "Option::is_none")] + #[builder(setter(into, strip_option), default)] + pub giveaway_message: Option>, +} + #[derive(Debug, Clone, Copy, Serialize, Deserialize, PartialEq, Eq, Builder)] pub struct ChatAdministratorRights { pub is_anonymous: bool, @@ -3590,6 +3634,88 @@ 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, +} + +#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)] +pub enum MaybeInaccessibleMessage { + Message(Message), + InaccessibleMessage(InaccessibleMessage), +} + +#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Builder)] +pub struct InaccessibleMessage { + pub chat: Chat, + + pub message_id: i32, + + pub date: u64, +} + #[cfg(test)] mod serde_tests { use super::*;