pyrofork: Add get_message_read_participants method

Signed-off-by: wulan17 <wulan17@nusantararom.org>
This commit is contained in:
wulan17 2024-10-07 17:25:15 +07:00
parent a6b69228e8
commit 95eba2ce77
No known key found for this signature in database
GPG key ID: 318CD6CD3A6AC0A5
5 changed files with 119 additions and 0 deletions

View file

@ -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

View file

@ -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,

View file

@ -0,0 +1,57 @@
# Pyrofork - Telegram MTProto API Client Library for Python
# Copyright (C) 2022-present Mayuri-Chan <https://github.com/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 <http://www.gnu.org/licenses/>.
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/<username>* (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
)

View file

@ -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",

View file

@ -0,0 +1,56 @@
# PyroFork - Telegram MTProto API Client Library for Python
# Copyright (C) 2022-present Mayuri-Chan <https://github.com/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 <http://www.gnu.org/licenses/>.
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)
)