mirror of
https://github.com/Mayuri-Chan/pyrofork.git
synced 2026-01-06 23:24:50 +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 = auto()
|
||||||
"Web app data"
|
"Web app data"
|
||||||
|
|
||||||
|
GIVEAWAY_RESULT = auto()
|
||||||
|
"Giveaway Result"
|
||||||
|
|
|
||||||
|
|
@ -21,17 +21,17 @@ import pyrogram
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
from pyrogram import raw, types, utils
|
from pyrogram import raw, types, utils
|
||||||
from ..object import Object
|
from ..object import Object
|
||||||
from typing import List
|
from typing import List, Union
|
||||||
|
|
||||||
|
|
||||||
class GiveawayResult(Object):
|
class GiveawayResult(Object):
|
||||||
"""A giveaway result.
|
"""A giveaway result.
|
||||||
|
|
||||||
Parameters:
|
Parameters:
|
||||||
chat (:obj:`~pyrogram.types.Chat`):
|
chat (:obj:`~pyrogram.types.Chat`, *optional*):
|
||||||
Channel which host the giveaway.
|
Channel which host the giveaway.
|
||||||
|
|
||||||
giveaway_message (:obj:`~pyrogram.types.Message`):
|
giveaway_message (:obj:`~pyrogram.types.Message`, *optional*):
|
||||||
The original giveaway message.
|
The original giveaway message.
|
||||||
|
|
||||||
quantity (``int``):
|
quantity (``int``):
|
||||||
|
|
@ -40,13 +40,13 @@ class GiveawayResult(Object):
|
||||||
unclaimed_quantity (``int``):
|
unclaimed_quantity (``int``):
|
||||||
Quantity of unclaimed giveaway prize.
|
Quantity of unclaimed giveaway prize.
|
||||||
|
|
||||||
winners (List of :obj:`~pyrogram.types.User`):
|
winners (List of :obj:`~pyrogram.types.User`, *optional*):
|
||||||
The giveaway winners.
|
The giveaway winners.
|
||||||
|
|
||||||
months (``int``):
|
months (``int``, *optional*):
|
||||||
How long the telegram premium last (in month).
|
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.
|
Date the giveaway winner(s) choosen.
|
||||||
|
|
||||||
new_subscribers (``bool``, *optional*):
|
new_subscribers (``bool``, *optional*):
|
||||||
|
|
@ -54,21 +54,25 @@ class GiveawayResult(Object):
|
||||||
|
|
||||||
is_refunded (``bool``, *optional*):
|
is_refunded (``bool``, *optional*):
|
||||||
True, if the giveaway was refunded.
|
True, if the giveaway was refunded.
|
||||||
|
|
||||||
|
is_winners_hidden (``bool``):
|
||||||
|
True, if the giveaway winners are hidden.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def __init__(
|
def __init__(
|
||||||
self,
|
self,
|
||||||
*,
|
*,
|
||||||
client: "pyrogram.Client" = None,
|
client: "pyrogram.Client" = None,
|
||||||
chat: "types.Chat",
|
chat: "types.Chat" = None,
|
||||||
giveaway_message: "types.Message",
|
giveaway_message: "types.Message" = None,
|
||||||
quantity: int,
|
quantity: int,
|
||||||
unclaimed_quantity: int,
|
unclaimed_quantity: int,
|
||||||
winners: List["types.User"],
|
winners: List["types.User"] = None,
|
||||||
months: int,
|
months: int = None,
|
||||||
expire_date: datetime,
|
expire_date: datetime = None,
|
||||||
new_subscribers : bool,
|
new_subscribers : bool = None,
|
||||||
is_refunded: bool = None
|
is_refunded: bool = None,
|
||||||
|
is_winners_hidden: bool
|
||||||
):
|
):
|
||||||
super().__init__(client)
|
super().__init__(client)
|
||||||
|
|
||||||
|
|
@ -81,31 +85,45 @@ class GiveawayResult(Object):
|
||||||
self.expire_date = expire_date
|
self.expire_date = expire_date
|
||||||
self.new_subscribers = new_subscribers
|
self.new_subscribers = new_subscribers
|
||||||
self.is_refunded = is_refunded
|
self.is_refunded = is_refunded
|
||||||
|
self.is_winners_hidden = is_winners_hidden
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
async def _parse(client, message: "raw.types.Message") -> "GiveawayResult":
|
async def _parse(
|
||||||
giveaway_result: "raw.types.MessageMediaGiveawayResults" = message.media
|
client,
|
||||||
chat_id = utils.get_channel_id(giveaway_result.channel_id)
|
giveaway_result: Union[
|
||||||
chat = await client.invoke(
|
"raw.types.MessageActionGiveawayResults",
|
||||||
raw.functions.channels.GetChannels(
|
"raw.types.MessageMediaGiveawayResults"
|
||||||
id=[await client.resolve_peer(chat_id)]
|
],
|
||||||
|
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])
|
||||||
chat = types.Chat._parse_chat(client, chat.chats[0])
|
giveaway_message = await client.get_messages(chat_id, giveaway_result.launch_msg_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 = []
|
winners = []
|
||||||
for winner in giveaway_result.winners:
|
for winner in giveaway_result.winners:
|
||||||
winners.append(await client.get_users(winner))
|
winners.append(await client.get_users(winner))
|
||||||
|
|
||||||
return GiveawayResult(
|
return GiveawayResult(
|
||||||
chat=chat,
|
chat=chat,
|
||||||
giveaway_message=giveaway_message,
|
giveaway_message=giveaway_message,
|
||||||
quantity=giveaway_result.winners_count,
|
quantity=getattr(giveaway_result, "winners_count", None),
|
||||||
unclaimed_quantity=giveaway_result.unclaimed_count,
|
unclaimed_quantity=getattr(giveaway_result, "unclaimed_count", None),
|
||||||
winners=winners,
|
winners=winners,
|
||||||
months=giveaway_result.months,
|
months=getattr(giveaway_result, "months", None),
|
||||||
expire_date=utils.timestamp_to_datetime(giveaway_result.until_date),
|
expire_date=expired_date,
|
||||||
new_subscribers=giveaway_result.only_new_subscribers,
|
new_subscribers=getattr(giveaway_result, "only_new_subscribers", None),
|
||||||
is_refunded=giveaway_result.refunded,
|
is_refunded=getattr(giveaway_result, "refunded", None),
|
||||||
|
is_winners_hidden=hide_winners,
|
||||||
client=client
|
client=client
|
||||||
)
|
)
|
||||||
|
|
|
||||||
|
|
@ -655,6 +655,7 @@ class Message(Object, Update):
|
||||||
video_chat_ended = None
|
video_chat_ended = None
|
||||||
video_chat_members_invited = None
|
video_chat_members_invited = None
|
||||||
web_app_data = None
|
web_app_data = None
|
||||||
|
giveaway_result = None
|
||||||
|
|
||||||
service_type = None
|
service_type = None
|
||||||
|
|
||||||
|
|
@ -737,7 +738,9 @@ class Message(Object, Update):
|
||||||
elif isinstance(action, raw.types.MessageActionWebViewDataSentMe):
|
elif isinstance(action, raw.types.MessageActionWebViewDataSentMe):
|
||||||
web_app_data = types.WebAppData._parse(action)
|
web_app_data = types.WebAppData._parse(action)
|
||||||
service_type = enums.MessageServiceType.WEB_APP_DATA
|
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))
|
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
|
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_ended=video_chat_ended,
|
||||||
video_chat_members_invited=video_chat_members_invited,
|
video_chat_members_invited=video_chat_members_invited,
|
||||||
web_app_data=web_app_data,
|
web_app_data=web_app_data,
|
||||||
|
giveaway_result=giveaway_result,
|
||||||
client=client
|
client=client
|
||||||
# TODO: supergroup_chat_created
|
# TODO: supergroup_chat_created
|
||||||
)
|
)
|
||||||
|
|
@ -892,7 +896,7 @@ class Message(Object, Update):
|
||||||
giveaway = await types.Giveaway._parse(client, message)
|
giveaway = await types.Giveaway._parse(client, message)
|
||||||
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)
|
giveaway_result = await types.GiveawayResult._parse(client, message.media)
|
||||||
media_type = enums.MessageMediaType.GIVEAWAY_RESULT
|
media_type = enums.MessageMediaType.GIVEAWAY_RESULT
|
||||||
elif isinstance(media, raw.types.MessageMediaStory):
|
elif isinstance(media, raw.types.MessageMediaStory):
|
||||||
story = await types.MessageStory._parse(client, media)
|
story = await types.MessageStory._parse(client, media)
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue