mirror of
https://github.com/Mayuri-Chan/pyrofork.git
synced 2025-12-29 20:14:51 +00:00
Pyrofork: Add GiveawayResult MessageService type
Signed-off-by: wulan17 <wulan17@nusantararom.org>
This commit is contained in:
parent
992835b5a8
commit
16390c3eff
3 changed files with 58 additions and 33 deletions
|
|
@ -99,3 +99,6 @@ class MessageServiceType(AutoName):
|
|||
|
||||
WEB_APP_DATA = auto()
|
||||
"Web app data"
|
||||
|
||||
GIVEAWAY_RESULT = auto()
|
||||
"Giveaway Result"
|
||||
|
|
|
|||
|
|
@ -21,17 +21,17 @@ import pyrogram
|
|||
from datetime import datetime
|
||||
from pyrogram import raw, types, utils
|
||||
from ..object import Object
|
||||
from typing import List
|
||||
from typing import List, Union
|
||||
|
||||
|
||||
class GiveawayResult(Object):
|
||||
"""A giveaway result.
|
||||
|
||||
Parameters:
|
||||
chat (:obj:`~pyrogram.types.Chat`):
|
||||
chat (:obj:`~pyrogram.types.Chat`, *optional*):
|
||||
Channel which host the giveaway.
|
||||
|
||||
giveaway_message (:obj:`~pyrogram.types.Message`):
|
||||
giveaway_message (:obj:`~pyrogram.types.Message`, *optional*):
|
||||
The original giveaway message.
|
||||
|
||||
quantity (``int``):
|
||||
|
|
@ -40,13 +40,13 @@ class GiveawayResult(Object):
|
|||
unclaimed_quantity (``int``):
|
||||
Quantity of unclaimed giveaway prize.
|
||||
|
||||
winners (List of :obj:`~pyrogram.types.User`):
|
||||
winners (List of :obj:`~pyrogram.types.User`, *optional*):
|
||||
The giveaway winners.
|
||||
|
||||
months (``int``):
|
||||
months (``int``, *optional*):
|
||||
How long the telegram premium last (in month).
|
||||
|
||||
expire_date (:py:obj:`~datetime.datetime`):
|
||||
expire_date (:py:obj:`~datetime.datetime`, *optional*):
|
||||
Date the giveaway winner(s) choosen.
|
||||
|
||||
new_subscribers (``bool``, *optional*):
|
||||
|
|
@ -54,21 +54,25 @@ class GiveawayResult(Object):
|
|||
|
||||
is_refunded (``bool``, *optional*):
|
||||
True, if the giveaway was refunded.
|
||||
|
||||
is_winners_hidden (``bool``):
|
||||
True, if the giveaway winners are hidden.
|
||||
"""
|
||||
|
||||
def __init__(
|
||||
self,
|
||||
*,
|
||||
client: "pyrogram.Client" = None,
|
||||
chat: "types.Chat",
|
||||
giveaway_message: "types.Message",
|
||||
chat: "types.Chat" = None,
|
||||
giveaway_message: "types.Message" = None,
|
||||
quantity: int,
|
||||
unclaimed_quantity: int,
|
||||
winners: List["types.User"],
|
||||
months: int,
|
||||
expire_date: datetime,
|
||||
new_subscribers : bool,
|
||||
is_refunded: bool = None
|
||||
winners: List["types.User"] = None,
|
||||
months: int = None,
|
||||
expire_date: datetime = None,
|
||||
new_subscribers : bool = None,
|
||||
is_refunded: bool = None,
|
||||
is_winners_hidden: bool
|
||||
):
|
||||
super().__init__(client)
|
||||
|
||||
|
|
@ -81,31 +85,45 @@ class GiveawayResult(Object):
|
|||
self.expire_date = expire_date
|
||||
self.new_subscribers = new_subscribers
|
||||
self.is_refunded = is_refunded
|
||||
self.is_winners_hidden = is_winners_hidden
|
||||
|
||||
@staticmethod
|
||||
async def _parse(client, message: "raw.types.Message") -> "GiveawayResult":
|
||||
giveaway_result: "raw.types.MessageMediaGiveawayResults" = message.media
|
||||
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)]
|
||||
async def _parse(
|
||||
client,
|
||||
giveaway_result: Union[
|
||||
"raw.types.MessageActionGiveawayResults",
|
||||
"raw.types.MessageMediaGiveawayResults"
|
||||
],
|
||||
hide_winners: bool = False
|
||||
) -> "GiveawayResult":
|
||||
chat = None
|
||||
giveaway_message = None
|
||||
expired_date = None
|
||||
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])
|
||||
giveaway_message = await client.get_messages(chat_id, giveaway_result.launch_msg_id)
|
||||
winners = []
|
||||
for winner in giveaway_result.winners:
|
||||
winners.append(await client.get_users(winner))
|
||||
chat = types.Chat._parse_chat(client, chat.chats[0])
|
||||
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))
|
||||
|
||||
return GiveawayResult(
|
||||
chat=chat,
|
||||
giveaway_message=giveaway_message,
|
||||
quantity=giveaway_result.winners_count,
|
||||
unclaimed_quantity=giveaway_result.unclaimed_count,
|
||||
quantity=getattr(giveaway_result, "winners_count", None),
|
||||
unclaimed_quantity=getattr(giveaway_result, "unclaimed_count", None),
|
||||
winners=winners,
|
||||
months=giveaway_result.months,
|
||||
expire_date=utils.timestamp_to_datetime(giveaway_result.until_date),
|
||||
new_subscribers=giveaway_result.only_new_subscribers,
|
||||
is_refunded=giveaway_result.refunded,
|
||||
months=getattr(giveaway_result, "months", None),
|
||||
expire_date=expired_date,
|
||||
new_subscribers=getattr(giveaway_result, "only_new_subscribers", None),
|
||||
is_refunded=getattr(giveaway_result, "refunded", None),
|
||||
is_winners_hidden=hide_winners,
|
||||
client=client
|
||||
)
|
||||
|
|
|
|||
|
|
@ -655,6 +655,7 @@ class Message(Object, Update):
|
|||
video_chat_ended = None
|
||||
video_chat_members_invited = None
|
||||
web_app_data = None
|
||||
giveaway_result = None
|
||||
|
||||
service_type = None
|
||||
|
||||
|
|
@ -737,7 +738,9 @@ class Message(Object, Update):
|
|||
elif isinstance(action, raw.types.MessageActionWebViewDataSentMe):
|
||||
web_app_data = types.WebAppData._parse(action)
|
||||
service_type = enums.MessageServiceType.WEB_APP_DATA
|
||||
|
||||
elif isinstance(action, raw.types.MessageActionGiveawayResults):
|
||||
giveaway_result = await types.GiveawayResult._parse(client, action, True)
|
||||
service_type = enums.MessageServiceType.GIVEAWAY_RESULT
|
||||
from_user = types.User._parse(client, users.get(user_id, None))
|
||||
sender_chat = types.Chat._parse(client, message, users, chats, is_chat=False) if not from_user else None
|
||||
|
||||
|
|
@ -774,6 +777,7 @@ class Message(Object, Update):
|
|||
video_chat_ended=video_chat_ended,
|
||||
video_chat_members_invited=video_chat_members_invited,
|
||||
web_app_data=web_app_data,
|
||||
giveaway_result=giveaway_result,
|
||||
client=client
|
||||
# TODO: supergroup_chat_created
|
||||
)
|
||||
|
|
@ -892,7 +896,7 @@ class Message(Object, Update):
|
|||
giveaway = await types.Giveaway._parse(client, message)
|
||||
media_type = enums.MessageMediaType.GIVEAWAY
|
||||
elif isinstance(media, raw.types.MessageMediaGiveawayResults):
|
||||
giveaway_result = await types.GiveawayResult._parse(client, message)
|
||||
giveaway_result = await types.GiveawayResult._parse(client, message.media)
|
||||
media_type = enums.MessageMediaType.GIVEAWAY_RESULT
|
||||
elif isinstance(media, raw.types.MessageMediaStory):
|
||||
story = await types.MessageStory._parse(client, media)
|
||||
|
|
|
|||
Loading…
Reference in a new issue