2
0
mirror of https://github.com/pyrogram/pyrogram synced 2025-08-28 21:07:59 +00:00

Merge branch 'sticker-attributes'

This commit is contained in:
Dan 2022-08-14 11:30:28 +02:00
commit e94d3c1876
3 changed files with 26 additions and 20 deletions

View File

@ -47,14 +47,7 @@ class GetCustomEmojiStickers:
stickers = [] stickers = []
for item in result: for item in result:
attributes = {type(i): i for i in item.attributes} attributes = {type(i): i for i in item.attributes}
sticker = await types.Sticker._parse(self, item, attributes)
sticker = await types.Sticker._parse(
self, item,
attributes[raw.types.DocumentAttributeImageSize],
attributes[raw.types.DocumentAttributeCustomEmoji],
attributes[raw.types.DocumentAttributeFilename].file_name
)
stickers.append(sticker) stickers.append(sticker)
return pyrogram.types.List(stickers) return pyrogram.types.List(stickers)

View File

@ -696,12 +696,7 @@ class Message(Object, Update):
animation = types.Animation._parse(client, doc, video_attributes, file_name) animation = types.Animation._parse(client, doc, video_attributes, file_name)
media_type = enums.MessageMediaType.ANIMATION media_type = enums.MessageMediaType.ANIMATION
elif raw.types.DocumentAttributeSticker in attributes: elif raw.types.DocumentAttributeSticker in attributes:
sticker = await types.Sticker._parse( sticker = await types.Sticker._parse(client, doc, attributes)
client, doc,
attributes.get(raw.types.DocumentAttributeImageSize, None),
attributes[raw.types.DocumentAttributeSticker],
file_name
)
media_type = enums.MessageMediaType.STICKER media_type = enums.MessageMediaType.STICKER
elif raw.types.DocumentAttributeVideo in attributes: elif raw.types.DocumentAttributeVideo in attributes:
video_attributes = attributes[raw.types.DocumentAttributeVideo] video_attributes = attributes[raw.types.DocumentAttributeVideo]

View File

@ -17,7 +17,7 @@
# along with Pyrogram. If not, see <http://www.gnu.org/licenses/>. # along with Pyrogram. If not, see <http://www.gnu.org/licenses/>.
from datetime import datetime from datetime import datetime
from typing import List from typing import List, Dict, Type
import pyrogram import pyrogram
from pyrogram import raw, utils from pyrogram import raw, utils
@ -146,10 +146,16 @@ class Sticker(Object):
async def _parse( async def _parse(
client, client,
sticker: "raw.types.Document", sticker: "raw.types.Document",
image_size_attributes: "raw.types.DocumentAttributeImageSize", document_attributes: Dict[Type["raw.base.DocumentAttribute"], "raw.base.DocumentAttribute"],
sticker_attributes: "raw.types.DocumentAttributeSticker",
file_name: str
) -> "Sticker": ) -> "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 sticker_set = sticker_attributes.stickerset
if isinstance(sticker_set, raw.types.InputStickerSetID): if isinstance(sticker_set, raw.types.InputStickerSetID):
@ -170,8 +176,20 @@ class Sticker(Object):
file_unique_type=FileUniqueType.DOCUMENT, file_unique_type=FileUniqueType.DOCUMENT,
media_id=sticker.id media_id=sticker.id
).encode(), ).encode(),
width=image_size_attributes.w if image_size_attributes else 512, width=(
height=image_size_attributes.h if image_size_attributes else 512, 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_animated=sticker.mime_type == "application/x-tgsticker",
is_video=sticker.mime_type == "video/webm", is_video=sticker.mime_type == "video/webm",
# TODO: mask_position # TODO: mask_position