pyrofork: Refactor Giveaway

Signed-off-by: wulan17 <wulan17@nusantararom.org>
This commit is contained in:
wulan17 2025-03-25 22:50:04 +07:00
parent 6e3a840c5a
commit a1db77fcee
No known key found for this signature in database
GPG key ID: 318CD6CD3A6AC0A5
3 changed files with 9 additions and 23 deletions

View file

@ -218,7 +218,7 @@ class ExternalReplyInfo(Object):
game = types.Game._parse(client, media) game = types.Game._parse(client, media)
media_type = enums.MessageMediaType.GAME media_type = enums.MessageMediaType.GAME
elif isinstance(media, raw.types.MessageMediaGiveaway): elif isinstance(media, raw.types.MessageMediaGiveaway):
giveaway = types.Giveaway._parse(client, reply) giveaway = types.Giveaway._parse(client, reply, chats)
media_type = enums.MessageMediaType.GIVEAWAY media_type = enums.MessageMediaType.GIVEAWAY
elif isinstance(media, raw.types.MessageMediaGiveawayResults): elif isinstance(media, raw.types.MessageMediaGiveawayResults):
giveaway_result = await types.GiveawayResult._parse(client, media) giveaway_result = await types.GiveawayResult._parse(client, media)

View file

@ -23,7 +23,7 @@ from datetime import datetime
from pyrogram import raw, types, utils from pyrogram import raw, types, utils
from pyrogram.errors import FloodWait from pyrogram.errors import FloodWait
from ..object import Object from ..object import Object
from typing import List from typing import List, Dict
class Giveaway(Object): class Giveaway(Object):
@ -73,7 +73,6 @@ class Giveaway(Object):
stars: int = None, stars: int = None,
additional_price: str = None, additional_price: str = None,
allowed_countries: List[str] = None, allowed_countries: List[str] = None,
private_channel_ids: List[int] = None,
is_winners_hidden: bool = None is_winners_hidden: bool = None
): ):
super().__init__(client) super().__init__(client)
@ -86,28 +85,16 @@ class Giveaway(Object):
self.new_subscribers = new_subscribers self.new_subscribers = new_subscribers
self.additional_price = additional_price self.additional_price = additional_price
self.allowed_countries = allowed_countries self.allowed_countries = allowed_countries
self.private_channel_ids = private_channel_ids
self.is_winners_hidden = is_winners_hidden self.is_winners_hidden = is_winners_hidden
@staticmethod @staticmethod
async def _parse(client, message: "raw.types.Message") -> "Giveaway": async def _parse(
client,
message: "raw.types.Message",
chats: Dict[int, "raw.types.Chat"] = None
) -> "Giveaway":
giveaway: "raw.types.MessageMediaGiveaway" = message.media giveaway: "raw.types.MessageMediaGiveaway" = message.media
chats = [] chats = types.List([types.Chat._parse_channel_chat(client, chats.get(i)) for i in giveaway.channels])
private_ids = []
for raw_chat_id in giveaway.channels:
chat_id = utils.get_channel_id(raw_chat_id)
try:
chat = await client.invoke(
raw.functions.channels.GetChannels(
id=[await client.resolve_peer(chat_id)]
)
)
except FloodWait as e:
await asyncio.sleep(e.value)
except Exception:
private_ids.append(chat_id)
else:
chats.append(types.Chat._parse_chat(client, chat.chats[0]))
return Giveaway( return Giveaway(
chats=chats, chats=chats,
@ -118,7 +105,6 @@ class Giveaway(Object):
new_subscribers=giveaway.only_new_subscribers, new_subscribers=giveaway.only_new_subscribers,
additional_price=giveaway.prize_description, additional_price=giveaway.prize_description,
allowed_countries=giveaway.countries_iso2 if len(giveaway.countries_iso2) > 0 else None, allowed_countries=giveaway.countries_iso2 if len(giveaway.countries_iso2) > 0 else None,
private_channel_ids=private_ids if len(private_ids) > 0 else None,
is_winners_hidden=not giveaway.winners_are_visible, is_winners_hidden=not giveaway.winners_are_visible,
client=client client=client
) )

View file

@ -1039,7 +1039,7 @@ class Message(Object, Update):
game = types.Game._parse(client, media) game = types.Game._parse(client, media)
media_type = enums.MessageMediaType.GAME media_type = enums.MessageMediaType.GAME
elif isinstance(media, raw.types.MessageMediaGiveaway): elif isinstance(media, raw.types.MessageMediaGiveaway):
giveaway = await types.Giveaway._parse(client, message) giveaway = await types.Giveaway._parse(client, message, chats)
media_type = enums.MessageMediaType.GIVEAWAY media_type = enums.MessageMediaType.GIVEAWAY
elif isinstance(media, raw.types.MessageMediaGiveawayResults): elif isinstance(media, raw.types.MessageMediaGiveawayResults):
giveaway_result = await types.GiveawayResult._parse(client, message.media) giveaway_result = await types.GiveawayResult._parse(client, message.media)