Skip to content

Commit 6ebe88d

Browse files
added purchased paid media
1 parent 290b8d3 commit 6ebe88d

3 files changed

Lines changed: 159 additions & 6 deletions

File tree

telebot/__init__.py

Lines changed: 62 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -248,6 +248,7 @@ def __init__(
248248
self.business_message_handlers = []
249249
self.edited_business_message_handlers = []
250250
self.deleted_business_messages_handlers = []
251+
self.purchased_paid_media_handlers = []
251252

252253
self.custom_filters = {}
253254
self.state_handlers = []
@@ -724,6 +725,7 @@ def process_new_updates(self, updates: List[types.Update]):
724725
new_business_messages = None
725726
new_edited_business_messages = None
726727
new_deleted_business_messages = None
728+
new_purchased_paid_media = None
727729

728730
for update in updates:
729731
if apihelper.ENABLE_MIDDLEWARE and not self.use_class_middlewares:
@@ -805,8 +807,10 @@ def process_new_updates(self, updates: List[types.Update]):
805807
if update.deleted_business_messages:
806808
if new_deleted_business_messages is None: new_deleted_business_messages = []
807809
new_deleted_business_messages.append(update.deleted_business_messages)
808-
809-
810+
if update.purchased_paid_media:
811+
if new_purchased_paid_media is None: new_purchased_paid_media = []
812+
new_purchased_paid_media.append(update.purchased_paid_media)
813+
810814
if new_messages:
811815
self.process_new_messages(new_messages)
812816
if new_edited_messages:
@@ -851,6 +855,8 @@ def process_new_updates(self, updates: List[types.Update]):
851855
self.process_new_edited_business_message(new_edited_business_messages)
852856
if new_deleted_business_messages:
853857
self.process_new_deleted_business_messages(new_deleted_business_messages)
858+
if new_purchased_paid_media:
859+
self.process_new_purchased_paid_media(new_purchased_paid_media)
854860

855861
def process_new_messages(self, new_messages):
856862
"""
@@ -987,8 +993,11 @@ def process_new_deleted_business_messages(self, new_deleted_business_messages):
987993
"""
988994
self._notify_command_handlers(self.deleted_business_messages_handlers, new_deleted_business_messages, 'deleted_business_messages')
989995

990-
991-
996+
def process_new_purchased_paid_media(self, new_purchased_paid_media):
997+
"""
998+
:meta private:
999+
"""
1000+
self._notify_command_handlers(self.purchased_paid_media_handlers, new_purchased_paid_media, 'purchased_paid_media')
9921001

9931002
def process_middlewares(self, update):
9941003
"""
@@ -8035,6 +8044,55 @@ def register_pre_checkout_query_handler(self, callback: Callable, func: Callable
80358044
handler_dict = self._build_handler_dict(callback, func=func, pass_bot=pass_bot, **kwargs)
80368045
self.add_pre_checkout_query_handler(handler_dict)
80378046

8047+
def purchased_paid_media_handler(self, func=None, **kwargs):
8048+
"""
8049+
Handles new incoming purchased paid media.
8050+
8051+
:param func: Function executed as a filter
8052+
:type func: :obj:`function`
8053+
8054+
:param kwargs: Optional keyword arguments(custom filters)
8055+
8056+
:return: None
8057+
"""
8058+
def decorator(handler):
8059+
handler_dict = self._build_handler_dict(handler, func=func, **kwargs)
8060+
self.add_purchased_paid_media_handler(handler_dict)
8061+
return handler
8062+
8063+
return decorator
8064+
8065+
def add_purchased_paid_media_handler(self, handler_dict):
8066+
"""
8067+
Adds a purchased paid media handler
8068+
Note that you should use register_purchased_paid_media_handler to add purchased_paid_media_handler to the bot.
8069+
8070+
:meta private:
8071+
8072+
:param handler_dict:
8073+
:return:
8074+
"""
8075+
self.purchased_paid_media_handlers.append(handler_dict)
8076+
8077+
def register_purchased_paid_media_handler(self, callback: Callable, func: Callable, pass_bot: Optional[bool]=False, **kwargs):
8078+
"""
8079+
Registers purchased paid media handler.
8080+
8081+
:param callback: function to be called
8082+
:type callback: :obj:`function`
8083+
8084+
:param func: Function executed as a filter
8085+
:type func: :obj:`function`
8086+
8087+
:param pass_bot: True if you need to pass TeleBot instance to handler(useful for separating handlers into different files)
8088+
:type pass_bot: :obj:`bool`
8089+
8090+
:param kwargs: Optional keyword arguments(custom filters)
8091+
8092+
:return: None
8093+
"""
8094+
handler_dict = self._build_handler_dict(callback, func=func, pass_bot=pass_bot, **kwargs)
8095+
self.add_purchased_paid_media_handler(handler_dict)
80388096

80398097
def poll_handler(self, func, **kwargs):
80408098
"""

telebot/async_telebot.py

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -183,6 +183,7 @@ def __init__(self, token: str, parse_mode: Optional[str]=None, offset: Optional[
183183
self.business_message_handlers = []
184184
self.edited_business_message_handlers = []
185185
self.deleted_business_messages_handlers = []
186+
self.purchased_paid_media_handlers = []
186187

187188
self.custom_filters = {}
188189
self.state_handlers = []
@@ -636,6 +637,7 @@ async def process_new_updates(self, updates: List[types.Update]):
636637
new_business_messages = None
637638
new_edited_business_messages = None
638639
new_deleted_business_messages = None
640+
new_purchased_paid_media = None
639641

640642

641643
for update in updates:
@@ -706,6 +708,9 @@ async def process_new_updates(self, updates: List[types.Update]):
706708
if update.deleted_business_messages:
707709
if new_deleted_business_messages is None: new_deleted_business_messages = []
708710
new_deleted_business_messages.append(update.deleted_business_messages)
711+
if update.purchased_paid_media:
712+
if new_purchased_paid_media is None: new_purchased_paid_media = []
713+
new_purchased_paid_media.append(update.purchased_paid_media)
709714

710715

711716
if new_messages:
@@ -750,6 +755,8 @@ async def process_new_updates(self, updates: List[types.Update]):
750755
await self.process_new_edited_business_message(new_edited_business_messages)
751756
if new_deleted_business_messages:
752757
await self.process_new_deleted_business_messages(new_deleted_business_messages)
758+
if new_purchased_paid_media:
759+
await self.process_new_purchased_paid_media(new_purchased_paid_media)
753760

754761
async def process_new_messages(self, new_messages):
755762
"""
@@ -884,6 +891,12 @@ async def process_new_deleted_business_messages(self, new_deleted_business_messa
884891
"""
885892
await self._process_updates(self.deleted_business_messages_handlers, new_deleted_business_messages, 'deleted_business_messages')
886893

894+
async def process_new_purchased_paid_media(self, new_purchased_paid_media):
895+
"""
896+
:meta private:
897+
"""
898+
await self._process_updates(self.purchased_paid_media_handlers, new_purchased_paid_media, 'purchased_paid_media')
899+
887900
async def _get_middlewares(self, update_type):
888901
"""
889902
:meta private:
@@ -1867,6 +1880,56 @@ def register_pre_checkout_query_handler(self, callback: Callable[[Any], Awaitabl
18671880
handler_dict = self._build_handler_dict(callback, func=func, pass_bot=pass_bot, **kwargs)
18681881
self.add_pre_checkout_query_handler(handler_dict)
18691882

1883+
def purchased_paid_media_handler(self, func=None, **kwargs):
1884+
"""
1885+
Handles new incoming purchased paid media.
1886+
1887+
:param func: Function executed as a filter
1888+
:type func: :obj:`function`
1889+
1890+
:param kwargs: Optional keyword arguments(custom filters)
1891+
1892+
:return: None
1893+
"""
1894+
def decorator(handler):
1895+
handler_dict = self._build_handler_dict(handler, func=func, **kwargs)
1896+
self.add_purchased_paid_media_handler(handler_dict)
1897+
return handler
1898+
1899+
return decorator
1900+
1901+
def add_purchased_paid_media_handler(self, handler_dict):
1902+
"""
1903+
Adds a purchased paid media handler
1904+
Note that you should use register_purchased_paid_media_handler to add purchased_paid_media_handler to the bot.
1905+
1906+
:meta private:
1907+
1908+
:param handler_dict:
1909+
:return:
1910+
"""
1911+
self.purchased_paid_media_handlers.append(handler_dict)
1912+
1913+
def register_purchased_paid_media_handler(self, callback: Callable, func: Callable, pass_bot: Optional[bool]=False, **kwargs):
1914+
"""
1915+
Registers purchased paid media handler.
1916+
1917+
:param callback: function to be called
1918+
:type callback: :obj:`function`
1919+
1920+
:param func: Function executed as a filter
1921+
:type func: :obj:`function`
1922+
1923+
:param pass_bot: True if you need to pass TeleBot instance to handler(useful for separating handlers into different files)
1924+
:type pass_bot: :obj:`bool`
1925+
1926+
:param kwargs: Optional keyword arguments(custom filters)
1927+
1928+
:return: None
1929+
"""
1930+
handler_dict = self._build_handler_dict(callback, func=func, pass_bot=pass_bot, **kwargs)
1931+
self.add_purchased_paid_media_handler(handler_dict)
1932+
18701933
def poll_handler(self, func, **kwargs):
18711934
"""
18721935
Handles new state of a poll. Bots receive only updates about stopped polls and polls, which are sent by the bot

telebot/types.py

Lines changed: 34 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -153,6 +153,9 @@ class Update(JsonDeserializable):
153153
checkout
154154
:type pre_checkout_query: :class:`telebot.types.PreCheckoutQuery`
155155
156+
:purchased_paid_media: Optional. A user purchased paid media with a non-empty payload sent by the bot in a non-channel chat
157+
:type purchased_paid_media: :class:`telebot.types.PaidMediaPurchased`
158+
156159
:param poll: Optional. New poll state. Bots receive only updates about stopped polls and polls, which are sent by the
157160
bot
158161
:type poll: :class:`telebot.types.Poll`
@@ -222,18 +225,19 @@ def de_json(cls, json_string):
222225
business_message = Message.de_json(obj.get('business_message'))
223226
edited_business_message = Message.de_json(obj.get('edited_business_message'))
224227
deleted_business_messages = BusinessMessagesDeleted.de_json(obj.get('deleted_business_messages'))
228+
purchased_paid_media = PaidMediaPurchased.de_json(obj.get('purchased_paid_media'))
225229

226230
return cls(update_id, message, edited_message, channel_post, edited_channel_post, inline_query,
227231
chosen_inline_result, callback_query, shipping_query, pre_checkout_query, poll, poll_answer,
228232
my_chat_member, chat_member, chat_join_request, message_reaction, message_reaction_count,
229233
removed_chat_boost, chat_boost, business_connection, business_message, edited_business_message,
230-
deleted_business_messages)
234+
deleted_business_messages, purchased_paid_media)
231235

232236
def __init__(self, update_id, message, edited_message, channel_post, edited_channel_post, inline_query,
233237
chosen_inline_result, callback_query, shipping_query, pre_checkout_query, poll, poll_answer,
234238
my_chat_member, chat_member, chat_join_request, message_reaction, message_reaction_count,
235239
removed_chat_boost, chat_boost, business_connection, business_message, edited_business_message,
236-
deleted_business_messages, **kwargs):
240+
deleted_business_messages, purchased_paid_media):
237241
self.update_id: int = update_id
238242
self.message: Optional[Message] = message
239243
self.edited_message: Optional[Message] = edited_message
@@ -257,6 +261,7 @@ def __init__(self, update_id, message, edited_message, channel_post, edited_chan
257261
self.business_message: Optional[Message] = business_message
258262
self.edited_business_message: Optional[Message] = edited_business_message
259263
self.deleted_business_messages: Optional[BusinessMessagesDeleted] = deleted_business_messages
264+
self.purchased_paid_media: Optional[PaidMediaPurchased] = purchased_paid_media
260265

261266

262267

@@ -10857,3 +10862,30 @@ def de_json(cls, json_string):
1085710862
return cls(**obj)
1085810863

1085910864

10865+
class PaidMediaPurchased(JsonDeserializable):
10866+
"""
10867+
This object contains information about a paid media purchase.
10868+
10869+
Telegram documentation: https://core.telegram.org/bots/api#paidmediapurchased
10870+
10871+
:param from_user: User who purchased the media
10872+
:type from_user: :class:`User`
10873+
10874+
:param paid_media_payload: Bot-specified paid media payload
10875+
:type paid_media_payload: :obj:`str`
10876+
10877+
:return: Instance of the class
10878+
:rtype: :class:`PaidMediaPurchased`
10879+
"""
10880+
10881+
def __init__(self, from_user, paid_media_payload, **kwargs):
10882+
self.from_user: User = from_user
10883+
self.paid_media_payload: str = paid_media_payload
10884+
10885+
@classmethod
10886+
def de_json(cls, json_string):
10887+
if json_string is None: return None
10888+
obj = cls.check_json(json_string)
10889+
obj['from_user'] = User.de_json(obj['from_user'])
10890+
return cls(**obj)
10891+

0 commit comments

Comments
 (0)