diff --git a/pyrogram/types/messages_and_media/story.py b/pyrogram/types/messages_and_media/story.py index 5aa3171972..bb640d7b7d 100644 --- a/pyrogram/types/messages_and_media/story.py +++ b/pyrogram/types/messages_and_media/story.py @@ -133,9 +133,11 @@ def __init__( @staticmethod def _parse_story_item( - client, - story_item: "raw.types.StoryItem" - ): + client: "pyrogram.Client", + story_item: "raw.types.StoryItem", + chat: "types.Chat" = None, + story_id: int = None + ) -> "Story": date = None expire_date = None media = None @@ -152,7 +154,9 @@ def _parse_story_item( skipped = None deleted = None - if isinstance(story_item, raw.types.StoryItemDeleted): + if story_item is None: + pass + elif isinstance(story_item, raw.types.StoryItemDeleted): deleted = True elif isinstance(story_item, raw.types.StoryItemSkipped): skipped = True @@ -181,22 +185,27 @@ def _parse_story_item( types.Reaction._parse_count(client, reaction) for reaction in getattr(story_item.views, "reactions", []) ] or None - return ( - date, - expire_date, - media, - has_protected_content, - photo, - video, - edited, - pinned, - caption, - caption_entities, - views, - forwards, - reactions, - skipped, - deleted + + return Story( + client=client, + _raw=story_item, + id=story_id or getattr(story_item, "id", None), + chat=chat, + date=date, + expire_date=expire_date, + media=media, + has_protected_content=has_protected_content, + photo=photo, + video=video, + edited=edited, + pinned=pinned, + caption=caption, + caption_entities=caption_entities, + views=views, + forwards=forwards, + reactions=reactions, + skipped=skipped, + deleted=deleted ) @staticmethod @@ -211,26 +220,9 @@ async def _parse( story_id = None chat = None - rawupdate = None - - date = None - expire_date = None - media = None - has_protected_content = None - photo = None - video = None - edited = None - pinned = None - caption = None - caption_entities = None - views = None - forwards = None - reactions = None - skipped = None - deleted = None + story_item = None if story_media: - rawupdate = story_media if story_media.peer: raw_peer_id = utils.get_raw_peer_id(story_media.peer) @@ -239,9 +231,10 @@ async def _parse( else: chat = types.Chat._parse_chat(client, chats.get(raw_peer_id)) story_id = getattr(story_media, "id", None) - + + story_item = getattr(story_media, "story", None) + if reply_story: - rawupdate = reply_story if reply_story.peer: raw_peer_id = utils.get_raw_peer_id(reply_story.peer) @@ -250,7 +243,7 @@ async def _parse( else: chat = types.Chat._parse_chat(client, chats.get(raw_peer_id)) story_id = getattr(reply_story, "story_id", None) - + if story_id and not client.me.is_bot: try: story_item = ( @@ -261,29 +254,11 @@ async def _parse( ) ) ).stories[0] + except (RPCError, IndexError): pass - else: - ( - date, - expire_date, - media, - has_protected_content, - photo, - video, - edited, - pinned, - caption, - caption_entities, - views, - forwards, - reactions, - skipped, - deleted - ) = Story._parse_story_item(client, story_item) - + if story_update: - rawupdate = story_update raw_peer_id = utils.get_raw_peer_id(story_update.peer) if isinstance(story_update.peer, raw.types.PeerUser): @@ -292,44 +267,14 @@ async def _parse( chat = types.Chat._parse_chat(client, chats.get(raw_peer_id)) story_id = getattr(story_update.story, "id", None) - ( - date, - expire_date, - media, - has_protected_content, - photo, - video, - edited, - pinned, - caption, - caption_entities, - views, - forwards, - reactions, - skipped, - deleted - ) = Story._parse_story_item(client, story_update.story) - return Story( + story_item = getattr(story_update.story, "story", None) + + return Story._parse_story_item( client=client, - _raw=rawupdate, - id=story_id, + story_item=story_item, chat=chat, - date=date, - expire_date=expire_date, - media=media, - has_protected_content=has_protected_content, - photo=photo, - video=video, - edited=edited, - pinned=pinned, - caption=caption, - caption_entities=caption_entities, - views=views, - forwards=forwards, - reactions=reactions, - skipped=skipped, - deleted=deleted + story_id=story_id ) async def react(