From d5c6e57627d3b68f895d9ad8cd50ca1505123c56 Mon Sep 17 00:00:00 2001 From: wulan17 Date: Sat, 2 Sep 2023 17:49:39 +0700 Subject: [PATCH] Pyrofork: Add get_user_stories method Signed-off-by: wulan17 --- compiler/docs/compiler.py | 1 + pyrogram/methods/users/__init__.py | 2 + pyrogram/methods/users/get_user_stories.py | 65 ++++++++++++++++++++++ 3 files changed, 68 insertions(+) create mode 100644 pyrogram/methods/users/get_user_stories.py diff --git a/compiler/docs/compiler.py b/compiler/docs/compiler.py index 78e6f2b6..01c5d584 100644 --- a/compiler/docs/compiler.py +++ b/compiler/docs/compiler.py @@ -274,6 +274,7 @@ def pyrogram_api(): edit_story export_story_link get_stories + get_user_stories send_story """, stickers=""" diff --git a/pyrogram/methods/users/__init__.py b/pyrogram/methods/users/__init__.py index 53fdd781..2f7551e4 100644 --- a/pyrogram/methods/users/__init__.py +++ b/pyrogram/methods/users/__init__.py @@ -27,6 +27,7 @@ from .get_common_chats import GetCommonChats from .get_default_emoji_statuses import GetDefaultEmojiStatuses from .get_me import GetMe from .get_stories import GetStories +from .get_user_stories import GetUserStories from .get_users import GetUsers from .send_story import SendStory from .set_emoji_status import SetEmojiStatus @@ -48,6 +49,7 @@ class Users( GetUsers, GetMe, GetStories, + GetUserStories, SetUsername, GetChatPhotosCount, UnblockUser, diff --git a/pyrogram/methods/users/get_user_stories.py b/pyrogram/methods/users/get_user_stories.py new file mode 100644 index 00000000..bee290af --- /dev/null +++ b/pyrogram/methods/users/get_user_stories.py @@ -0,0 +1,65 @@ +# Pyrofork - Telegram MTProto API Client Library for Python +# Copyright (C) 2022-present Mayuri-Chan +# +# This file is part of Pyrofork. +# +# Pyrofork is free software: you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License as published +# by the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# Pyrofork is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with Pyrofork. If not, see . + +import logging +from typing import AsyncGenerator, Union, Optional + +import pyrogram +from pyrogram import raw +from pyrogram import types + +log = logging.getLogger(__name__) + +class GetUserStories: + async def get_user_stories( + self: "pyrogram.Client", + user_id: Union[int, str] + ) -> Optional[AsyncGenerator["types.Story", None]]: + """Get all active stories from an user by using user identifiers. + + .. include:: /_includes/usable-by/users.rst + + Parameters: + user_id (``int`` | ``str``): + Unique identifier (int) or username (str) of the target user. + For your personal story you can simply use "me" or "self". + For a contact that exists in your Telegram address book you can use his phone number (str). + + Returns: + ``Generator``: On success, a generator yielding :obj:`~pyrogram.types.Story` objects is returned. + + Example: + .. code-block:: python + + # Get all active story from spesific user + async for story in app.get_user_stories(user_id): + print(story) + + Raises: + ValueError: In case of invalid arguments. + """ + + peer = await self.resolve_peer(user_id) + + + rpc = raw.functions.stories.GetUserStories(user_id=peer) + + r = await self.invoke(rpc, sleep_threshold=-1) + + for story in r.stories.stories: + yield await types.Story._parse(self, story, user_id)