diff --git a/pyrogram/methods/messages/get_custom_emoji_stickers.py b/pyrogram/methods/messages/get_custom_emoji_stickers.py index de5d8d4a..f781bf6e 100644 --- a/pyrogram/methods/messages/get_custom_emoji_stickers.py +++ b/pyrogram/methods/messages/get_custom_emoji_stickers.py @@ -47,14 +47,7 @@ class GetCustomEmojiStickers: stickers = [] for item in result: attributes = {type(i): i for i in item.attributes} - - sticker = await types.Sticker._parse( - self, item, - attributes[raw.types.DocumentAttributeImageSize], - attributes[raw.types.DocumentAttributeCustomEmoji], - attributes[raw.types.DocumentAttributeFilename].file_name - ) - + sticker = await types.Sticker._parse(self, item, attributes) stickers.append(sticker) return pyrogram.types.List(stickers) diff --git a/pyrogram/types/messages_and_media/message.py b/pyrogram/types/messages_and_media/message.py index 56e4d7fe..146e37c4 100644 --- a/pyrogram/types/messages_and_media/message.py +++ b/pyrogram/types/messages_and_media/message.py @@ -696,12 +696,7 @@ class Message(Object, Update): animation = types.Animation._parse(client, doc, video_attributes, file_name) media_type = enums.MessageMediaType.ANIMATION elif raw.types.DocumentAttributeSticker in attributes: - sticker = await types.Sticker._parse( - client, doc, - attributes.get(raw.types.DocumentAttributeImageSize, None), - attributes[raw.types.DocumentAttributeSticker], - file_name - ) + sticker = await types.Sticker._parse(client, doc, attributes) media_type = enums.MessageMediaType.STICKER elif raw.types.DocumentAttributeVideo in attributes: video_attributes = attributes[raw.types.DocumentAttributeVideo] diff --git a/pyrogram/types/messages_and_media/sticker.py b/pyrogram/types/messages_and_media/sticker.py index 201b579f..56ddf2af 100644 --- a/pyrogram/types/messages_and_media/sticker.py +++ b/pyrogram/types/messages_and_media/sticker.py @@ -17,7 +17,7 @@ # along with Pyrogram. If not, see . from datetime import datetime -from typing import List +from typing import List, Dict, Type import pyrogram from pyrogram import raw, utils @@ -146,10 +146,16 @@ class Sticker(Object): async def _parse( client, sticker: "raw.types.Document", - image_size_attributes: "raw.types.DocumentAttributeImageSize", - sticker_attributes: "raw.types.DocumentAttributeSticker", - file_name: str + document_attributes: Dict[Type["raw.base.DocumentAttribute"], "raw.base.DocumentAttribute"], ) -> "Sticker": + sticker_attributes = document_attributes.get( + raw.types.DocumentAttributeSticker, + document_attributes[raw.types.DocumentAttributeCustomEmoji] + ) + image_size_attributes = document_attributes.get(raw.types.DocumentAttributeImageSize, None) + file_name = getattr(document_attributes.get(raw.types.DocumentAttributeFilename, None), "file_name", None) + video_attributes = document_attributes.get(raw.types.DocumentAttributeVideo, None) + sticker_set = sticker_attributes.stickerset if isinstance(sticker_set, raw.types.InputStickerSetID): @@ -170,8 +176,20 @@ class Sticker(Object): file_unique_type=FileUniqueType.DOCUMENT, media_id=sticker.id ).encode(), - width=image_size_attributes.w if image_size_attributes else 512, - height=image_size_attributes.h if image_size_attributes else 512, + width=( + image_size_attributes.w + if image_size_attributes + else video_attributes.w + if video_attributes + else 512 + ), + height=( + image_size_attributes.h + if image_size_attributes + else video_attributes.h + if video_attributes + else 512 + ), is_animated=sticker.mime_type == "application/x-tgsticker", is_video=sticker.mime_type == "video/webm", # TODO: mask_position