diff --git a/pyrogram/types/messages_and_media/external_reply_info.py b/pyrogram/types/messages_and_media/external_reply_info.py index 1cf8b738..8e158a49 100644 --- a/pyrogram/types/messages_and_media/external_reply_info.py +++ b/pyrogram/types/messages_and_media/external_reply_info.py @@ -221,7 +221,7 @@ class ExternalReplyInfo(Object): giveaway = types.Giveaway._parse(client, reply, chats) media_type = enums.MessageMediaType.GIVEAWAY elif isinstance(media, raw.types.MessageMediaGiveawayResults): - giveaway_result = await types.GiveawayResult._parse(client, media) + giveaway_result = await types.GiveawayResult._parse(client, media, users, chats) media_type = enums.MessageMediaType.GIVEAWAY_RESULT elif isinstance(media, raw.types.MessageMediaInvoice): invoice = types.Invoice._parse(media) diff --git a/pyrogram/types/messages_and_media/giveaway_result.py b/pyrogram/types/messages_and_media/giveaway_result.py index b0e25f98..04de8bee 100644 --- a/pyrogram/types/messages_and_media/giveaway_result.py +++ b/pyrogram/types/messages_and_media/giveaway_result.py @@ -21,7 +21,7 @@ import pyrogram from datetime import datetime from pyrogram import raw, types, utils from ..object import Object -from typing import List, Union +from typing import List, Union, Dict class GiveawayResult(Object): @@ -104,7 +104,9 @@ class GiveawayResult(Object): "raw.types.MessageActionGiveawayResults", "raw.types.MessageMediaGiveawayResults" ], - hide_winners: bool = False + hide_winners: bool = False, + users: Dict[int, "raw.types.User"] = None, + chats: Dict[int, "raw.types.Chat"] = None ) -> "GiveawayResult": chat = None giveaway_message = None @@ -112,17 +114,12 @@ class GiveawayResult(Object): winners = None if not hide_winners: chat_id = utils.get_channel_id(giveaway_result.channel_id) - chat = await client.invoke( - raw.functions.channels.GetChannels( - id=[await client.resolve_peer(chat_id)] - ) - ) - chat = types.Chat._parse_chat(client, chat.chats[0]) + chat = types.Chat._parse_channel_chat(client, chats.get(giveaway_result.channel_id)) giveaway_message = await client.get_messages(chat_id, giveaway_result.launch_msg_id) expired_date = utils.timestamp_to_datetime(giveaway_result.until_date) winners = [] for winner in giveaway_result.winners: - winners.append(await client.get_users(winner)) + winners.append(types.User._parse(client, users.get(winner, None))) stars = getattr(giveaway_result, "stars", None) diff --git a/pyrogram/types/messages_and_media/message.py b/pyrogram/types/messages_and_media/message.py index 4b2862bd..32b430f4 100644 --- a/pyrogram/types/messages_and_media/message.py +++ b/pyrogram/types/messages_and_media/message.py @@ -852,7 +852,7 @@ class Message(Object, Update): giveaway_launched = types.GiveawayLaunched._parse(client, action) service_type = enums.MessageServiceType.GIVEAWAY_LAUNCHED elif isinstance(action, raw.types.MessageActionGiveawayResults): - giveaway_result = await types.GiveawayResult._parse(client, action, True) + giveaway_result = await types.GiveawayResult._parse(client, action, True, users, chats) service_type = enums.MessageServiceType.GIVEAWAY_RESULT elif isinstance(action, raw.types.MessageActionBoostApply): boosts_applied = action.boosts @@ -1042,7 +1042,7 @@ class Message(Object, Update): giveaway = await types.Giveaway._parse(client, message, chats) media_type = enums.MessageMediaType.GIVEAWAY elif isinstance(media, raw.types.MessageMediaGiveawayResults): - giveaway_result = await types.GiveawayResult._parse(client, message.media) + giveaway_result = await types.GiveawayResult._parse(client, message.media, users=users, chats=chats) media_type = enums.MessageMediaType.GIVEAWAY_RESULT elif isinstance(media, raw.types.MessageMediaStory): story = await types.MessageStory._parse(client, media)