From dcdf65ebf3068b406fc92dac1cb3205d2594eb9a Mon Sep 17 00:00:00 2001 From: KurimuzonAkuma Date: Thu, 9 Nov 2023 11:39:24 +0300 Subject: [PATCH] Request GetChannels as required --- pyrogram/methods/stories/get_pinned_stories.py | 17 ++++++++++++++--- pyrogram/types/messages_and_media/story.py | 5 +++-- 2 files changed, 17 insertions(+), 5 deletions(-) diff --git a/pyrogram/methods/stories/get_pinned_stories.py b/pyrogram/methods/stories/get_pinned_stories.py index ff428cea..9d2fdfee 100644 --- a/pyrogram/methods/stories/get_pinned_stories.py +++ b/pyrogram/methods/stories/get_pinned_stories.py @@ -21,6 +21,7 @@ from typing import AsyncGenerator, Union, Optional import pyrogram from pyrogram import raw from pyrogram import types +from pyrogram import utils class GetPinnedStories: @@ -60,8 +61,9 @@ class GetPinnedStories: total = abs(limit) or (1 << 31) limit = min(100, total) + peer = await self.resolve_peer(chat_id) + while True: - peer = await self.resolve_peer(chat_id) r = await self.invoke( raw.functions.stories.GetPinnedStories( peer=peer, @@ -73,6 +75,15 @@ class GetPinnedStories: if not r.stories: return + users = {i.id: i for i in r.users} + chats = {i.id: i for i in r.chats} + + if isinstance(peer, raw.types.InputPeerChannel): + peer_id = utils.get_input_peer_id(peer) + if peer_id not in r.chats: + channel = await self.invoke(raw.functions.channels.GetChannels(id=[peer])) + chats.update({peer_id: channel.chats[0]}) + last = r.stories[-1] offset_id = last.id @@ -80,8 +91,8 @@ class GetPinnedStories: yield await types.Story._parse( self, story, - {i.id: i for i in r.users}, - {i.id: i for i in r.chats}, + users, + chats, peer ) diff --git a/pyrogram/types/messages_and_media/story.py b/pyrogram/types/messages_and_media/story.py index 6f5b5cf0..e3c0fd59 100644 --- a/pyrogram/types/messages_and_media/story.py +++ b/pyrogram/types/messages_and_media/story.py @@ -196,8 +196,9 @@ class Story(Object, Update): peer_id = utils.get_input_peer_id(peer) elif isinstance(peer, raw.types.InputPeerChannel): peer_id = utils.get_input_peer_id(peer) - r = await client.invoke(raw.functions.channels.GetChannels(id=[peer])) - chats.update({peer_id: r.chats[0]}) + if peer_id not in chats: + r = await client.invoke(raw.functions.channels.GetChannels(id=[peer])) + chats.update({peer_id: r.chats[0]}) else: peer_id = utils.get_raw_peer_id(peer)