From 4e7652be7ac89fab297b9389e0920e8a3ee96446 Mon Sep 17 00:00:00 2001 From: _run Date: Tue, 1 Feb 2022 14:47:42 +0400 Subject: [PATCH 1/5] Bot API 5.7 --- telebot/__init__.py | 12 ++++++++---- telebot/apihelper.py | 8 ++++++-- telebot/async_telebot.py | 12 ++++++++---- telebot/asyncio_helper.py | 9 +++++++-- telebot/types.py | 6 ++++-- 5 files changed, 33 insertions(+), 14 deletions(-) diff --git a/telebot/__init__.py b/telebot/__init__.py index c1948a3..2bc716e 100644 --- a/telebot/__init__.py +++ b/telebot/__init__.py @@ -2409,8 +2409,9 @@ class TeleBot: def create_new_sticker_set( self, user_id: int, name: str, title: str, emojis: str, - png_sticker: Union[Any, str], - tgs_sticker: Union[Any, str], + png_sticker: Union[Any, str]=None, + tgs_sticker: Union[Any, str]=None, + webm_sticker: Union[Any, str]=None, contains_masks: Optional[bool]=None, mask_position: Optional[types.MaskPosition]=None) -> bool: """ @@ -2423,18 +2424,20 @@ class TeleBot: :param emojis: :param png_sticker: :param tgs_sticker: + :param webm_sticker: :param contains_masks: :param mask_position: :return: """ return apihelper.create_new_sticker_set( self.token, user_id, name, title, emojis, png_sticker, tgs_sticker, - contains_masks, mask_position) + contains_masks, mask_position, webm_sticker) def add_sticker_to_set( self, user_id: int, name: str, emojis: str, png_sticker: Optional[Union[Any, str]]=None, tgs_sticker: Optional[Union[Any, str]]=None, + webm_sticker: Optional[Union[Any, str]]=None, mask_position: Optional[types.MaskPosition]=None) -> bool: """ Use this method to add a new sticker to a set created by the bot. @@ -2445,11 +2448,12 @@ class TeleBot: :param emojis: :param png_sticker: Required if `tgs_sticker` is None :param tgs_sticker: Required if `png_sticker` is None + :webm_sticker: :param mask_position: :return: """ return apihelper.add_sticker_to_set( - self.token, user_id, name, emojis, png_sticker, tgs_sticker, mask_position) + self.token, user_id, name, emojis, png_sticker, tgs_sticker, mask_position, webm_sticker) def set_sticker_position_in_set(self, sticker: str, position: int) -> bool: """ diff --git a/telebot/apihelper.py b/telebot/apihelper.py index 870c609..0e76a67 100644 --- a/telebot/apihelper.py +++ b/telebot/apihelper.py @@ -1533,7 +1533,7 @@ def upload_sticker_file(token, user_id, png_sticker): def create_new_sticker_set( token, user_id, name, title, emojis, png_sticker, tgs_sticker, - contains_masks=None, mask_position=None): + contains_masks=None, mask_position=None, webm_sticker=None): method_url = 'createNewStickerSet' payload = {'user_id': user_id, 'name': name, 'title': title, 'emojis': emojis} stype = 'png_sticker' if png_sticker else 'tgs_sticker' @@ -1547,10 +1547,12 @@ def create_new_sticker_set( payload['contains_masks'] = contains_masks if mask_position: payload['mask_position'] = mask_position.to_json() + if webm_sticker: + payload['webm_sticker'] = webm_sticker return _make_request(token, method_url, params=payload, files=files, method='post') -def add_sticker_to_set(token, user_id, name, emojis, png_sticker, tgs_sticker, mask_position): +def add_sticker_to_set(token, user_id, name, emojis, png_sticker, tgs_sticker, mask_position, webm_sticker): method_url = 'addStickerToSet' payload = {'user_id': user_id, 'name': name, 'emojis': emojis} stype = 'png_sticker' if png_sticker else 'tgs_sticker' @@ -1562,6 +1564,8 @@ def add_sticker_to_set(token, user_id, name, emojis, png_sticker, tgs_sticker, m payload[stype] = sticker if mask_position: payload['mask_position'] = mask_position.to_json() + if webm_sticker: + payload['webm_sticker'] = webm_sticker return _make_request(token, method_url, params=payload, files=files, method='post') diff --git a/telebot/async_telebot.py b/telebot/async_telebot.py index 0d83c40..be9e08d 100644 --- a/telebot/async_telebot.py +++ b/telebot/async_telebot.py @@ -2996,8 +2996,9 @@ class AsyncTeleBot: async def create_new_sticker_set( self, user_id: int, name: str, title: str, emojis: str, - png_sticker: Union[Any, str], - tgs_sticker: Union[Any, str], + png_sticker: Union[Any, str]=None, + tgs_sticker: Union[Any, str]=None, + webm_sticker: Union[Any, str]=None, contains_masks: Optional[bool]=None, mask_position: Optional[types.MaskPosition]=None) -> bool: """ @@ -3010,19 +3011,21 @@ class AsyncTeleBot: :param emojis: :param png_sticker: :param tgs_sticker: + :webm_sticker: :param contains_masks: :param mask_position: :return: """ return await asyncio_helper.create_new_sticker_set( self.token, user_id, name, title, emojis, png_sticker, tgs_sticker, - contains_masks, mask_position) + contains_masks, mask_position, webm_sticker) async def add_sticker_to_set( self, user_id: int, name: str, emojis: str, png_sticker: Optional[Union[Any, str]]=None, tgs_sticker: Optional[Union[Any, str]]=None, + webm_sticker: Optional[Union[Any, str]]=None, mask_position: Optional[types.MaskPosition]=None) -> bool: """ Use this method to add a new sticker to a set created by the bot. @@ -3033,11 +3036,12 @@ class AsyncTeleBot: :param emojis: :param png_sticker: Required if `tgs_sticker` is None :param tgs_sticker: Required if `png_sticker` is None + :webm_sticker: :param mask_position: :return: """ return await asyncio_helper.add_sticker_to_set( - self.token, user_id, name, emojis, png_sticker, tgs_sticker, mask_position) + self.token, user_id, name, emojis, png_sticker, tgs_sticker, mask_position, webm_sticker) async def set_sticker_position_in_set(self, sticker: str, position: int) -> bool: diff --git a/telebot/asyncio_helper.py b/telebot/asyncio_helper.py index f21c204..a5fdb5a 100644 --- a/telebot/asyncio_helper.py +++ b/telebot/asyncio_helper.py @@ -1497,7 +1497,7 @@ async def upload_sticker_file(token, user_id, png_sticker): async def create_new_sticker_set( token, user_id, name, title, emojis, png_sticker, tgs_sticker, - contains_masks=None, mask_position=None): + contains_masks=None, mask_position=None, webm_sticker=None): method_url = 'createNewStickerSet' payload = {'user_id': user_id, 'name': name, 'title': title, 'emojis': emojis} stype = 'png_sticker' if png_sticker else 'tgs_sticker' @@ -1511,10 +1511,12 @@ async def create_new_sticker_set( payload['contains_masks'] = contains_masks if mask_position: payload['mask_position'] = mask_position.to_json() + if webm_sticker: + payload['webm_sticker'] = webm_sticker return await _process_request(token, method_url, params=payload, files=files, method='post') -async def add_sticker_to_set(token, user_id, name, emojis, png_sticker, tgs_sticker, mask_position): +async def add_sticker_to_set(token, user_id, name, emojis, png_sticker, tgs_sticker, mask_position, webm_sticker): method_url = 'addStickerToSet' payload = {'user_id': user_id, 'name': name, 'emojis': emojis} stype = 'png_sticker' if png_sticker else 'tgs_sticker' @@ -1526,6 +1528,9 @@ async def add_sticker_to_set(token, user_id, name, emojis, png_sticker, tgs_stic payload[stype] = sticker if mask_position: payload['mask_position'] = mask_position.to_json() + + if webm_sticker: + payload['webm_sticker'] = webm_sticker return await _process_request(token, method_url, params=payload, files=files, method='post') diff --git a/telebot/types.py b/telebot/types.py index a200b73..1cce817 100644 --- a/telebot/types.py +++ b/telebot/types.py @@ -2484,10 +2484,11 @@ class StickerSet(JsonDeserializable): obj['thumb'] = None return cls(**obj) - def __init__(self, name, title, is_animated, contains_masks, stickers, thumb=None, **kwargs): + def __init__(self, name, title, is_animated, is_video, contains_masks, stickers, thumb=None, **kwargs): self.name: str = name self.title: str = title self.is_animated: bool = is_animated + self.is_video: bool = is_video self.contains_masks: bool = contains_masks self.stickers: List[Sticker] = stickers self.thumb: PhotoSize = thumb @@ -2507,12 +2508,13 @@ class Sticker(JsonDeserializable): return cls(**obj) def __init__(self, file_id, file_unique_id, width, height, is_animated, - thumb=None, emoji=None, set_name=None, mask_position=None, file_size=None, **kwargs): + is_video=None, thumb=None, emoji=None, set_name=None, mask_position=None, file_size=None, **kwargs): self.file_id: str = file_id self.file_unique_id: str = file_unique_id self.width: int = width self.height: int = height self.is_animated: bool = is_animated + self.is_video: bool = is_video self.thumb: PhotoSize = thumb self.emoji: str = emoji self.set_name: str = set_name From 1e0c2ea633252c2c8acd5cc6f8a067317b848421 Mon Sep 17 00:00:00 2001 From: _run Date: Tue, 1 Feb 2022 14:50:36 +0400 Subject: [PATCH 2/5] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index cc6292b..c7a493c 100644 --- a/README.md +++ b/README.md @@ -9,7 +9,7 @@

A simple, but extensible Python implementation for the Telegram Bot API.

Supports both sync and async ways.

-##

Supporting Bot API version: 5.6! +##

Supporting Bot API version: 5.7! ## Contents From 3b38d1b46efcb86832ed14706a5513172d0a80d7 Mon Sep 17 00:00:00 2001 From: _run Date: Tue, 1 Feb 2022 14:51:36 +0400 Subject: [PATCH 3/5] Bot API 5.7 in readme --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index c7a493c..6f1a4b5 100644 --- a/README.md +++ b/README.md @@ -690,7 +690,8 @@ Result will be: ## API conformance - + +* ✔ [Bot API 5.7](https://core.telegram.org/bots/api#january-31-2022) * ✔ [Bot API 5.6](https://core.telegram.org/bots/api#december-30-2021) * ✔ [Bot API 5.5](https://core.telegram.org/bots/api#december-7-2021) * ✔ [Bot API 5.4](https://core.telegram.org/bots/api#november-5-2021) From 71be20636a5309ce4801b20be47c256fa60a9042 Mon Sep 17 00:00:00 2001 From: _run Date: Tue, 1 Feb 2022 17:43:49 +0400 Subject: [PATCH 4/5] Bot API 5.7 --- telebot/apihelper.py | 22 ++++++++++++++++------ telebot/asyncio_helper.py | 21 +++++++++++++++++---- telebot/types.py | 2 +- 3 files changed, 34 insertions(+), 11 deletions(-) diff --git a/telebot/apihelper.py b/telebot/apihelper.py index 0e76a67..67a8e7c 100644 --- a/telebot/apihelper.py +++ b/telebot/apihelper.py @@ -1536,8 +1536,14 @@ def create_new_sticker_set( contains_masks=None, mask_position=None, webm_sticker=None): method_url = 'createNewStickerSet' payload = {'user_id': user_id, 'name': name, 'title': title, 'emojis': emojis} - stype = 'png_sticker' if png_sticker else 'tgs_sticker' - sticker = png_sticker or tgs_sticker + stype = None + if png_sticker: + stype = 'png_sticker' + elif webm_sticker: + stype = 'webm_sticker' + else: + stype = 'tgs_sticker' + sticker = png_sticker or tgs_sticker or webm_sticker files = None if not util.is_string(sticker): files = {stype: sticker} @@ -1555,8 +1561,14 @@ def create_new_sticker_set( def add_sticker_to_set(token, user_id, name, emojis, png_sticker, tgs_sticker, mask_position, webm_sticker): method_url = 'addStickerToSet' payload = {'user_id': user_id, 'name': name, 'emojis': emojis} - stype = 'png_sticker' if png_sticker else 'tgs_sticker' - sticker = png_sticker or tgs_sticker + stype = None + if png_sticker: + stype = 'png_sticker' + elif webm_sticker: + stype = 'webm_sticker' + else: + stype = 'tgs_sticker' + sticker = png_sticker or tgs_sticker or webm_sticker files = None if not util.is_string(sticker): files = {stype: sticker} @@ -1564,8 +1576,6 @@ def add_sticker_to_set(token, user_id, name, emojis, png_sticker, tgs_sticker, m payload[stype] = sticker if mask_position: payload['mask_position'] = mask_position.to_json() - if webm_sticker: - payload['webm_sticker'] = webm_sticker return _make_request(token, method_url, params=payload, files=files, method='post') diff --git a/telebot/asyncio_helper.py b/telebot/asyncio_helper.py index a5fdb5a..591410c 100644 --- a/telebot/asyncio_helper.py +++ b/telebot/asyncio_helper.py @@ -1500,8 +1500,14 @@ async def create_new_sticker_set( contains_masks=None, mask_position=None, webm_sticker=None): method_url = 'createNewStickerSet' payload = {'user_id': user_id, 'name': name, 'title': title, 'emojis': emojis} - stype = 'png_sticker' if png_sticker else 'tgs_sticker' - sticker = png_sticker or tgs_sticker + stype = None + if png_sticker: + stype = 'png_sticker' + elif webm_sticker: + stype = 'webm_sticker' + else: + stype = 'tgs_sticker' + sticker = png_sticker or tgs_sticker or webm_sticker files = None if not util.is_string(sticker): files = {stype: sticker} @@ -1519,9 +1525,16 @@ async def create_new_sticker_set( async def add_sticker_to_set(token, user_id, name, emojis, png_sticker, tgs_sticker, mask_position, webm_sticker): method_url = 'addStickerToSet' payload = {'user_id': user_id, 'name': name, 'emojis': emojis} - stype = 'png_sticker' if png_sticker else 'tgs_sticker' - sticker = png_sticker or tgs_sticker + stype = None + if png_sticker: + stype = 'png_sticker' + elif webm_sticker: + stype = 'webm_sticker' + else: + stype = 'tgs_sticker' files = None + sticker = png_sticker or tgs_sticker or webm_sticker + if not util.is_string(sticker): files = {stype: sticker} else: diff --git a/telebot/types.py b/telebot/types.py index 1cce817..15cd2d1 100644 --- a/telebot/types.py +++ b/telebot/types.py @@ -2508,7 +2508,7 @@ class Sticker(JsonDeserializable): return cls(**obj) def __init__(self, file_id, file_unique_id, width, height, is_animated, - is_video=None, thumb=None, emoji=None, set_name=None, mask_position=None, file_size=None, **kwargs): + is_video, thumb=None, emoji=None, set_name=None, mask_position=None, file_size=None, **kwargs): self.file_id: str = file_id self.file_unique_id: str = file_unique_id self.width: int = width From 62fad9ca3a629e259747a6a667e4b0fcce6909c6 Mon Sep 17 00:00:00 2001 From: _run Date: Tue, 1 Feb 2022 18:16:53 +0400 Subject: [PATCH 5/5] Fix tests --- tests/test_types.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/test_types.py b/tests/test_types.py index 4a580eb..43200a8 100644 --- a/tests/test_types.py +++ b/tests/test_types.py @@ -80,7 +80,7 @@ def test_json_Message_Audio(): def test_json_Message_Sticker(): - json_string = r'{"message_id": 21552, "from": {"id": 590740002, "is_bot": false, "first_name": "⚜️ Ƥυrуα ⚜️", "username": "Purya", "language_code": "en"}, "chat": {"id": -1001309982000, "title": "123", "type": "supergroup"}, "date": 1594068909, "sticker": {"width": 368, "height": 368, "emoji": "🤖", "set_name": "ipuryapack", "is_animated": false, "thumb": {"file_id": "AAMCBAADHQJOFL7mAAJUMF8Dj62hpmDhpRAYvkc8CtIqipolAAJ8AAPA-8cF9yxjgjkLS97A0D4iXQARtQAHbQADHy4AAhoE", "file_unique_id": "AQADwNA-Il0AAx8uAAI", "file_size": 7776, "width": 60, "height": 60}, "file_id": "CAACAgQAAx0CThS-5gACVDBfA4-toaZg4aUQGL5HWerSKoqaJQACArADwPvHBfcsY4I5C3feGgQ", "file_unique_id": "AgADfAADsPvHWQ", "file_size": 14602}}' + json_string = r'{"message_id": 21552, "from": {"id": 590740002, "is_bot": false, "first_name": "⚜️ Ƥυrуα ⚜️", "username": "Purya", "language_code": "en"}, "chat": {"id": -1001309982000, "title": "123", "type": "supergroup"}, "date": 1594068909, "sticker": {"width": 368, "height": 368, "emoji": "🤖", "set_name": "ipuryapack", "is_animated": false, "is_video": true, "thumb": {"file_id": "AAMCBAADHQJOFL7mAAJUMF8Dj62hpmDhpRAYvkc8CtIqipolAAJ8AAPA-8cF9yxjgjkLS97A0D4iXQARtQAHbQADHy4AAhoE", "file_unique_id": "AQADwNA-Il0AAx8uAAI", "file_size": 7776, "width": 60, "height": 60}, "file_id": "CAACAgQAAx0CThS-5gACVDBfA4-toaZg4aUQGL5HWerSKoqaJQACArADwPvHBfcsY4I5C3feGgQ", "file_unique_id": "AgADfAADsPvHWQ", "file_size": 14602}}' msg = types.Message.de_json(json_string) assert msg.sticker.height == 368 assert msg.sticker.thumb.height == 60 @@ -88,7 +88,7 @@ def test_json_Message_Sticker(): def test_json_Message_Sticker_without_thumb(): - json_string = r'{"message_id": 21552, "from": {"id": 590740002, "is_bot": false, "first_name": "⚜️ Ƥυrуα ⚜️", "username": "Purya", "language_code": "en"}, "chat": {"id": -1001309982000, "title": "123", "type": "supergroup"}, "date": 1594068909, "sticker": {"width": 368, "height": 368, "emoji": "🤖", "set_name": "ipuryapack", "is_animated": false, "file_id": "CAACAgQAAx0CThS-5gACVDBfA4-toaZg4aUQGL5HWerSKoqaJQACArADwPvHBfcsY4I5C3feGgQ", "file_unique_id": "AgADfAADsPvHWQ", "file_size": 14602}}' + json_string = r'{"message_id": 21552, "from": {"id": 590740002, "is_bot": false, "first_name": "⚜️ Ƥυrуα ⚜️", "username": "Purya", "language_code": "en"}, "chat": {"id": -1001309982000, "title": "123", "type": "supergroup"}, "date": 1594068909, "sticker": {"width": 368, "height": 368, "emoji": "🤖", "set_name": "ipuryapack", "is_animated": false, "is_video": true, "file_id": "CAACAgQAAx0CThS-5gACVDBfA4-toaZg4aUQGL5HWerSKoqaJQACArADwPvHBfcsY4I5C3feGgQ", "file_unique_id": "AgADfAADsPvHWQ", "file_size": 14602}}' msg = types.Message.de_json(json_string) assert msg.sticker.height == 368 assert msg.sticker.thumb is None