Skip to content

Commit

Permalink
pyrofork: Add recent_voters field to Poll
Browse files Browse the repository at this point in the history
Signed-off-by: wulan17 <wulan17@nusantararom.org>
  • Loading branch information
wulan17 committed Jul 23, 2024
1 parent 08442de commit d289675
Show file tree
Hide file tree
Showing 6 changed files with 30 additions and 9 deletions.
2 changes: 1 addition & 1 deletion pyrogram/dispatcher.py
Original file line number Diff line number Diff line change
Expand Up @@ -171,7 +171,7 @@ async def inline_query_parser(update, users, chats):

async def poll_parser(update, users, chats):
return (
pyrogram.types.Poll._parse_update(self.client, update),
await pyrogram.types.Poll._parse_update(self.client, update, users),
PollHandler
)

Expand Down
2 changes: 1 addition & 1 deletion pyrogram/methods/messages/retract_vote.py
Original file line number Diff line number Diff line change
Expand Up @@ -60,4 +60,4 @@ async def retract_vote(
)
)

return types.Poll._parse(self, r.updates[0])
return await types.Poll._parse(self, r.updates[0], r.users)
2 changes: 1 addition & 1 deletion pyrogram/methods/messages/stop_poll.py
Original file line number Diff line number Diff line change
Expand Up @@ -87,4 +87,4 @@ async def stop_poll(
else:
r = await self.invoke(rpc)

return types.Poll._parse(self, r.updates[0])
return await types.Poll._parse(self, r.updates[0], r.users)
2 changes: 1 addition & 1 deletion pyrogram/methods/messages/vote_poll.py
Original file line number Diff line number Diff line change
Expand Up @@ -68,4 +68,4 @@ async def vote_poll(
)
)

return types.Poll._parse(self, r.updates[0])
return await types.Poll._parse(self, r.updates[0], r.users)
2 changes: 1 addition & 1 deletion pyrogram/types/messages_and_media/message.py
Original file line number Diff line number Diff line change
Expand Up @@ -1086,7 +1086,7 @@ async def _parse(
else:
media = None
elif isinstance(media, raw.types.MessageMediaPoll):
poll = types.Poll._parse(client, media)
poll = await types.Poll._parse(client, media)
media_type = enums.MessageMediaType.POLL
elif isinstance(media, raw.types.MessageMediaDice):
dice = types.Dice._parse(client, media)
Expand Down
29 changes: 25 additions & 4 deletions pyrogram/types/messages_and_media/poll.py
Original file line number Diff line number Diff line change
Expand Up @@ -78,6 +78,9 @@ class Poll(Object, Update):
close_date (:py:obj:`~datetime.datetime`, *optional*):
Point in time when the poll will be automatically closed.
recent_voters (List of :obj:`~pyrogram.types.User`, *optional*):
List of user whos recently vote.
"""

def __init__(
Expand All @@ -98,7 +101,8 @@ def __init__(
explanation: Optional[str] = None,
explanation_entities: Optional[List["types.MessageEntity"]] = None,
open_period: Optional[int] = None,
close_date: Optional[datetime] = None
close_date: Optional[datetime] = None,
recent_voters: List["types.User"] = None
):
super().__init__(client)

Expand All @@ -117,9 +121,14 @@ def __init__(
self.explanation_entities = explanation_entities
self.open_period = open_period
self.close_date = close_date
self.recent_voters = recent_voters

@staticmethod
def _parse(client, media_poll: Union["raw.types.MessageMediaPoll", "raw.types.UpdateMessagePoll"]) -> "Poll":
async def _parse(
client,
media_poll: Union["raw.types.MessageMediaPoll", "raw.types.UpdateMessagePoll"],
users: List["raw.base.User"]
) -> "Poll":
poll: raw.types.Poll = media_poll.poll
poll_results: raw.types.PollResults = media_poll.results
results: List[raw.types.PollAnswerVoters] = poll_results.results
Expand Down Expand Up @@ -176,13 +185,21 @@ def _parse(client, media_poll: Union["raw.types.MessageMediaPoll", "raw.types.Up
] if poll_results.solution_entities else None,
open_period=poll.close_period,
close_date=utils.timestamp_to_datetime(poll.close_date),
recent_voters=[
await client.get_users(user.user_id)
for user in poll_results.recent_voters
] if poll_results.recent_voters else None,
client=client
)

@staticmethod
def _parse_update(client, update: "raw.types.UpdateMessagePoll"):
async def _parse_update(
client,
update: "raw.types.UpdateMessagePoll",
users: List["raw.base.User"]
) -> "Poll":
if update.poll is not None:
return Poll._parse(client, update)
return await Poll._parse(client, update, users)

results = update.results.results
chosen_option_id = None
Expand Down Expand Up @@ -213,6 +230,10 @@ def _parse_update(client, update: "raw.types.UpdateMessagePoll"):
is_closed=False,
chosen_option_id=chosen_option_id,
correct_option_id=correct_option_id,
recent_voters=[
types.User._parse(client, users.get(user.user_id, None))
for user in update.results.recent_voters
] if update.results.recent_voters else None,
client=client
)

Expand Down

0 comments on commit d289675

Please sign in to comment.