From 95eba2ce7729215ca90b1869d93ed44dd7f2dc2a Mon Sep 17 00:00:00 2001 From: wulan17 Date: Mon, 7 Oct 2024 17:25:15 +0700 Subject: [PATCH] pyrofork: Add get_message_read_participants method Signed-off-by: wulan17 --- compiler/docs/compiler.py | 2 + pyrogram/methods/messages/__init__.py | 2 + .../messages/get_message_read_participants.py | 57 +++++++++++++++++++ pyrogram/types/messages_and_media/__init__.py | 2 + .../messages_and_media/read_participant.py | 56 ++++++++++++++++++ 5 files changed, 119 insertions(+) create mode 100644 pyrogram/methods/messages/get_message_read_participants.py create mode 100644 pyrogram/types/messages_and_media/read_participant.py diff --git a/compiler/docs/compiler.py b/compiler/docs/compiler.py index 709a094b..4909b3ee 100644 --- a/compiler/docs/compiler.py +++ b/compiler/docs/compiler.py @@ -197,6 +197,7 @@ def pyrogram_api(): delete_scheduled_messages get_available_effects get_messages + get_message_read_participants get_scheduled_messages get_media_group get_chat_history @@ -537,6 +538,7 @@ def pyrogram_api(): ChatWallpaper ContactRegistered GiftCode + ReadParticipant ScreenshotTaken Wallpaper WallpaperSettings diff --git a/pyrogram/methods/messages/__init__.py b/pyrogram/methods/messages/__init__.py index b4303b7b..ff616c00 100644 --- a/pyrogram/methods/messages/__init__.py +++ b/pyrogram/methods/messages/__init__.py @@ -40,6 +40,7 @@ from .get_discussion_replies import GetDiscussionReplies from .get_discussion_replies_count import GetDiscussionRepliesCount from .get_media_group import GetMediaGroup from .get_messages import GetMessages +from .get_message_read_participants import GetMessageReadParticipants from .get_scheduled_messages import GetScheduledMessages from .read_chat_history import ReadChatHistory from .retract_vote import RetractVote @@ -85,6 +86,7 @@ class Messages( GetAvailableEffects, GetMediaGroup, GetMessages, + GetMessageReadParticipants, GetScheduledMessages, SendAudio, SendChatAction, diff --git a/pyrogram/methods/messages/get_message_read_participants.py b/pyrogram/methods/messages/get_message_read_participants.py new file mode 100644 index 00000000..430cb1f4 --- /dev/null +++ b/pyrogram/methods/messages/get_message_read_participants.py @@ -0,0 +1,57 @@ +# 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 pyrogram + +from pyrogram import types +from typing import Union + +class GetMessageReadParticipants: + async def get_message_read_participants( + self: "pyrogram.Client", + chat_id: Union[int, str], + message_id: int + ): + """Get the list of users who have read a message. + + .. include:: /_includes/usable-by/users.rst + + Parameters: + chat_id (``int`` | ``str``): + Unique identifier (int) or username (str) of the target chat. + You can also use chat public link in form of *t.me/* (str). + + message_id (``int``): + Unique identifier of the target message. + + Returns: + ``AsyncGenerator``: On success, an async generator yielding :obj:`~pyrogram.types.ReadParticipant` objects is returned. + """ + + peer = await self.resolve_peer(chat_id) + r = await self.invoke( + pyrogram.raw.functions.messages.GetMessageReadParticipants( + peer=peer, + msg_id=message_id + ) + ) + for read_participant in r: + yield await types.ReadParticipant._parse( + client=self, + read_participant=read_participant + ) diff --git a/pyrogram/types/messages_and_media/__init__.py b/pyrogram/types/messages_and_media/__init__.py index 79558d90..fb738c99 100644 --- a/pyrogram/types/messages_and_media/__init__.py +++ b/pyrogram/types/messages_and_media/__init__.py @@ -43,6 +43,7 @@ from .photo import Photo from .poll import Poll from .poll_option import PollOption from .reaction import Reaction +from .read_participant import ReadParticipant from .screenshot_taken import ScreenshotTaken from .sticker import Sticker from .stickerset import StickerSet @@ -116,6 +117,7 @@ __all__ = [ "MessageReactionCountUpdated", "MessageReactor", "MessageStory", + "ReadParticipant", "ScreenshotTaken", "Story", "StoryDeleted", diff --git a/pyrogram/types/messages_and_media/read_participant.py b/pyrogram/types/messages_and_media/read_participant.py new file mode 100644 index 00000000..4b772396 --- /dev/null +++ b/pyrogram/types/messages_and_media/read_participant.py @@ -0,0 +1,56 @@ +# 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 pyrogram +from pyrogram import raw, types, utils +from datetime import datetime +from ..object import Object + +class ReadParticipant(Object): + """Contains information about a read participant. + + Parameters: + user (:obj:`~pyrogram.types.User`): + User who read the message. + + date (:py:obj:`~datetime.datetime`): + Date the message was read. + """ + + def __init__( + self, + *, + client: "pyrogram.Client" = None, + user_id: "pyrogram.types.User", + date: "datetime" + ): + super().__init__(client) + + self.user = user_id + self.date = date + + @staticmethod + async def _parse( + client, + read_participant: "raw.base.ReadParticipantDate" + ) -> "ReadParticipant": + return ReadParticipant( + client=client, + user_id=await client.get_users(read_participant.user_id), + date=utils.timestamp_to_datetime(read_participant.date) + )