Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Bot API 8.0 - Gifts #237

Merged
merged 2 commits into from
Dec 3, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 10 additions & 0 deletions src/api_params.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1230,6 +1230,16 @@ pub struct DeleteStickerSetParams {
pub name: String,
}

#[apply(apistruct!)]
#[derive(Eq)]
pub struct SendGiftParams {
pub user_id: u64,
pub gift_id: String,
pub text: Option<String>,
pub text_parse_mode: Option<ParseMode>,
pub text_entities: Option<Vec<MessageEntity>>,
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

is an empty Vec simpler than None?

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think it is better to be loyal to the Telegram API spec.

https://core.telegram.org/bots/api#sendgift

According to the spec this parameter is optional.

If we use empty vec may be simpler but it will be telling the library user that this parameter is required which is not true.

Copy link
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

question is will it be able to decode as empty list if the field is not provided. for now I will merge as Option. but @EdJoPaTo you're free to submit pr changng that

}

#[apply(apistruct!)]
pub struct AnswerInlineQueryParams {
pub inline_query_id: String,
Expand Down
23 changes: 18 additions & 5 deletions src/objects.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1335,6 +1335,20 @@ pub struct InputSticker {
pub keywords: Option<Vec<String>>,
}

#[apply(apistruct!)]
pub struct Gift {
pub id: String,
pub stricker: Sticker,
pub star_count: u32,
pub total_count: Option<u32>,
pub remaining_count: Option<u32>,
}

#[apply(apistruct!)]
pub struct Gifts {
pub gifts: Vec<Gift>,
}

#[apply(apistruct!)]
#[derive(Eq)]
pub struct Story {
Expand Down Expand Up @@ -2238,23 +2252,24 @@ pub struct RevenueWithdrawalStateSucceeded {
#[derive(Eq)]
pub struct RevenueWithdrawalStateFailed {}

#[derive(Clone, Debug, Serialize, Deserialize, PartialEq, Eq)]
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why is it not using the api_struct macro?

Copy link
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

it's enum. this macro is not applicable for enums

#[derive(Clone, Debug, Serialize, Deserialize, PartialEq)]
#[serde(tag = "type", rename_all = "snake_case")]
pub enum TransactionPartner {
User(TransactionPartnerUser),
User(Box<TransactionPartnerUser>),
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is there a reason to use a Box instead of an owned value ?

Copy link
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

there is a warning from clippy that one of the variants is too large

Fragment(TransactionPartnerFragment),
TelegramAds(TransactionPartnerTelegramAds),
TelegramApi(TransactionPartnerTelegramApi),
Other(TransactionPartnerOther),
}

#[apply(apistruct!)]
#[derive(Eq)]
pub struct TransactionPartnerUser {
pub user: User,
pub invoice_payload: Option<String>,
pub subscription_period: Option<u32>,
pub paid_media: Option<Vec<PaidMedia>>,
pub paid_media_payload: Option<String>,
pub gift: Option<Gift>,
}

#[apply(apistruct!)]
Expand All @@ -2278,7 +2293,6 @@ pub struct TransactionPartnerTelegramApi {
pub struct TransactionPartnerOther {}

#[apply(apistruct!)]
#[derive(Eq)]
pxp9 marked this conversation as resolved.
Show resolved Hide resolved
pub struct StarTransaction {
pub id: String,
pub amount: u32,
Expand All @@ -2288,7 +2302,6 @@ pub struct StarTransaction {
}

#[apply(apistruct!)]
#[derive(Eq)]
pxp9 marked this conversation as resolved.
Show resolved Hide resolved
pub struct StarTransactions {
pub transactions: Vec<StarTransaction>,
}
Expand Down
4 changes: 3 additions & 1 deletion src/trait_async.rs
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ use crate::api_params::{
use crate::objects::{
BotCommand, BotDescription, BotName, BotShortDescription, BusinessConnection,
ChatAdministratorRights, ChatFullInfo, ChatInviteLink, ChatMember, File as FileObject,
ForumTopic, GameHighScore, InputSticker, MenuButton, Message, MessageId, Poll,
ForumTopic, GameHighScore, Gifts, InputSticker, MenuButton, Message, MessageId, Poll,
PreparedInlineMessage, SentWebAppMessage, StarTransactions, Sticker, StickerSet, Update, User,
UserChatBoosts, UserProfilePhotos, WebhookInfo,
};
Expand Down Expand Up @@ -626,6 +626,8 @@ where

request!(setCustomEmojiStickerSetThumbnail, bool);
request!(deleteStickerSet, bool);
request_nb!(getAvailableGifts, Gifts);
request!(sendGift, bool);
request!(sendInvoice, Message);
request!(createInvoiceLink, String);
request!(answerShippingQuery, bool);
Expand Down
4 changes: 3 additions & 1 deletion src/trait_sync.rs
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ use crate::api_params::{
use crate::objects::{
BotCommand, BotDescription, BotName, BotShortDescription, BusinessConnection,
ChatAdministratorRights, ChatFullInfo, ChatInviteLink, ChatMember, File as FileObject,
ForumTopic, GameHighScore, InputSticker, MenuButton, Message, MessageId, Poll,
ForumTopic, GameHighScore, Gifts, InputSticker, MenuButton, Message, MessageId, Poll,
PreparedInlineMessage, SentWebAppMessage, StarTransactions, Sticker, StickerSet, Update, User,
UserChatBoosts, UserProfilePhotos, WebhookInfo,
};
Expand Down Expand Up @@ -592,6 +592,8 @@ pub trait TelegramApi {

request!(setCustomEmojiStickerSetThumbnail, bool);
request!(deleteStickerSet, bool);
request_nb!(getAvailableGifts, Gifts);
request!(sendGift, bool);
request!(sendInvoice, Message);
request!(createInvoiceLink, String);
request!(answerShippingQuery, bool);
Expand Down
Loading