diff --git a/.butcher/methods/createInvoiceLink/entity.json b/.butcher/methods/createInvoiceLink/entity.json index 0bd239b0..b0f451b1 100644 --- a/.butcher/methods/createInvoiceLink/entity.json +++ b/.butcher/methods/createInvoiceLink/entity.json @@ -30,9 +30,9 @@ { "type": "String", "required": true, - "description": "Bot-defined invoice payload, 1-128 bytes. This will not be displayed to the user, use for your internal processes.", - "html_description": "Bot-defined invoice payload, 1-128 bytes. This will not be displayed to the user, use for your internal processes.", - "rst_description": "Bot-defined invoice payload, 1-128 bytes. This will not be displayed to the user, use for your internal processes.\n", + "description": "Bot-defined invoice payload, 1-128 bytes. This will not be displayed to the user, use it for your internal processes.", + "html_description": "Bot-defined invoice payload, 1-128 bytes. This will not be displayed to the user, use it for your internal processes.", + "rst_description": "Bot-defined invoice payload, 1-128 bytes. This will not be displayed to the user, use it for your internal processes.\n", "name": "payload" }, { diff --git a/.butcher/methods/sendInvoice/entity.json b/.butcher/methods/sendInvoice/entity.json index 23eaaca8..e44939ff 100644 --- a/.butcher/methods/sendInvoice/entity.json +++ b/.butcher/methods/sendInvoice/entity.json @@ -46,9 +46,9 @@ { "type": "String", "required": true, - "description": "Bot-defined invoice payload, 1-128 bytes. This will not be displayed to the user, use for your internal processes.", - "html_description": "Bot-defined invoice payload, 1-128 bytes. This will not be displayed to the user, use for your internal processes.", - "rst_description": "Bot-defined invoice payload, 1-128 bytes. This will not be displayed to the user, use for your internal processes.\n", + "description": "Bot-defined invoice payload, 1-128 bytes. This will not be displayed to the user, use it for your internal processes.", + "html_description": "Bot-defined invoice payload, 1-128 bytes. This will not be displayed to the user, use it for your internal processes.", + "rst_description": "Bot-defined invoice payload, 1-128 bytes. This will not be displayed to the user, use it for your internal processes.\n", "name": "payload" }, { diff --git a/.butcher/methods/sendPaidMedia/entity.json b/.butcher/methods/sendPaidMedia/entity.json index 1588fd5c..9e6621e0 100644 --- a/.butcher/methods/sendPaidMedia/entity.json +++ b/.butcher/methods/sendPaidMedia/entity.json @@ -30,9 +30,9 @@ { "type": "Integer", "required": true, - "description": "The number of Telegram Stars that must be paid to buy access to the media", - "html_description": "The number of Telegram Stars that must be paid to buy access to the media", - "rst_description": "The number of Telegram Stars that must be paid to buy access to the media\n", + "description": "The number of Telegram Stars that must be paid to buy access to the media; 1-2500", + "html_description": "The number of Telegram Stars that must be paid to buy access to the media; 1-2500", + "rst_description": "The number of Telegram Stars that must be paid to buy access to the media; 1-2500\n", "name": "star_count" }, { @@ -43,6 +43,14 @@ "rst_description": "A JSON-serialized array describing the media to be sent; up to 10 items\n", "name": "media" }, + { + "type": "String", + "required": false, + "description": "Bot-defined paid media payload, 0-128 bytes. This will not be displayed to the user, use it for your internal processes.", + "html_description": "Bot-defined paid media payload, 0-128 bytes. This will not be displayed to the user, use it for your internal processes.", + "rst_description": "Bot-defined paid media payload, 0-128 bytes. This will not be displayed to the user, use it for your internal processes.\n", + "name": "payload" + }, { "type": "String", "required": false, diff --git a/.butcher/schema/schema.json b/.butcher/schema/schema.json index 9d08a7eb..c4882dd0 100644 --- a/.butcher/schema/schema.json +++ b/.butcher/schema/schema.json @@ -1,7 +1,7 @@ { "api": { - "version": "7.9", - "release_date": "2024-08-14" + "version": "7.10", + "release_date": "2024-09-06" }, "items": [ { @@ -143,6 +143,14 @@ "name": "pre_checkout_query", "required": false }, + { + "type": "PaidMediaPurchased", + "description": "A user purchased paid media with a non-empty payload sent by the bot in a non-channel chat", + "html_description": "Optional. A user purchased paid media with a non-empty payload sent by the bot in a non-channel chat", + "rst_description": "*Optional*. A user purchased paid media with a non-empty payload sent by the bot in a non-channel chat\n", + "name": "purchased_paid_media", + "required": false + }, { "type": "Poll", "description": "New poll state. Bots receive only updates about manually stopped polls and polls, which are sent by the bot", @@ -4029,10 +4037,19 @@ { "anchor": "giveawaycreated", "name": "GiveawayCreated", - "description": "This object represents a service message about the creation of a scheduled giveaway. Currently holds no information.", - "html_description": "

This object represents a service message about the creation of a scheduled giveaway. Currently holds no information.

", - "rst_description": "This object represents a service message about the creation of a scheduled giveaway. Currently holds no information.", - "annotations": [], + "description": "This object represents a service message about the creation of a scheduled giveaway.", + "html_description": "

This object represents a service message about the creation of a scheduled giveaway.

", + "rst_description": "This object represents a service message about the creation of a scheduled giveaway.", + "annotations": [ + { + "type": "Integer", + "description": "The number of Telegram Stars to be split between giveaway winners; for Telegram Star giveaways only", + "html_description": "Optional. The number of Telegram Stars to be split between giveaway winners; for Telegram Star giveaways only", + "rst_description": "*Optional*. The number of Telegram Stars to be split between giveaway winners; for Telegram Star giveaways only\n", + "name": "prize_star_count", + "required": false + } + ], "category": "types" }, { @@ -4100,9 +4117,17 @@ }, { "type": "Integer", - "description": "The number of months the Telegram Premium subscription won from the giveaway will be active for", - "html_description": "Optional. The number of months the Telegram Premium subscription won from the giveaway will be active for", - "rst_description": "*Optional*. The number of months the Telegram Premium subscription won from the giveaway will be active for\n", + "description": "The number of Telegram Stars to be split between giveaway winners; for Telegram Star giveaways only", + "html_description": "Optional. The number of Telegram Stars to be split between giveaway winners; for Telegram Star giveaways only", + "rst_description": "*Optional*. The number of Telegram Stars to be split between giveaway winners; for Telegram Star giveaways only\n", + "name": "prize_star_count", + "required": false + }, + { + "type": "Integer", + "description": "The number of months the Telegram Premium subscription won from the giveaway will be active for; for Telegram Premium giveaways only", + "html_description": "Optional. The number of months the Telegram Premium subscription won from the giveaway will be active for; for Telegram Premium giveaways only", + "rst_description": "*Optional*. The number of months the Telegram Premium subscription won from the giveaway will be active for; for Telegram Premium giveaways only\n", "name": "premium_subscription_month_count", "required": false } @@ -4166,9 +4191,17 @@ }, { "type": "Integer", - "description": "The number of months the Telegram Premium subscription won from the giveaway will be active for", - "html_description": "Optional. The number of months the Telegram Premium subscription won from the giveaway will be active for", - "rst_description": "*Optional*. The number of months the Telegram Premium subscription won from the giveaway will be active for\n", + "description": "The number of Telegram Stars that were split between giveaway winners; for Telegram Star giveaways only", + "html_description": "Optional. The number of Telegram Stars that were split between giveaway winners; for Telegram Star giveaways only", + "rst_description": "*Optional*. The number of Telegram Stars that were split between giveaway winners; for Telegram Star giveaways only\n", + "name": "prize_star_count", + "required": false + }, + { + "type": "Integer", + "description": "The number of months the Telegram Premium subscription won from the giveaway will be active for; for Telegram Premium giveaways only", + "html_description": "Optional. The number of months the Telegram Premium subscription won from the giveaway will be active for; for Telegram Premium giveaways only", + "rst_description": "*Optional*. The number of months the Telegram Premium subscription won from the giveaway will be active for; for Telegram Premium giveaways only\n", "name": "premium_subscription_month_count", "required": false }, @@ -4237,6 +4270,14 @@ "rst_description": "*Optional*. Message with the giveaway that was completed, if it wasn't deleted\n", "name": "giveaway_message", "required": false + }, + { + "type": "True", + "description": "True, if the giveaway is a Telegram Star giveaway. Otherwise, currently, the giveaway is a Telegram Premium giveaway.", + "html_description": "Optional. True, if the giveaway is a Telegram Star giveaway. Otherwise, currently, the giveaway is a Telegram Premium giveaway.", + "rst_description": "*Optional*. :code:`True`, if the giveaway is a Telegram Star giveaway. Otherwise, currently, the giveaway is a Telegram Premium giveaway.\n", + "name": "is_star_giveaway", + "required": false } ], "category": "types" @@ -5129,6 +5170,22 @@ "rst_description": "*Optional*. Number of pending join requests created using this link\n", "name": "pending_join_request_count", "required": false + }, + { + "type": "Integer", + "description": "The number of seconds the subscription will be active for before the next payment", + "html_description": "Optional. The number of seconds the subscription will be active for before the next payment", + "rst_description": "*Optional*. The number of seconds the subscription will be active for before the next payment\n", + "name": "subscription_period", + "required": false + }, + { + "type": "Integer", + "description": "The amount of Telegram Stars a user must pay initially and after each subsequent subscription period to be a member of the chat using the link", + "html_description": "Optional. The amount of Telegram Stars a user must pay initially and after each subsequent subscription period to be a member of the chat using the link", + "rst_description": "*Optional*. The amount of Telegram Stars a user must pay initially and after each subsequent subscription period to be a member of the chat using the link\n", + "name": "subscription_price", + "required": false } ], "category": "types" @@ -6795,9 +6852,9 @@ { "anchor": "chatboostsourcegiveaway", "name": "ChatBoostSourceGiveaway", - "description": "The boost was obtained by the creation of a Telegram Premium giveaway. This boosts the chat 4 times for the duration of the corresponding Telegram Premium subscription.", - "html_description": "

The boost was obtained by the creation of a Telegram Premium giveaway. This boosts the chat 4 times for the duration of the corresponding Telegram Premium subscription.

", - "rst_description": "The boost was obtained by the creation of a Telegram Premium giveaway. This boosts the chat 4 times for the duration of the corresponding Telegram Premium subscription.", + "description": "The boost was obtained by the creation of a Telegram Premium or a Telegram Star giveaway. This boosts the chat 4 times for the duration of the corresponding Telegram Premium subscription for Telegram Premium giveaways and prize_star_count / 500 times for one year for Telegram Star giveaways.", + "html_description": "

The boost was obtained by the creation of a Telegram Premium or a Telegram Star giveaway. This boosts the chat 4 times for the duration of the corresponding Telegram Premium subscription for Telegram Premium giveaways and prize_star_count / 500 times for one year for Telegram Star giveaways.

", + "rst_description": "The boost was obtained by the creation of a Telegram Premium or a Telegram Star giveaway. This boosts the chat 4 times for the duration of the corresponding Telegram Premium subscription for Telegram Premium giveaways and *prize_star_count* / 500 times for one year for Telegram Star giveaways.", "annotations": [ { "type": "String", @@ -6817,12 +6874,20 @@ }, { "type": "User", - "description": "User that won the prize in the giveaway if any", - "html_description": "Optional. User that won the prize in the giveaway if any", - "rst_description": "*Optional*. User that won the prize in the giveaway if any\n", + "description": "User that won the prize in the giveaway if any; for Telegram Premium giveaways only", + "html_description": "Optional. User that won the prize in the giveaway if any; for Telegram Premium giveaways only", + "rst_description": "*Optional*. User that won the prize in the giveaway if any; for Telegram Premium giveaways only\n", "name": "user", "required": false }, + { + "type": "Integer", + "description": "The number of Telegram Stars to be split between giveaway winners; for Telegram Star giveaways only", + "html_description": "Optional. The number of Telegram Stars to be split between giveaway winners; for Telegram Star giveaways only", + "rst_description": "*Optional*. The number of Telegram Stars to be split between giveaway winners; for Telegram Star giveaways only\n", + "name": "prize_star_count", + "required": false + }, { "type": "True", "description": "True, if the giveaway was completed, but there was no user to win the prize", @@ -8989,9 +9054,9 @@ { "type": "Integer", "required": true, - "description": "The number of Telegram Stars that must be paid to buy access to the media", - "html_description": "The number of Telegram Stars that must be paid to buy access to the media", - "rst_description": "The number of Telegram Stars that must be paid to buy access to the media\n", + "description": "The number of Telegram Stars that must be paid to buy access to the media; 1-2500", + "html_description": "The number of Telegram Stars that must be paid to buy access to the media; 1-2500", + "rst_description": "The number of Telegram Stars that must be paid to buy access to the media; 1-2500\n", "name": "star_count" }, { @@ -9002,6 +9067,14 @@ "rst_description": "A JSON-serialized array describing the media to be sent; up to 10 items\n", "name": "media" }, + { + "type": "String", + "required": false, + "description": "Bot-defined paid media payload, 0-128 bytes. This will not be displayed to the user, use it for your internal processes.", + "html_description": "Bot-defined paid media payload, 0-128 bytes. This will not be displayed to the user, use it for your internal processes.", + "rst_description": "Bot-defined paid media payload, 0-128 bytes. This will not be displayed to the user, use it for your internal processes.\n", + "name": "payload" + }, { "type": "String", "required": false, @@ -15366,9 +15439,9 @@ }, { "type": "String", - "description": "Bot-defined invoice payload, 1-128 bytes. This will not be displayed to the user, use for your internal processes.", - "html_description": "Bot-defined invoice payload, 1-128 bytes. This will not be displayed to the user, use for your internal processes.", - "rst_description": "Bot-defined invoice payload, 1-128 bytes. This will not be displayed to the user, use for your internal processes.\n", + "description": "Bot-defined invoice payload, 1-128 bytes. This will not be displayed to the user, use it for your internal processes.", + "html_description": "Bot-defined invoice payload, 1-128 bytes. This will not be displayed to the user, use it for your internal processes.", + "rst_description": "Bot-defined invoice payload, 1-128 bytes. This will not be displayed to the user, use it for your internal processes.\n", "name": "payload", "required": true }, @@ -15654,9 +15727,9 @@ { "type": "String", "required": true, - "description": "Bot-defined invoice payload, 1-128 bytes. This will not be displayed to the user, use for your internal processes.", - "html_description": "Bot-defined invoice payload, 1-128 bytes. This will not be displayed to the user, use for your internal processes.", - "rst_description": "Bot-defined invoice payload, 1-128 bytes. This will not be displayed to the user, use for your internal processes.\n", + "description": "Bot-defined invoice payload, 1-128 bytes. This will not be displayed to the user, use it for your internal processes.", + "html_description": "Bot-defined invoice payload, 1-128 bytes. This will not be displayed to the user, use it for your internal processes.", + "rst_description": "Bot-defined invoice payload, 1-128 bytes. This will not be displayed to the user, use it for your internal processes.\n", "name": "payload" }, { @@ -15872,9 +15945,9 @@ { "type": "String", "required": true, - "description": "Bot-defined invoice payload, 1-128 bytes. This will not be displayed to the user, use for your internal processes.", - "html_description": "Bot-defined invoice payload, 1-128 bytes. This will not be displayed to the user, use for your internal processes.", - "rst_description": "Bot-defined invoice payload, 1-128 bytes. This will not be displayed to the user, use for your internal processes.\n", + "description": "Bot-defined invoice payload, 1-128 bytes. This will not be displayed to the user, use it for your internal processes.", + "html_description": "Bot-defined invoice payload, 1-128 bytes. This will not be displayed to the user, use it for your internal processes.", + "rst_description": "Bot-defined invoice payload, 1-128 bytes. This will not be displayed to the user, use it for your internal processes.\n", "name": "payload" }, { @@ -16578,6 +16651,32 @@ ], "category": "types" }, + { + "anchor": "paidmediapurchased", + "name": "PaidMediaPurchased", + "description": "This object contains information about a paid media purchase.", + "html_description": "

This object contains information about a paid media purchase.

", + "rst_description": "This object contains information about a paid media purchase.", + "annotations": [ + { + "type": "User", + "description": "User who purchased the media", + "html_description": "User who purchased the media", + "rst_description": "User who purchased the media\n", + "name": "from", + "required": true + }, + { + "type": "String", + "description": "Bot-specified paid media payload", + "html_description": "Bot-specified paid media payload", + "rst_description": "Bot-specified paid media payload\n", + "name": "paid_media_payload", + "required": true + } + ], + "category": "types" + }, { "anchor": "revenuewithdrawalstate", "name": "RevenueWithdrawalState", @@ -16704,6 +16803,14 @@ "rst_description": "*Optional*. Information about the paid media bought by the user\n", "name": "paid_media", "required": false + }, + { + "type": "String", + "description": "Bot-specified paid media payload", + "html_description": "Optional. Bot-specified paid media payload", + "rst_description": "*Optional*. Bot-specified paid media payload\n", + "name": "paid_media_payload", + "required": false } ], "category": "types" diff --git a/.butcher/types/ChatBoostSourceGiveaway/entity.json b/.butcher/types/ChatBoostSourceGiveaway/entity.json index f01133f3..a530eaf0 100644 --- a/.butcher/types/ChatBoostSourceGiveaway/entity.json +++ b/.butcher/types/ChatBoostSourceGiveaway/entity.json @@ -7,9 +7,9 @@ "object": { "anchor": "chatboostsourcegiveaway", "name": "ChatBoostSourceGiveaway", - "description": "The boost was obtained by the creation of a Telegram Premium giveaway. This boosts the chat 4 times for the duration of the corresponding Telegram Premium subscription.", - "html_description": "

The boost was obtained by the creation of a Telegram Premium giveaway. This boosts the chat 4 times for the duration of the corresponding Telegram Premium subscription.

", - "rst_description": "The boost was obtained by the creation of a Telegram Premium giveaway. This boosts the chat 4 times for the duration of the corresponding Telegram Premium subscription.", + "description": "The boost was obtained by the creation of a Telegram Premium or a Telegram Star giveaway. This boosts the chat 4 times for the duration of the corresponding Telegram Premium subscription for Telegram Premium giveaways and prize_star_count / 500 times for one year for Telegram Star giveaways.", + "html_description": "

The boost was obtained by the creation of a Telegram Premium or a Telegram Star giveaway. This boosts the chat 4 times for the duration of the corresponding Telegram Premium subscription for Telegram Premium giveaways and prize_star_count / 500 times for one year for Telegram Star giveaways.

", + "rst_description": "The boost was obtained by the creation of a Telegram Premium or a Telegram Star giveaway. This boosts the chat 4 times for the duration of the corresponding Telegram Premium subscription for Telegram Premium giveaways and *prize_star_count* / 500 times for one year for Telegram Star giveaways.", "annotations": [ { "type": "String", @@ -29,12 +29,20 @@ }, { "type": "User", - "description": "User that won the prize in the giveaway if any", - "html_description": "Optional. User that won the prize in the giveaway if any", - "rst_description": "*Optional*. User that won the prize in the giveaway if any\n", + "description": "User that won the prize in the giveaway if any; for Telegram Premium giveaways only", + "html_description": "Optional. User that won the prize in the giveaway if any; for Telegram Premium giveaways only", + "rst_description": "*Optional*. User that won the prize in the giveaway if any; for Telegram Premium giveaways only\n", "name": "user", "required": false }, + { + "type": "Integer", + "description": "The number of Telegram Stars to be split between giveaway winners; for Telegram Star giveaways only", + "html_description": "Optional. The number of Telegram Stars to be split between giveaway winners; for Telegram Star giveaways only", + "rst_description": "*Optional*. The number of Telegram Stars to be split between giveaway winners; for Telegram Star giveaways only\n", + "name": "prize_star_count", + "required": false + }, { "type": "True", "description": "True, if the giveaway was completed, but there was no user to win the prize", diff --git a/.butcher/types/ChatInviteLink/entity.json b/.butcher/types/ChatInviteLink/entity.json index d2441682..c656d1a7 100644 --- a/.butcher/types/ChatInviteLink/entity.json +++ b/.butcher/types/ChatInviteLink/entity.json @@ -82,6 +82,22 @@ "rst_description": "*Optional*. Number of pending join requests created using this link\n", "name": "pending_join_request_count", "required": false + }, + { + "type": "Integer", + "description": "The number of seconds the subscription will be active for before the next payment", + "html_description": "Optional. The number of seconds the subscription will be active for before the next payment", + "rst_description": "*Optional*. The number of seconds the subscription will be active for before the next payment\n", + "name": "subscription_period", + "required": false + }, + { + "type": "Integer", + "description": "The amount of Telegram Stars a user must pay initially and after each subsequent subscription period to be a member of the chat using the link", + "html_description": "Optional. The amount of Telegram Stars a user must pay initially and after each subsequent subscription period to be a member of the chat using the link", + "rst_description": "*Optional*. The amount of Telegram Stars a user must pay initially and after each subsequent subscription period to be a member of the chat using the link\n", + "name": "subscription_price", + "required": false } ], "category": "types" diff --git a/.butcher/types/Giveaway/entity.json b/.butcher/types/Giveaway/entity.json index 53178a8c..ad326982 100644 --- a/.butcher/types/Giveaway/entity.json +++ b/.butcher/types/Giveaway/entity.json @@ -69,9 +69,17 @@ }, { "type": "Integer", - "description": "The number of months the Telegram Premium subscription won from the giveaway will be active for", - "html_description": "Optional. The number of months the Telegram Premium subscription won from the giveaway will be active for", - "rst_description": "*Optional*. The number of months the Telegram Premium subscription won from the giveaway will be active for\n", + "description": "The number of Telegram Stars to be split between giveaway winners; for Telegram Star giveaways only", + "html_description": "Optional. The number of Telegram Stars to be split between giveaway winners; for Telegram Star giveaways only", + "rst_description": "*Optional*. The number of Telegram Stars to be split between giveaway winners; for Telegram Star giveaways only\n", + "name": "prize_star_count", + "required": false + }, + { + "type": "Integer", + "description": "The number of months the Telegram Premium subscription won from the giveaway will be active for; for Telegram Premium giveaways only", + "html_description": "Optional. The number of months the Telegram Premium subscription won from the giveaway will be active for; for Telegram Premium giveaways only", + "rst_description": "*Optional*. The number of months the Telegram Premium subscription won from the giveaway will be active for; for Telegram Premium giveaways only\n", "name": "premium_subscription_month_count", "required": false } diff --git a/.butcher/types/GiveawayCompleted/entity.json b/.butcher/types/GiveawayCompleted/entity.json index 169d3446..e1ecec54 100644 --- a/.butcher/types/GiveawayCompleted/entity.json +++ b/.butcher/types/GiveawayCompleted/entity.json @@ -34,6 +34,14 @@ "rst_description": "*Optional*. Message with the giveaway that was completed, if it wasn't deleted\n", "name": "giveaway_message", "required": false + }, + { + "type": "True", + "description": "True, if the giveaway is a Telegram Star giveaway. Otherwise, currently, the giveaway is a Telegram Premium giveaway.", + "html_description": "Optional. True, if the giveaway is a Telegram Star giveaway. Otherwise, currently, the giveaway is a Telegram Premium giveaway.", + "rst_description": "*Optional*. :code:`True`, if the giveaway is a Telegram Star giveaway. Otherwise, currently, the giveaway is a Telegram Premium giveaway.\n", + "name": "is_star_giveaway", + "required": false } ], "category": "types" diff --git a/.butcher/types/GiveawayCreated/entity.json b/.butcher/types/GiveawayCreated/entity.json index 38e68bf3..1cf7ca10 100644 --- a/.butcher/types/GiveawayCreated/entity.json +++ b/.butcher/types/GiveawayCreated/entity.json @@ -7,10 +7,19 @@ "object": { "anchor": "giveawaycreated", "name": "GiveawayCreated", - "description": "This object represents a service message about the creation of a scheduled giveaway. Currently holds no information.", - "html_description": "

This object represents a service message about the creation of a scheduled giveaway. Currently holds no information.

", - "rst_description": "This object represents a service message about the creation of a scheduled giveaway. Currently holds no information.", - "annotations": [], + "description": "This object represents a service message about the creation of a scheduled giveaway.", + "html_description": "

This object represents a service message about the creation of a scheduled giveaway.

", + "rst_description": "This object represents a service message about the creation of a scheduled giveaway.", + "annotations": [ + { + "type": "Integer", + "description": "The number of Telegram Stars to be split between giveaway winners; for Telegram Star giveaways only", + "html_description": "Optional. The number of Telegram Stars to be split between giveaway winners; for Telegram Star giveaways only", + "rst_description": "*Optional*. The number of Telegram Stars to be split between giveaway winners; for Telegram Star giveaways only\n", + "name": "prize_star_count", + "required": false + } + ], "category": "types" } } diff --git a/.butcher/types/GiveawayWinners/entity.json b/.butcher/types/GiveawayWinners/entity.json index 76628b90..6843f7a7 100644 --- a/.butcher/types/GiveawayWinners/entity.json +++ b/.butcher/types/GiveawayWinners/entity.json @@ -61,9 +61,17 @@ }, { "type": "Integer", - "description": "The number of months the Telegram Premium subscription won from the giveaway will be active for", - "html_description": "Optional. The number of months the Telegram Premium subscription won from the giveaway will be active for", - "rst_description": "*Optional*. The number of months the Telegram Premium subscription won from the giveaway will be active for\n", + "description": "The number of Telegram Stars that were split between giveaway winners; for Telegram Star giveaways only", + "html_description": "Optional. The number of Telegram Stars that were split between giveaway winners; for Telegram Star giveaways only", + "rst_description": "*Optional*. The number of Telegram Stars that were split between giveaway winners; for Telegram Star giveaways only\n", + "name": "prize_star_count", + "required": false + }, + { + "type": "Integer", + "description": "The number of months the Telegram Premium subscription won from the giveaway will be active for; for Telegram Premium giveaways only", + "html_description": "Optional. The number of months the Telegram Premium subscription won from the giveaway will be active for; for Telegram Premium giveaways only", + "rst_description": "*Optional*. The number of months the Telegram Premium subscription won from the giveaway will be active for; for Telegram Premium giveaways only\n", "name": "premium_subscription_month_count", "required": false }, diff --git a/.butcher/types/InputInvoiceMessageContent/entity.json b/.butcher/types/InputInvoiceMessageContent/entity.json index bed9e656..76d2f39b 100644 --- a/.butcher/types/InputInvoiceMessageContent/entity.json +++ b/.butcher/types/InputInvoiceMessageContent/entity.json @@ -29,9 +29,9 @@ }, { "type": "String", - "description": "Bot-defined invoice payload, 1-128 bytes. This will not be displayed to the user, use for your internal processes.", - "html_description": "Bot-defined invoice payload, 1-128 bytes. This will not be displayed to the user, use for your internal processes.", - "rst_description": "Bot-defined invoice payload, 1-128 bytes. This will not be displayed to the user, use for your internal processes.\n", + "description": "Bot-defined invoice payload, 1-128 bytes. This will not be displayed to the user, use it for your internal processes.", + "html_description": "Bot-defined invoice payload, 1-128 bytes. This will not be displayed to the user, use it for your internal processes.", + "rst_description": "Bot-defined invoice payload, 1-128 bytes. This will not be displayed to the user, use it for your internal processes.\n", "name": "payload", "required": true }, diff --git a/.butcher/types/PaidMediaPurchased/entity.json b/.butcher/types/PaidMediaPurchased/entity.json new file mode 100644 index 00000000..0823946e --- /dev/null +++ b/.butcher/types/PaidMediaPurchased/entity.json @@ -0,0 +1,33 @@ +{ + "meta": {}, + "group": { + "title": "Payments", + "anchor": "payments" + }, + "object": { + "anchor": "paidmediapurchased", + "name": "PaidMediaPurchased", + "description": "This object contains information about a paid media purchase.", + "html_description": "

This object contains information about a paid media purchase.

", + "rst_description": "This object contains information about a paid media purchase.", + "annotations": [ + { + "type": "User", + "description": "User who purchased the media", + "html_description": "User who purchased the media", + "rst_description": "User who purchased the media\n", + "name": "from", + "required": true + }, + { + "type": "String", + "description": "Bot-specified paid media payload", + "html_description": "Bot-specified paid media payload", + "rst_description": "Bot-specified paid media payload\n", + "name": "paid_media_payload", + "required": true + } + ], + "category": "types" + } +} diff --git a/.butcher/types/TransactionPartnerUser/entity.json b/.butcher/types/TransactionPartnerUser/entity.json index 45ac0d68..ee2e06ce 100644 --- a/.butcher/types/TransactionPartnerUser/entity.json +++ b/.butcher/types/TransactionPartnerUser/entity.json @@ -42,6 +42,14 @@ "rst_description": "*Optional*. Information about the paid media bought by the user\n", "name": "paid_media", "required": false + }, + { + "type": "String", + "description": "Bot-specified paid media payload", + "html_description": "Optional. Bot-specified paid media payload", + "rst_description": "*Optional*. Bot-specified paid media payload\n", + "name": "paid_media_payload", + "required": false } ], "category": "types" diff --git a/.butcher/types/Update/entity.json b/.butcher/types/Update/entity.json index ce43e9f9..256b073b 100644 --- a/.butcher/types/Update/entity.json +++ b/.butcher/types/Update/entity.json @@ -139,6 +139,14 @@ "name": "pre_checkout_query", "required": false }, + { + "type": "PaidMediaPurchased", + "description": "A user purchased paid media with a non-empty payload sent by the bot in a non-channel chat", + "html_description": "Optional. A user purchased paid media with a non-empty payload sent by the bot in a non-channel chat", + "rst_description": "*Optional*. A user purchased paid media with a non-empty payload sent by the bot in a non-channel chat\n", + "name": "purchased_paid_media", + "required": false + }, { "type": "Poll", "description": "New poll state. Bots receive only updates about manually stopped polls and polls, which are sent by the bot", diff --git a/CHANGES/1510.feature.rst b/CHANGES/1510.feature.rst new file mode 100644 index 00000000..17aef064 --- /dev/null +++ b/CHANGES/1510.feature.rst @@ -0,0 +1,15 @@ +- Added updates about purchased paid media, represented by the class + :class:`aiogram.types.paid_media_purchased.PaidMediaPurchased` + and the field :code:`purchased_paid_media` in the class + :class:`aiogram.types.update.Update`. +- Added the ability to specify a payload in + :class:`aiogram.methods.send_paid_media.SendPaidMedia` that is received back by the bot in + :class:`aiogram.types.transaction_partner_user.TransactionPartnerUser` + and :code:`purchased_paid_media` updates. +- Added the field :code:`prize_star_count` to the classes + :class:`aiogram.types.giveaway_created.GiveawayCreated`, + :class:`aiogram.types.giveaway.Giveaway`, + :class:`aiogram.types.giveaway_winners.GiveawayWinners` + and :class:`aiogram.types.chat_boost_source_giveaway.ChatBoostSourceGiveaway`. +- Added the field :code:`is_star_giveaway` to the class + :class:`aiogram.types.giveaway_completed.GiveawayCompleted`. diff --git a/aiogram/client/bot.py b/aiogram/client/bot.py index 4b83e419..ef885788 100644 --- a/aiogram/client/bot.py +++ b/aiogram/client/bot.py @@ -1000,7 +1000,7 @@ class Bot: :param title: Product name, 1-32 characters :param description: Product description, 1-255 characters - :param payload: Bot-defined invoice payload, 1-128 bytes. This will not be displayed to the user, use for your internal processes. + :param payload: Bot-defined invoice payload, 1-128 bytes. This will not be displayed to the user, use it for your internal processes. :param currency: Three-letter ISO 4217 currency code, see `more on currencies `_. Pass 'XTR' for payments in `Telegram Stars `_. :param prices: Price breakdown, a JSON-serialized list of components (e.g. product price, tax, discount, delivery cost, delivery tax, bonus, etc.). Must contain exactly one item for payments in `Telegram Stars `_. :param provider_token: Payment provider token, obtained via `@BotFather `_. Pass an empty string for payments in `Telegram Stars `_. @@ -2669,7 +2669,7 @@ class Bot: :param chat_id: Unique identifier for the target chat or username of the target channel (in the format :code:`@channelusername`) :param title: Product name, 1-32 characters :param description: Product description, 1-255 characters - :param payload: Bot-defined invoice payload, 1-128 bytes. This will not be displayed to the user, use for your internal processes. + :param payload: Bot-defined invoice payload, 1-128 bytes. This will not be displayed to the user, use it for your internal processes. :param currency: Three-letter ISO 4217 currency code, see `more on currencies `_. Pass 'XTR' for payments in `Telegram Stars `_. :param prices: Price breakdown, a JSON-serialized list of components (e.g. product price, tax, discount, delivery cost, delivery tax, bonus, etc.). Must contain exactly one item for payments in `Telegram Stars `_. :param message_thread_id: Unique identifier for the target message thread (topic) of the forum; for forum supergroups only @@ -4658,6 +4658,7 @@ class Bot: star_count: int, media: List[Union[InputPaidMediaPhoto, InputPaidMediaVideo]], business_connection_id: Optional[str] = None, + payload: Optional[str] = None, caption: Optional[str] = None, parse_mode: Optional[str] = None, caption_entities: Optional[List[MessageEntity]] = None, @@ -4676,9 +4677,10 @@ class Bot: Source: https://core.telegram.org/bots/api#sendpaidmedia :param chat_id: Unique identifier for the target chat or username of the target channel (in the format :code:`@channelusername`). If the chat is a channel, all Telegram Star proceeds from this media will be credited to the chat's balance. Otherwise, they will be credited to the bot's balance. - :param star_count: The number of Telegram Stars that must be paid to buy access to the media + :param star_count: The number of Telegram Stars that must be paid to buy access to the media; 1-2500 :param media: A JSON-serialized array describing the media to be sent; up to 10 items :param business_connection_id: Unique identifier of the business connection on behalf of which the message will be sent + :param payload: Bot-defined paid media payload, 0-128 bytes. This will not be displayed to the user, use it for your internal processes. :param caption: Media caption, 0-1024 characters after entities parsing :param parse_mode: Mode for parsing entities in the media caption. See `formatting options `_ for more details. :param caption_entities: A JSON-serialized list of special entities that appear in the caption, which can be specified instead of *parse_mode* @@ -4696,6 +4698,7 @@ class Bot: star_count=star_count, media=media, business_connection_id=business_connection_id, + payload=payload, caption=caption, parse_mode=parse_mode, caption_entities=caption_entities, diff --git a/aiogram/dispatcher/middlewares/user_context.py b/aiogram/dispatcher/middlewares/user_context.py index aa03ee60..68e4b4ab 100644 --- a/aiogram/dispatcher/middlewares/user_context.py +++ b/aiogram/dispatcher/middlewares/user_context.py @@ -175,4 +175,8 @@ class UserContextMiddleware(BaseMiddleware): ), business_connection_id=event.edited_business_message.business_connection_id, ) + if event.purchased_paid_media: + return EventContext( + user=event.purchased_paid_media.from_user, + ) return EventContext() diff --git a/aiogram/dispatcher/router.py b/aiogram/dispatcher/router.py index 400c1c09..9a2796ba 100644 --- a/aiogram/dispatcher/router.py +++ b/aiogram/dispatcher/router.py @@ -70,6 +70,9 @@ class Router: router=self, event_name="edited_business_message" ) self.business_message = TelegramEventObserver(router=self, event_name="business_message") + self.purchased_paid_media = TelegramEventObserver( + router=self, event_name="purchased_paid_media" + ) self.errors = self.error = TelegramEventObserver(router=self, event_name="error") @@ -99,6 +102,7 @@ class Router: "business_connection": self.business_connection, "edited_business_message": self.edited_business_message, "business_message": self.business_message, + "purchased_paid_media": self.purchased_paid_media, "error": self.errors, } diff --git a/aiogram/enums/update_type.py b/aiogram/enums/update_type.py index 16fe0e2c..2629264d 100644 --- a/aiogram/enums/update_type.py +++ b/aiogram/enums/update_type.py @@ -23,6 +23,7 @@ class UpdateType(str, Enum): CALLBACK_QUERY = "callback_query" SHIPPING_QUERY = "shipping_query" PRE_CHECKOUT_QUERY = "pre_checkout_query" + PURCHASED_PAID_MEDIA = "purchased_paid_media" POLL = "poll" POLL_ANSWER = "poll_answer" MY_CHAT_MEMBER = "my_chat_member" diff --git a/aiogram/methods/create_invoice_link.py b/aiogram/methods/create_invoice_link.py index 2068f759..a736aed6 100644 --- a/aiogram/methods/create_invoice_link.py +++ b/aiogram/methods/create_invoice_link.py @@ -21,7 +21,7 @@ class CreateInvoiceLink(TelegramMethod[str]): description: str """Product description, 1-255 characters""" payload: str - """Bot-defined invoice payload, 1-128 bytes. This will not be displayed to the user, use for your internal processes.""" + """Bot-defined invoice payload, 1-128 bytes. This will not be displayed to the user, use it for your internal processes.""" currency: str """Three-letter ISO 4217 currency code, see `more on currencies `_. Pass 'XTR' for payments in `Telegram Stars `_.""" prices: List[LabeledPrice] diff --git a/aiogram/methods/send_invoice.py b/aiogram/methods/send_invoice.py index 108219ef..f5b01d8d 100644 --- a/aiogram/methods/send_invoice.py +++ b/aiogram/methods/send_invoice.py @@ -26,7 +26,7 @@ class SendInvoice(TelegramMethod[Message]): description: str """Product description, 1-255 characters""" payload: str - """Bot-defined invoice payload, 1-128 bytes. This will not be displayed to the user, use for your internal processes.""" + """Bot-defined invoice payload, 1-128 bytes. This will not be displayed to the user, use it for your internal processes.""" currency: str """Three-letter ISO 4217 currency code, see `more on currencies `_. Pass 'XTR' for payments in `Telegram Stars `_.""" prices: List[LabeledPrice] diff --git a/aiogram/methods/send_paid_media.py b/aiogram/methods/send_paid_media.py index dd847f5a..eba103bb 100644 --- a/aiogram/methods/send_paid_media.py +++ b/aiogram/methods/send_paid_media.py @@ -29,11 +29,13 @@ class SendPaidMedia(TelegramMethod[Message]): chat_id: Union[int, str] """Unique identifier for the target chat or username of the target channel (in the format :code:`@channelusername`). If the chat is a channel, all Telegram Star proceeds from this media will be credited to the chat's balance. Otherwise, they will be credited to the bot's balance.""" star_count: int - """The number of Telegram Stars that must be paid to buy access to the media""" + """The number of Telegram Stars that must be paid to buy access to the media; 1-2500""" media: List[Union[InputPaidMediaPhoto, InputPaidMediaVideo]] """A JSON-serialized array describing the media to be sent; up to 10 items""" business_connection_id: Optional[str] = None """Unique identifier of the business connection on behalf of which the message will be sent""" + payload: Optional[str] = None + """Bot-defined paid media payload, 0-128 bytes. This will not be displayed to the user, use it for your internal processes.""" caption: Optional[str] = None """Media caption, 0-1024 characters after entities parsing""" parse_mode: Optional[str] = None @@ -64,6 +66,7 @@ class SendPaidMedia(TelegramMethod[Message]): star_count: int, media: List[Union[InputPaidMediaPhoto, InputPaidMediaVideo]], business_connection_id: Optional[str] = None, + payload: Optional[str] = None, caption: Optional[str] = None, parse_mode: Optional[str] = None, caption_entities: Optional[List[MessageEntity]] = None, @@ -85,6 +88,7 @@ class SendPaidMedia(TelegramMethod[Message]): star_count=star_count, media=media, business_connection_id=business_connection_id, + payload=payload, caption=caption, parse_mode=parse_mode, caption_entities=caption_entities, diff --git a/aiogram/types/__init__.py b/aiogram/types/__init__.py index 97442b35..52e52ff8 100644 --- a/aiogram/types/__init__.py +++ b/aiogram/types/__init__.py @@ -233,6 +233,7 @@ from .web_app_data import WebAppData from .web_app_info import WebAppInfo from .webhook_info import WebhookInfo from .write_access_allowed import WriteAccessAllowed +from .paid_media_purchased import PaidMediaPurchased __all__ = ( "Animation", @@ -397,6 +398,7 @@ __all__ = ( "PaidMediaInfo", "PaidMediaPhoto", "PaidMediaPreview", + "PaidMediaPurchased", "PaidMediaVideo", "PassportData", "PassportElementError", diff --git a/aiogram/types/chat_boost_source_giveaway.py b/aiogram/types/chat_boost_source_giveaway.py index dbb81507..3e109ddc 100644 --- a/aiogram/types/chat_boost_source_giveaway.py +++ b/aiogram/types/chat_boost_source_giveaway.py @@ -11,7 +11,7 @@ if TYPE_CHECKING: class ChatBoostSourceGiveaway(ChatBoostSource): """ - The boost was obtained by the creation of a Telegram Premium giveaway. This boosts the chat 4 times for the duration of the corresponding Telegram Premium subscription. + The boost was obtained by the creation of a Telegram Premium or a Telegram Star giveaway. This boosts the chat 4 times for the duration of the corresponding Telegram Premium subscription for Telegram Premium giveaways and *prize_star_count* / 500 times for one year for Telegram Star giveaways. Source: https://core.telegram.org/bots/api#chatboostsourcegiveaway """ @@ -21,7 +21,9 @@ class ChatBoostSourceGiveaway(ChatBoostSource): giveaway_message_id: int """Identifier of a message in the chat with the giveaway; the message could have been deleted already. May be 0 if the message isn't sent yet.""" user: Optional[User] = None - """*Optional*. User that won the prize in the giveaway if any""" + """*Optional*. User that won the prize in the giveaway if any; for Telegram Premium giveaways only""" + prize_star_count: Optional[int] = None + """*Optional*. The number of Telegram Stars to be split between giveaway winners; for Telegram Star giveaways only""" is_unclaimed: Optional[bool] = None """*Optional*. True, if the giveaway was completed, but there was no user to win the prize""" @@ -35,6 +37,7 @@ class ChatBoostSourceGiveaway(ChatBoostSource): source: Literal[ChatBoostSourceType.GIVEAWAY] = ChatBoostSourceType.GIVEAWAY, giveaway_message_id: int, user: Optional[User] = None, + prize_star_count: Optional[int] = None, is_unclaimed: Optional[bool] = None, **__pydantic_kwargs: Any, ) -> None: @@ -46,6 +49,7 @@ class ChatBoostSourceGiveaway(ChatBoostSource): source=source, giveaway_message_id=giveaway_message_id, user=user, + prize_star_count=prize_star_count, is_unclaimed=is_unclaimed, **__pydantic_kwargs, ) diff --git a/aiogram/types/chat_invite_link.py b/aiogram/types/chat_invite_link.py index 7817c23d..be495a5b 100644 --- a/aiogram/types/chat_invite_link.py +++ b/aiogram/types/chat_invite_link.py @@ -34,6 +34,10 @@ class ChatInviteLink(TelegramObject): """*Optional*. The maximum number of users that can be members of the chat simultaneously after joining the chat via this invite link; 1-99999""" pending_join_request_count: Optional[int] = None """*Optional*. Number of pending join requests created using this link""" + subscription_period: Optional[int] = None + """*Optional*. The number of seconds the subscription will be active for before the next payment""" + subscription_price: Optional[int] = None + """*Optional*. The amount of Telegram Stars a user must pay initially and after each subsequent subscription period to be a member of the chat using the link""" if TYPE_CHECKING: # DO NOT EDIT MANUALLY!!! @@ -51,6 +55,8 @@ class ChatInviteLink(TelegramObject): expire_date: Optional[DateTime] = None, member_limit: Optional[int] = None, pending_join_request_count: Optional[int] = None, + subscription_period: Optional[int] = None, + subscription_price: Optional[int] = None, **__pydantic_kwargs: Any, ) -> None: # DO NOT EDIT MANUALLY!!! @@ -67,5 +73,7 @@ class ChatInviteLink(TelegramObject): expire_date=expire_date, member_limit=member_limit, pending_join_request_count=pending_join_request_count, + subscription_period=subscription_period, + subscription_price=subscription_price, **__pydantic_kwargs, ) diff --git a/aiogram/types/chat_join_request.py b/aiogram/types/chat_join_request.py index 4a128f17..6b900611 100644 --- a/aiogram/types/chat_join_request.py +++ b/aiogram/types/chat_join_request.py @@ -1074,7 +1074,7 @@ class ChatJoinRequest(TelegramObject): :param title: Product name, 1-32 characters :param description: Product description, 1-255 characters - :param payload: Bot-defined invoice payload, 1-128 bytes. This will not be displayed to the user, use for your internal processes. + :param payload: Bot-defined invoice payload, 1-128 bytes. This will not be displayed to the user, use it for your internal processes. :param currency: Three-letter ISO 4217 currency code, see `more on currencies `_. Pass 'XTR' for payments in `Telegram Stars `_. :param prices: Price breakdown, a JSON-serialized list of components (e.g. product price, tax, discount, delivery cost, delivery tax, bonus, etc.). Must contain exactly one item for payments in `Telegram Stars `_. :param message_thread_id: Unique identifier for the target message thread (topic) of the forum; for forum supergroups only @@ -1187,7 +1187,7 @@ class ChatJoinRequest(TelegramObject): :param title: Product name, 1-32 characters :param description: Product description, 1-255 characters - :param payload: Bot-defined invoice payload, 1-128 bytes. This will not be displayed to the user, use for your internal processes. + :param payload: Bot-defined invoice payload, 1-128 bytes. This will not be displayed to the user, use it for your internal processes. :param currency: Three-letter ISO 4217 currency code, see `more on currencies `_. Pass 'XTR' for payments in `Telegram Stars `_. :param prices: Price breakdown, a JSON-serialized list of components (e.g. product price, tax, discount, delivery cost, delivery tax, bonus, etc.). Must contain exactly one item for payments in `Telegram Stars `_. :param message_thread_id: Unique identifier for the target message thread (topic) of the forum; for forum supergroups only diff --git a/aiogram/types/chat_member_updated.py b/aiogram/types/chat_member_updated.py index 48c3e9db..233e1e6b 100644 --- a/aiogram/types/chat_member_updated.py +++ b/aiogram/types/chat_member_updated.py @@ -621,7 +621,7 @@ class ChatMemberUpdated(TelegramObject): :param title: Product name, 1-32 characters :param description: Product description, 1-255 characters - :param payload: Bot-defined invoice payload, 1-128 bytes. This will not be displayed to the user, use for your internal processes. + :param payload: Bot-defined invoice payload, 1-128 bytes. This will not be displayed to the user, use it for your internal processes. :param currency: Three-letter ISO 4217 currency code, see `more on currencies `_. Pass 'XTR' for payments in `Telegram Stars `_. :param prices: Price breakdown, a JSON-serialized list of components (e.g. product price, tax, discount, delivery cost, delivery tax, bonus, etc.). Must contain exactly one item for payments in `Telegram Stars `_. :param message_thread_id: Unique identifier for the target message thread (topic) of the forum; for forum supergroups only diff --git a/aiogram/types/giveaway.py b/aiogram/types/giveaway.py index 1fa4f508..e80513e7 100644 --- a/aiogram/types/giveaway.py +++ b/aiogram/types/giveaway.py @@ -30,8 +30,10 @@ class Giveaway(TelegramObject): """*Optional*. Description of additional giveaway prize""" country_codes: Optional[List[str]] = None """*Optional*. A list of two-letter `ISO 3166-1 alpha-2 `_ country codes indicating the countries from which eligible users for the giveaway must come. If empty, then all users can participate in the giveaway. Users with a phone number that was bought on Fragment can always participate in giveaways.""" + prize_star_count: Optional[int] = None + """*Optional*. The number of Telegram Stars to be split between giveaway winners; for Telegram Star giveaways only""" premium_subscription_month_count: Optional[int] = None - """*Optional*. The number of months the Telegram Premium subscription won from the giveaway will be active for""" + """*Optional*. The number of months the Telegram Premium subscription won from the giveaway will be active for; for Telegram Premium giveaways only""" if TYPE_CHECKING: # DO NOT EDIT MANUALLY!!! @@ -47,6 +49,7 @@ class Giveaway(TelegramObject): has_public_winners: Optional[bool] = None, prize_description: Optional[str] = None, country_codes: Optional[List[str]] = None, + prize_star_count: Optional[int] = None, premium_subscription_month_count: Optional[int] = None, **__pydantic_kwargs: Any, ) -> None: @@ -62,6 +65,7 @@ class Giveaway(TelegramObject): has_public_winners=has_public_winners, prize_description=prize_description, country_codes=country_codes, + prize_star_count=prize_star_count, premium_subscription_month_count=premium_subscription_month_count, **__pydantic_kwargs, ) diff --git a/aiogram/types/giveaway_completed.py b/aiogram/types/giveaway_completed.py index 71d525af..54a371c4 100644 --- a/aiogram/types/giveaway_completed.py +++ b/aiogram/types/giveaway_completed.py @@ -21,6 +21,8 @@ class GiveawayCompleted(TelegramObject): """*Optional*. Number of undistributed prizes""" giveaway_message: Optional[Message] = None """*Optional*. Message with the giveaway that was completed, if it wasn't deleted""" + is_star_giveaway: Optional[bool] = None + """*Optional*. :code:`True`, if the giveaway is a Telegram Star giveaway. Otherwise, currently, the giveaway is a Telegram Premium giveaway.""" if TYPE_CHECKING: # DO NOT EDIT MANUALLY!!! @@ -32,6 +34,7 @@ class GiveawayCompleted(TelegramObject): winner_count: int, unclaimed_prize_count: Optional[int] = None, giveaway_message: Optional[Message] = None, + is_star_giveaway: Optional[bool] = None, **__pydantic_kwargs: Any, ) -> None: # DO NOT EDIT MANUALLY!!! @@ -42,5 +45,6 @@ class GiveawayCompleted(TelegramObject): winner_count=winner_count, unclaimed_prize_count=unclaimed_prize_count, giveaway_message=giveaway_message, + is_star_giveaway=is_star_giveaway, **__pydantic_kwargs, ) diff --git a/aiogram/types/giveaway_created.py b/aiogram/types/giveaway_created.py index cd66d75a..78bb0f14 100644 --- a/aiogram/types/giveaway_created.py +++ b/aiogram/types/giveaway_created.py @@ -1,9 +1,29 @@ +from __future__ import annotations + +from typing import TYPE_CHECKING, Any, Optional + from .base import TelegramObject class GiveawayCreated(TelegramObject): """ - This object represents a service message about the creation of a scheduled giveaway. Currently holds no information. + This object represents a service message about the creation of a scheduled giveaway. Source: https://core.telegram.org/bots/api#giveawaycreated """ + + prize_star_count: Optional[int] = None + """*Optional*. The number of Telegram Stars to be split between giveaway winners; for Telegram Star giveaways only""" + + if TYPE_CHECKING: + # DO NOT EDIT MANUALLY!!! + # This section was auto-generated via `butcher` + + def __init__( + __pydantic__self__, *, prize_star_count: Optional[int] = None, **__pydantic_kwargs: Any + ) -> None: + # DO NOT EDIT MANUALLY!!! + # This method was auto-generated via `butcher` + # Is needed only for type checking and IDE support without any additional plugins + + super().__init__(prize_star_count=prize_star_count, **__pydantic_kwargs) diff --git a/aiogram/types/giveaway_winners.py b/aiogram/types/giveaway_winners.py index 8a501f88..5abcec8d 100644 --- a/aiogram/types/giveaway_winners.py +++ b/aiogram/types/giveaway_winners.py @@ -29,8 +29,10 @@ class GiveawayWinners(TelegramObject): """List of up to 100 winners of the giveaway""" additional_chat_count: Optional[int] = None """*Optional*. The number of other chats the user had to join in order to be eligible for the giveaway""" + prize_star_count: Optional[int] = None + """*Optional*. The number of Telegram Stars that were split between giveaway winners; for Telegram Star giveaways only""" premium_subscription_month_count: Optional[int] = None - """*Optional*. The number of months the Telegram Premium subscription won from the giveaway will be active for""" + """*Optional*. The number of months the Telegram Premium subscription won from the giveaway will be active for; for Telegram Premium giveaways only""" unclaimed_prize_count: Optional[int] = None """*Optional*. Number of undistributed prizes""" only_new_members: Optional[bool] = None @@ -53,6 +55,7 @@ class GiveawayWinners(TelegramObject): winner_count: int, winners: List[User], additional_chat_count: Optional[int] = None, + prize_star_count: Optional[int] = None, premium_subscription_month_count: Optional[int] = None, unclaimed_prize_count: Optional[int] = None, only_new_members: Optional[bool] = None, @@ -71,6 +74,7 @@ class GiveawayWinners(TelegramObject): winner_count=winner_count, winners=winners, additional_chat_count=additional_chat_count, + prize_star_count=prize_star_count, premium_subscription_month_count=premium_subscription_month_count, unclaimed_prize_count=unclaimed_prize_count, only_new_members=only_new_members, diff --git a/aiogram/types/input_invoice_message_content.py b/aiogram/types/input_invoice_message_content.py index 0dbb6d27..10c6a1aa 100644 --- a/aiogram/types/input_invoice_message_content.py +++ b/aiogram/types/input_invoice_message_content.py @@ -20,7 +20,7 @@ class InputInvoiceMessageContent(InputMessageContent): description: str """Product description, 1-255 characters""" payload: str - """Bot-defined invoice payload, 1-128 bytes. This will not be displayed to the user, use for your internal processes.""" + """Bot-defined invoice payload, 1-128 bytes. This will not be displayed to the user, use it for your internal processes.""" currency: str """Three-letter ISO 4217 currency code, see `more on currencies `_. Pass 'XTR' for payments in `Telegram Stars `_.""" prices: List[LabeledPrice] diff --git a/aiogram/types/message.py b/aiogram/types/message.py index 2c1fa627..2e6e5efb 100644 --- a/aiogram/types/message.py +++ b/aiogram/types/message.py @@ -1467,7 +1467,7 @@ class Message(MaybeInaccessibleMessage): :param title: Product name, 1-32 characters :param description: Product description, 1-255 characters - :param payload: Bot-defined invoice payload, 1-128 bytes. This will not be displayed to the user, use for your internal processes. + :param payload: Bot-defined invoice payload, 1-128 bytes. This will not be displayed to the user, use it for your internal processes. :param currency: Three-letter ISO 4217 currency code, see `more on currencies `_. Pass 'XTR' for payments in `Telegram Stars `_. :param prices: Price breakdown, a JSON-serialized list of components (e.g. product price, tax, discount, delivery cost, delivery tax, bonus, etc.). Must contain exactly one item for payments in `Telegram Stars `_. :param provider_token: Payment provider token, obtained via `@BotFather `_. Pass an empty string for payments in `Telegram Stars `_. @@ -1582,7 +1582,7 @@ class Message(MaybeInaccessibleMessage): :param title: Product name, 1-32 characters :param description: Product description, 1-255 characters - :param payload: Bot-defined invoice payload, 1-128 bytes. This will not be displayed to the user, use for your internal processes. + :param payload: Bot-defined invoice payload, 1-128 bytes. This will not be displayed to the user, use it for your internal processes. :param currency: Three-letter ISO 4217 currency code, see `more on currencies `_. Pass 'XTR' for payments in `Telegram Stars `_. :param prices: Price breakdown, a JSON-serialized list of components (e.g. product price, tax, discount, delivery cost, delivery tax, bonus, etc.). Must contain exactly one item for payments in `Telegram Stars `_. :param provider_token: Payment provider token, obtained via `@BotFather `_. Pass an empty string for payments in `Telegram Stars `_. @@ -4103,6 +4103,7 @@ class Message(MaybeInaccessibleMessage): self, star_count: int, media: List[Union[InputPaidMediaPhoto, InputPaidMediaVideo]], + payload: Optional[str] = None, caption: Optional[str] = None, parse_mode: Optional[str] = None, caption_entities: Optional[List[MessageEntity]] = None, @@ -4127,8 +4128,9 @@ class Message(MaybeInaccessibleMessage): Source: https://core.telegram.org/bots/api#sendpaidmedia - :param star_count: The number of Telegram Stars that must be paid to buy access to the media + :param star_count: The number of Telegram Stars that must be paid to buy access to the media; 1-2500 :param media: A JSON-serialized array describing the media to be sent; up to 10 items + :param payload: Bot-defined paid media payload, 0-128 bytes. This will not be displayed to the user, use it for your internal processes. :param caption: Media caption, 0-1024 characters after entities parsing :param parse_mode: Mode for parsing entities in the media caption. See `formatting options `_ for more details. :param caption_entities: A JSON-serialized list of special entities that appear in the caption, which can be specified instead of *parse_mode* @@ -4154,6 +4156,7 @@ class Message(MaybeInaccessibleMessage): business_connection_id=self.business_connection_id, star_count=star_count, media=media, + payload=payload, caption=caption, parse_mode=parse_mode, caption_entities=caption_entities, @@ -4169,6 +4172,7 @@ class Message(MaybeInaccessibleMessage): self, star_count: int, media: List[Union[InputPaidMediaPhoto, InputPaidMediaVideo]], + payload: Optional[str] = None, caption: Optional[str] = None, parse_mode: Optional[str] = None, caption_entities: Optional[List[MessageEntity]] = None, @@ -4193,8 +4197,9 @@ class Message(MaybeInaccessibleMessage): Source: https://core.telegram.org/bots/api#sendpaidmedia - :param star_count: The number of Telegram Stars that must be paid to buy access to the media + :param star_count: The number of Telegram Stars that must be paid to buy access to the media; 1-2500 :param media: A JSON-serialized array describing the media to be sent; up to 10 items + :param payload: Bot-defined paid media payload, 0-128 bytes. This will not be displayed to the user, use it for your internal processes. :param caption: Media caption, 0-1024 characters after entities parsing :param parse_mode: Mode for parsing entities in the media caption. See `formatting options `_ for more details. :param caption_entities: A JSON-serialized list of special entities that appear in the caption, which can be specified instead of *parse_mode* @@ -4220,6 +4225,7 @@ class Message(MaybeInaccessibleMessage): reply_parameters=self.as_reply_parameters(), star_count=star_count, media=media, + payload=payload, caption=caption, parse_mode=parse_mode, caption_entities=caption_entities, diff --git a/aiogram/types/paid_media_purchased.py b/aiogram/types/paid_media_purchased.py new file mode 100644 index 00000000..c115adbd --- /dev/null +++ b/aiogram/types/paid_media_purchased.py @@ -0,0 +1,42 @@ +from __future__ import annotations + +from typing import TYPE_CHECKING, Any + +from pydantic import Field + +from .base import TelegramObject + +if TYPE_CHECKING: + from .user import User + + +class PaidMediaPurchased(TelegramObject): + """ + This object contains information about a paid media purchase. + + Source: https://core.telegram.org/bots/api#paidmediapurchased + """ + + from_user: User = Field(..., alias="from") + """User who purchased the media""" + paid_media_payload: str + """Bot-specified paid media payload""" + + if TYPE_CHECKING: + # DO NOT EDIT MANUALLY!!! + # This section was auto-generated via `butcher` + + def __init__( + __pydantic__self__, + *, + from_user: User, + paid_media_payload: str, + **__pydantic_kwargs: Any, + ) -> None: + # DO NOT EDIT MANUALLY!!! + # This method was auto-generated via `butcher` + # Is needed only for type checking and IDE support without any additional plugins + + super().__init__( + from_user=from_user, paid_media_payload=paid_media_payload, **__pydantic_kwargs + ) diff --git a/aiogram/types/transaction_partner_user.py b/aiogram/types/transaction_partner_user.py index 260c9a12..92eb9cb0 100644 --- a/aiogram/types/transaction_partner_user.py +++ b/aiogram/types/transaction_partner_user.py @@ -27,6 +27,8 @@ class TransactionPartnerUser(TransactionPartner): """*Optional*. Bot-specified invoice payload""" paid_media: Optional[List[Union[PaidMediaPreview, PaidMediaPhoto, PaidMediaVideo]]] = None """*Optional*. Information about the paid media bought by the user""" + paid_media_payload: Optional[str] = None + """*Optional*. Bot-specified paid media payload""" if TYPE_CHECKING: # DO NOT EDIT MANUALLY!!! @@ -41,6 +43,7 @@ class TransactionPartnerUser(TransactionPartner): paid_media: Optional[ List[Union[PaidMediaPreview, PaidMediaPhoto, PaidMediaVideo]] ] = None, + paid_media_payload: Optional[str] = None, **__pydantic_kwargs: Any, ) -> None: # DO NOT EDIT MANUALLY!!! @@ -52,5 +55,6 @@ class TransactionPartnerUser(TransactionPartner): user=user, invoice_payload=invoice_payload, paid_media=paid_media, + paid_media_payload=paid_media_payload, **__pydantic_kwargs, ) diff --git a/aiogram/types/update.py b/aiogram/types/update.py index 0533996d..d3347da4 100644 --- a/aiogram/types/update.py +++ b/aiogram/types/update.py @@ -2,8 +2,8 @@ from __future__ import annotations from typing import TYPE_CHECKING, Any, Optional, cast -from ..utils.mypy_hacks import lru_cache from .base import TelegramObject +from ..utils.mypy_hacks import lru_cache if TYPE_CHECKING: from .business_connection import BusinessConnection @@ -22,6 +22,7 @@ if TYPE_CHECKING: from .poll_answer import PollAnswer from .pre_checkout_query import PreCheckoutQuery from .shipping_query import ShippingQuery + from .paid_media_purchased import PaidMediaPurchased class Update(TelegramObject): @@ -65,6 +66,8 @@ class Update(TelegramObject): """*Optional*. New incoming shipping query. Only for invoices with flexible price""" pre_checkout_query: Optional[PreCheckoutQuery] = None """*Optional*. New incoming pre-checkout query. Contains full information about checkout""" + purchased_paid_media: Optional[PaidMediaPurchased] = None + """*Optional*. A user purchased paid media with a non-empty payload sent by the bot in a non-channel chat""" poll: Optional[Poll] = None """*Optional*. New poll state. Bots receive only updates about manually stopped polls and polls, which are sent by the bot""" poll_answer: Optional[PollAnswer] = None @@ -103,6 +106,7 @@ class Update(TelegramObject): callback_query: Optional[CallbackQuery] = None, shipping_query: Optional[ShippingQuery] = None, pre_checkout_query: Optional[PreCheckoutQuery] = None, + purchased_paid_media: Optional[PaidMediaPurchased] = None, poll: Optional[Poll] = None, poll_answer: Optional[PollAnswer] = None, my_chat_member: Optional[ChatMemberUpdated] = None, @@ -133,6 +137,7 @@ class Update(TelegramObject): callback_query=callback_query, shipping_query=shipping_query, pre_checkout_query=pre_checkout_query, + purchased_paid_media=purchased_paid_media, poll=poll, poll_answer=poll_answer, my_chat_member=my_chat_member, @@ -199,6 +204,8 @@ class Update(TelegramObject): return "edited_business_message" if self.business_message: return "business_message" + if self.purchased_paid_media: + return "purchased_paid_media" raise UpdateTypeLookupError("Update does not contain any known event type.") diff --git a/docs/api/types/index.rst b/docs/api/types/index.rst index 96204ad7..ae16f951 100644 --- a/docs/api/types/index.rst +++ b/docs/api/types/index.rst @@ -212,6 +212,34 @@ Stickers sticker sticker_set +Payments +======== + +.. toctree:: + :maxdepth: 1 + + invoice + labeled_price + order_info + paid_media_purchased + pre_checkout_query + refunded_payment + revenue_withdrawal_state + revenue_withdrawal_state_failed + revenue_withdrawal_state_pending + revenue_withdrawal_state_succeeded + shipping_address + shipping_option + shipping_query + star_transaction + star_transactions + successful_payment + transaction_partner + transaction_partner_fragment + transaction_partner_other + transaction_partner_telegram_ads + transaction_partner_user + Telegram Passport ================= @@ -233,33 +261,6 @@ Telegram Passport passport_element_error_unspecified passport_file -Payments -======== - -.. toctree:: - :maxdepth: 1 - - invoice - labeled_price - order_info - pre_checkout_query - refunded_payment - revenue_withdrawal_state - revenue_withdrawal_state_failed - revenue_withdrawal_state_pending - revenue_withdrawal_state_succeeded - shipping_address - shipping_option - shipping_query - star_transaction - star_transactions - successful_payment - transaction_partner - transaction_partner_fragment - transaction_partner_other - transaction_partner_telegram_ads - transaction_partner_user - Getting updates =============== diff --git a/docs/api/types/paid_media_purchased.rst b/docs/api/types/paid_media_purchased.rst new file mode 100644 index 00000000..5af1f9e2 --- /dev/null +++ b/docs/api/types/paid_media_purchased.rst @@ -0,0 +1,10 @@ +################## +PaidMediaPurchased +################## + + +.. automodule:: aiogram.types.paid_media_purchased + :members: + :member-order: bysource + :undoc-members: True + :exclude-members: model_config,model_fields diff --git a/tests/test_api/test_types/test_message.py b/tests/test_api/test_types/test_message.py index f6c1226b..0b53ce1d 100644 --- a/tests/test_api/test_types/test_message.py +++ b/tests/test_api/test_types/test_message.py @@ -527,7 +527,7 @@ TEST_MESSAGE_GIVEAWAY_CREATED = Message( date=datetime.datetime.now(), chat=Chat(id=42, type="private"), from_user=None, - giveaway_created=GiveawayCreated(), + giveaway_created=GiveawayCreated(prize_star_count=42), ) TEST_MESSAGE_GIVEAWAY_WINNERS = Message( message_id=42, diff --git a/tests/test_dispatcher/test_dispatcher.py b/tests/test_dispatcher/test_dispatcher.py index 98467934..d1bb6f91 100644 --- a/tests/test_dispatcher/test_dispatcher.py +++ b/tests/test_dispatcher/test_dispatcher.py @@ -42,6 +42,7 @@ from aiogram.types import ( ShippingQuery, Update, User, + PaidMediaPurchased, ) from aiogram.types.error_event import ErrorEvent from tests.mocked_bot import MockedBot @@ -586,6 +587,18 @@ class TestDispatcher: True, True, ), + pytest.param( + "purchased_paid_media", + Update( + update_id=42, + purchased_paid_media=PaidMediaPurchased( + paid_media_payload="payload", + from_user=User(id=42, is_bot=False, first_name="Test"), + ), + ), + False, + True, + ), ], ) async def test_listen_update(