mirror of
https://github.com/Mayuri-Chan/pyrofork.git
synced 2025-12-29 12:04:51 +00:00
pyrofork: update StarGift type to new layer
Signed-off-by: Yasir Aris <git@yasir.id>
This commit is contained in:
parent
e67a016828
commit
8e7e5fb9ff
16 changed files with 728 additions and 49 deletions
|
|
@ -365,6 +365,8 @@ def pyrogram_api():
|
|||
send_payment_form
|
||||
send_star_gift
|
||||
show_star_gift
|
||||
transfer_star_gift
|
||||
upgrade_star_gift
|
||||
""",
|
||||
password="""
|
||||
Password
|
||||
|
|
@ -562,6 +564,7 @@ def pyrogram_api():
|
|||
ScreenshotTaken
|
||||
Wallpaper
|
||||
WallpaperSettings
|
||||
StarGiftAttribute
|
||||
""",
|
||||
stories="""
|
||||
Stories
|
||||
|
|
|
|||
|
|
@ -38,6 +38,7 @@ from .profile_color import ProfileColor
|
|||
from .reaction_type import ReactionType
|
||||
from .reply_color import ReplyColor
|
||||
from .sent_code_type import SentCodeType
|
||||
from .star_gift_attribute_type import StarGiftAttributeType
|
||||
from .stories_privacy_rules import StoriesPrivacyRules
|
||||
from .story_privacy import StoryPrivacy
|
||||
from .user_status import UserStatus
|
||||
|
|
@ -64,6 +65,7 @@ __all__ = [
|
|||
'ReactionType',
|
||||
'ReplyColor',
|
||||
'SentCodeType',
|
||||
'StarGiftAttributeType',
|
||||
"StoriesPrivacyRules",
|
||||
"StoryPrivacy",
|
||||
'UserStatus'
|
||||
|
|
|
|||
33
pyrogram/enums/star_gift_attribute_type.py
Normal file
33
pyrogram/enums/star_gift_attribute_type.py
Normal file
|
|
@ -0,0 +1,33 @@
|
|||
# Pyrogram - Telegram MTProto API Client Library for Python
|
||||
# Copyright (C) 2017-present Dan <https://github.com/delivrance>
|
||||
#
|
||||
# This file is part of Pyrogram.
|
||||
#
|
||||
# Pyrogram is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU Lesser General Public License as published
|
||||
# by the Free Software Foundation, either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# Pyrogram is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU Lesser General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU Lesser General Public License
|
||||
# along with Pyrogram. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
from pyrogram import raw
|
||||
from .auto_name import AutoName
|
||||
|
||||
|
||||
class StarGiftAttributeType(AutoName):
|
||||
"""Star gift attribute type enumeration used in :obj:`~pyrogram.types.StarGiftAttribute`."""
|
||||
|
||||
MODEL = raw.types.StarGiftAttributeModel
|
||||
"Model attribute"
|
||||
|
||||
SYMBOL = raw.types.StarGiftAttributePattern
|
||||
"Symbol attribute"
|
||||
|
||||
BACKDROP = raw.types.StarGiftAttributeBackdrop
|
||||
"Backdrop attribute"
|
||||
|
|
@ -30,6 +30,9 @@ class SearchGlobal:
|
|||
self: "pyrogram.Client",
|
||||
query: str = "",
|
||||
filter: "enums.MessagesFilter" = enums.MessagesFilter.EMPTY,
|
||||
channels_only: Optional[bool] = None,
|
||||
groups_only: Optional[bool] = None,
|
||||
users_only: Optional[bool] = None,
|
||||
limit: int = 0,
|
||||
) -> Optional[AsyncGenerator["types.Message", None]]:
|
||||
"""Search messages globally from all of your chats.
|
||||
|
|
@ -56,6 +59,15 @@ class SearchGlobal:
|
|||
Limits the number of messages to be retrieved.
|
||||
By default, no limit is applied and all messages are returned.
|
||||
|
||||
channels_only (``bool``, *optional*):
|
||||
Pass True to search only in channels.
|
||||
|
||||
groups_only (``bool``, *optional*):
|
||||
Pass True to search only in groups.
|
||||
|
||||
users_only (``bool``, *optional*):
|
||||
Pass True to search only in users.
|
||||
|
||||
Returns:
|
||||
``Generator``: A generator yielding :obj:`~pyrogram.types.Message` objects.
|
||||
|
||||
|
|
@ -93,6 +105,9 @@ class SearchGlobal:
|
|||
offset_rate=offset_date,
|
||||
offset_peer=offset_peer,
|
||||
offset_id=offset_id,
|
||||
broadcasts_only=channels_only,
|
||||
groups_only=groups_only,
|
||||
users_only=users_only,
|
||||
limit=limit
|
||||
),
|
||||
sleep_threshold=60
|
||||
|
|
|
|||
|
|
@ -17,6 +17,8 @@
|
|||
# You should have received a copy of the GNU Lesser General Public License
|
||||
# along with Pyrofork. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
from typing import Optional
|
||||
|
||||
import pyrogram
|
||||
from pyrogram import raw, enums
|
||||
|
||||
|
|
@ -26,6 +28,9 @@ class SearchGlobalCount:
|
|||
self: "pyrogram.Client",
|
||||
query: str = "",
|
||||
filter: "enums.MessagesFilter" = enums.MessagesFilter.EMPTY,
|
||||
channels_only: Optional[bool] = None,
|
||||
groups_only: Optional[bool] = None,
|
||||
users_only: Optional[bool] = None,
|
||||
) -> int:
|
||||
"""Get the count of messages resulting from a global search.
|
||||
|
||||
|
|
@ -41,6 +46,15 @@ class SearchGlobalCount:
|
|||
filter (:obj:`~pyrogram.enums.MessagesFilter`, *optional*):
|
||||
Pass a filter in order to search for specific kind of messages only:
|
||||
|
||||
channels_only (``bool``, *optional*):
|
||||
Pass True to search only in channels.
|
||||
|
||||
groups_only (``bool``, *optional*):
|
||||
Pass True to search only in groups.
|
||||
|
||||
users_only (``bool``, *optional*):
|
||||
Pass True to search only in users.
|
||||
|
||||
Returns:
|
||||
``int``: On success, the messages count is returned.
|
||||
"""
|
||||
|
|
@ -53,6 +67,9 @@ class SearchGlobalCount:
|
|||
offset_rate=0,
|
||||
offset_peer=raw.types.InputPeerEmpty(),
|
||||
offset_id=0,
|
||||
broadcasts_only=channels_only,
|
||||
groups_only=groups_only,
|
||||
users_only=users_only,
|
||||
limit=1
|
||||
)
|
||||
)
|
||||
|
|
|
|||
|
|
@ -35,6 +35,8 @@ from .send_paid_reaction import SendPaidReaction
|
|||
from .send_payment_form import SendPaymentForm
|
||||
from .send_star_gift import SendStarGift
|
||||
from .show_star_gift import ShowStarGift
|
||||
from .transfer_star_gift import TransferStarGift
|
||||
from .upgrade_star_gift import UpgradeStarGift
|
||||
|
||||
class Payments(
|
||||
ApplyGiftCode,
|
||||
|
|
@ -54,6 +56,8 @@ class Payments(
|
|||
SendInvoice,
|
||||
SendPaymentForm,
|
||||
SendStarGift,
|
||||
ShowStarGift
|
||||
ShowStarGift,
|
||||
TransferStarGift,
|
||||
UpgradeStarGift
|
||||
):
|
||||
pass
|
||||
|
|
|
|||
|
|
@ -27,7 +27,6 @@ from pyrogram import raw
|
|||
class ConvertStarGift:
|
||||
async def convert_star_gift(
|
||||
self: "pyrogram.Client",
|
||||
chat_id: Union[int, str],
|
||||
message_id: int
|
||||
) -> bool:
|
||||
"""Convert star gift to stars.
|
||||
|
|
@ -35,11 +34,6 @@ class ConvertStarGift:
|
|||
.. include:: /_includes/usable-by/users.rst
|
||||
|
||||
Parameters:
|
||||
chat_id (``int`` | ``str``):
|
||||
Unique identifier (int) or username (str) of the target chat.
|
||||
For your personal cloud (Saved Messages) you can simply use "me" or "self".
|
||||
For a contact that exists in your Telegram address book you can use his phone number (str).
|
||||
|
||||
message_id (``int``):
|
||||
Unique message identifier of star gift.
|
||||
|
||||
|
|
@ -50,16 +44,10 @@ class ConvertStarGift:
|
|||
.. code-block:: python
|
||||
|
||||
# Convert gift
|
||||
app.convert_star_gift(chat_id=chat_id, message_id=123)
|
||||
app.convert_star_gift(message_id=123)
|
||||
"""
|
||||
peer = await self.resolve_peer(chat_id)
|
||||
|
||||
if not isinstance(peer, (raw.types.InputPeerUser, raw.types.InputPeerSelf)):
|
||||
raise ValueError("chat_id must belong to a user.")
|
||||
|
||||
r = await self.invoke(
|
||||
raw.functions.payments.ConvertStarGift(
|
||||
user_id=peer,
|
||||
msg_id=message_id
|
||||
)
|
||||
)
|
||||
|
|
|
|||
|
|
@ -17,9 +17,6 @@
|
|||
# You should have received a copy of the GNU Lesser General Public License
|
||||
# along with Pyrofork. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
|
||||
from typing import Union
|
||||
|
||||
import pyrogram
|
||||
from pyrogram import raw
|
||||
|
||||
|
|
@ -27,7 +24,6 @@ from pyrogram import raw
|
|||
class HideStarGift:
|
||||
async def hide_star_gift(
|
||||
self: "pyrogram.Client",
|
||||
chat_id: Union[int, str],
|
||||
message_id: int
|
||||
) -> bool:
|
||||
"""Hide the star gift from your profile.
|
||||
|
|
@ -35,11 +31,6 @@ class HideStarGift:
|
|||
.. include:: /_includes/usable-by/users.rst
|
||||
|
||||
Parameters:
|
||||
chat_id (``int`` | ``str``):
|
||||
Unique identifier (int) or username (str) of the target chat.
|
||||
For your personal cloud (Saved Messages) you can simply use "me" or "self".
|
||||
For a contact that exists in your Telegram address book you can use his phone number (str).
|
||||
|
||||
message_id (``int``):
|
||||
Unique message identifier of star gift.
|
||||
|
||||
|
|
@ -50,16 +41,10 @@ class HideStarGift:
|
|||
.. code-block:: python
|
||||
|
||||
# Hide gift
|
||||
app.hide_star_gift(chat_id=chat_id, message_id=123)
|
||||
app.hide_star_gift(message_id=123)
|
||||
"""
|
||||
peer = await self.resolve_peer(chat_id)
|
||||
|
||||
if not isinstance(peer, (raw.types.InputPeerUser, raw.types.InputPeerSelf)):
|
||||
raise ValueError("chat_id must belong to a user.")
|
||||
|
||||
r = await self.invoke(
|
||||
raw.functions.payments.SaveStarGift(
|
||||
user_id=peer,
|
||||
msg_id=message_id,
|
||||
unsave=True
|
||||
)
|
||||
|
|
|
|||
|
|
@ -16,9 +16,6 @@
|
|||
# You should have received a copy of the GNU Lesser General Public License
|
||||
# along with Pyrogram. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
|
||||
from typing import Union
|
||||
|
||||
import pyrogram
|
||||
from pyrogram import raw
|
||||
|
||||
|
|
@ -26,7 +23,6 @@ from pyrogram import raw
|
|||
class ShowStarGift:
|
||||
async def show_star_gift(
|
||||
self: "pyrogram.Client",
|
||||
chat_id: Union[int, str],
|
||||
message_id: int
|
||||
) -> bool:
|
||||
"""Display the star gift in your profile.
|
||||
|
|
@ -34,11 +30,6 @@ class ShowStarGift:
|
|||
.. include:: /_includes/usable-by/users.rst
|
||||
|
||||
Parameters:
|
||||
chat_id (``int`` | ``str``):
|
||||
Unique identifier (int) or username (str) of the target chat.
|
||||
For your personal cloud (Saved Messages) you can simply use "me" or "self".
|
||||
For a contact that exists in your Telegram address book you can use his phone number (str).
|
||||
|
||||
message_id (``int``):
|
||||
Unique message identifier of star gift.
|
||||
|
||||
|
|
@ -49,16 +40,10 @@ class ShowStarGift:
|
|||
.. code-block:: python
|
||||
|
||||
# Show gift
|
||||
app.show_star_gift(chat_id=chat_id, message_id=123)
|
||||
app.show_star_gift(message_id=123)
|
||||
"""
|
||||
peer = await self.resolve_peer(chat_id)
|
||||
|
||||
if not isinstance(peer, (raw.types.InputPeerUser, raw.types.InputPeerSelf)):
|
||||
raise ValueError("chat_id must belong to a user.")
|
||||
|
||||
r = await self.invoke(
|
||||
raw.functions.payments.SaveStarGift(
|
||||
user_id=peer,
|
||||
msg_id=message_id,
|
||||
unsave=False
|
||||
)
|
||||
|
|
|
|||
65
pyrogram/methods/payments/transfer_star_gift.py
Normal file
65
pyrogram/methods/payments/transfer_star_gift.py
Normal file
|
|
@ -0,0 +1,65 @@
|
|||
# Pyrogram - Telegram MTProto API Client Library for Python
|
||||
# Copyright (C) 2017-present Dan <https://github.com/delivrance>
|
||||
#
|
||||
# This file is part of Pyrogram.
|
||||
#
|
||||
# Pyrogram is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU Lesser General Public License as published
|
||||
# by the Free Software Foundation, either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# Pyrogram is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU Lesser General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU Lesser General Public License
|
||||
# along with Pyrogram. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
from typing import Union
|
||||
|
||||
import pyrogram
|
||||
from pyrogram import raw
|
||||
|
||||
|
||||
class TransferStarGift:
|
||||
async def transfer_star_gift(
|
||||
self: "pyrogram.Client",
|
||||
chat_id: Union[int, str],
|
||||
message_id: int,
|
||||
) -> bool:
|
||||
"""Transfer star gift to another user.
|
||||
|
||||
.. include:: /_includes/usable-by/users.rst
|
||||
|
||||
Parameters:
|
||||
chat_id (``int`` | ``str``):
|
||||
Unique identifier (int) or username (str) of the target chat you want to transfer the star gift to.
|
||||
For your personal cloud (Saved Messages) you can simply use "me" or "self".
|
||||
For a contact that exists in your Telegram address book you can use his phone number (str).
|
||||
|
||||
message_id (``int``):
|
||||
Unique message identifier of star gift.
|
||||
|
||||
Returns:
|
||||
``bool``: On success, True is returned.
|
||||
|
||||
Example:
|
||||
.. code-block:: python
|
||||
|
||||
# Show gift
|
||||
app.transfer_star_gift(chat_id=123, message_id=123)
|
||||
"""
|
||||
peer = await self.resolve_peer(chat_id)
|
||||
|
||||
if not isinstance(peer, (raw.types.InputPeerUser, raw.types.InputPeerSelf)):
|
||||
raise ValueError("chat_id must belong to a user.")
|
||||
|
||||
await self.invoke(
|
||||
raw.functions.payments.TransferStarGift(
|
||||
msg_id=message_id,
|
||||
keep_original_details=keep_details
|
||||
)
|
||||
)
|
||||
|
||||
return True # TODO:
|
||||
55
pyrogram/methods/payments/upgrade_star_gift.py
Normal file
55
pyrogram/methods/payments/upgrade_star_gift.py
Normal file
|
|
@ -0,0 +1,55 @@
|
|||
# Pyrogram - Telegram MTProto API Client Library for Python
|
||||
# Copyright (C) 2017-present Dan <https://github.com/delivrance>
|
||||
#
|
||||
# This file is part of Pyrogram.
|
||||
#
|
||||
# Pyrogram is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU Lesser General Public License as published
|
||||
# by the Free Software Foundation, either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# Pyrogram is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU Lesser General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU Lesser General Public License
|
||||
# along with Pyrogram. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
from typing import Optional
|
||||
|
||||
import pyrogram
|
||||
from pyrogram import raw
|
||||
|
||||
|
||||
class UpgradeStarGift:
|
||||
async def upgrade_star_gift(
|
||||
self: "pyrogram.Client",
|
||||
message_id: int,
|
||||
keep_details: Optional[bool] = None
|
||||
) -> bool:
|
||||
"""Upgrade star gift to unique.
|
||||
|
||||
.. include:: /_includes/usable-by/users.rst
|
||||
|
||||
Parameters:
|
||||
message_id (``int``):
|
||||
Unique message identifier of star gift.
|
||||
|
||||
Returns:
|
||||
``bool``: On success, True is returned.
|
||||
|
||||
Example:
|
||||
.. code-block:: python
|
||||
|
||||
# Show gift
|
||||
app.upgrade_star_gift(message_id=123)
|
||||
"""
|
||||
await self.invoke(
|
||||
raw.functions.payments.UpgradeStarGift(
|
||||
msg_id=message_id,
|
||||
keep_original_details=keep_details
|
||||
)
|
||||
)
|
||||
|
||||
return True # TODO:
|
||||
|
|
@ -43,6 +43,8 @@ from .poll_option import PollOption
|
|||
from .reaction import Reaction
|
||||
from .read_participant import ReadParticipant
|
||||
from .screenshot_taken import ScreenshotTaken
|
||||
from .star_gift_attribute import StarGiftAttribute
|
||||
from .star_gift import StarGift
|
||||
from .sticker import Sticker
|
||||
from .stickerset import StickerSet
|
||||
from .stories_privacy_rules import StoriesPrivacyRules
|
||||
|
|
@ -115,6 +117,8 @@ __all__ = [
|
|||
"MessageStory",
|
||||
"ReadParticipant",
|
||||
"ScreenshotTaken",
|
||||
"StarGiftAttribute",
|
||||
"StarGift",
|
||||
"Story",
|
||||
"StoryDeleted",
|
||||
"StorySkipped",
|
||||
|
|
|
|||
|
|
@ -909,7 +909,7 @@ class Message(Object, Update):
|
|||
elif isinstance(action, raw.types.MessageActionStarGift):
|
||||
user_gift = await types.UserGift._parse_action(client, message, users)
|
||||
service_type = enums.MessageServiceType.USER_GIFT
|
||||
elif isinstance(action, raw.types.MessageActionStarGift):
|
||||
elif isinstance(action, (raw.types.MessageActionStarGift, raw.types.MessageActionStarGiftUnique)):
|
||||
star_gift = await types.StarGift._parse_action(client, message, users)
|
||||
service_type = enums.MessageServiceType.STAR_GIFT
|
||||
elif isinstance(action, raw.types.MessageActionScreenshotTaken):
|
||||
|
|
|
|||
443
pyrogram/types/messages_and_media/star_gift.py
Normal file
443
pyrogram/types/messages_and_media/star_gift.py
Normal file
|
|
@ -0,0 +1,443 @@
|
|||
# Pyrofork - Telegram MTProto API Client Library for Python
|
||||
# Copyright (C) 2017-present Dan <https://github.com/delivrance>
|
||||
# Copyright (C) 2022-present Mayuri-Chan <https://github.com/Mayuri-Chan>
|
||||
#
|
||||
# This file is part of Pyrofork.
|
||||
#
|
||||
# Pyrofork is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU Lesser General Public License as published
|
||||
# by the Free Software Foundation, either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# Pyrofork is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU Lesser General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU Lesser General Public License
|
||||
# along with Pyrofork. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
from datetime import datetime
|
||||
from typing import Optional, List
|
||||
|
||||
import pyrogram
|
||||
from pyrogram import raw
|
||||
from pyrogram import types
|
||||
from pyrogram import utils
|
||||
from ..object import Object
|
||||
|
||||
|
||||
class StarGift(Object):
|
||||
"""A star gift.
|
||||
|
||||
Parameters:
|
||||
id (``int``):
|
||||
Unique star gift identifier.
|
||||
|
||||
sticker (:obj:`~pyrogram.types.Sticker`, *optional*):
|
||||
Information about the star gift sticker.
|
||||
|
||||
caption (``str``, *optional*):
|
||||
Text message.
|
||||
|
||||
caption_entities (List of :obj:`~pyrogram.types.MessageEntity`, *optional*):
|
||||
For text messages, special entities like usernames, URLs, bot commands, etc. that appear in the text.
|
||||
|
||||
message_id (``int``, *optional*):
|
||||
Unique message identifier.
|
||||
|
||||
upgrade_message_id (``int``, *optional*):
|
||||
Unique message identifier.
|
||||
For unique gifts only.
|
||||
|
||||
title (``str``, *optional*):
|
||||
Title of the star gift.
|
||||
For unique gifts only.
|
||||
|
||||
number (``int``, *optional*):
|
||||
Collectible number of the star gift.
|
||||
For unique gifts only.
|
||||
|
||||
model (:obj:`~pyrogram.types.StarGiftAttribute`, *optional*):
|
||||
Information about the star gift model.
|
||||
For unique gifts only.
|
||||
|
||||
backdrop (:obj:`~pyrogram.types.StarGiftAttribute`, *optional*):
|
||||
Information about the star gift backdrop.
|
||||
For unique gifts only.
|
||||
|
||||
symbol (:obj:`~pyrogram.types.StarGiftAttribute`, *optional*):
|
||||
Information about the star gift symbol.
|
||||
For unique gifts only.
|
||||
|
||||
date (``datetime``, *optional*):
|
||||
Date when the star gift was received.
|
||||
|
||||
first_sale_date (``datetime``, *optional*):
|
||||
Date when the star gift was first purchased.
|
||||
|
||||
last_sale_date (``datetime``, *optional*):
|
||||
Date when the star gift was last purchased.
|
||||
|
||||
from_user (:obj:`~pyrogram.types.User`, *optional*):
|
||||
User who sent the star gift.
|
||||
|
||||
price (``int``, *optional*):
|
||||
Price of this gift in stars.
|
||||
|
||||
convert_price (``int``, *optional*):
|
||||
The number of stars you get if you convert this gift.
|
||||
|
||||
upgrade_price (``int``, *optional*):
|
||||
The number of stars you need to upgrade this gift.
|
||||
|
||||
transfer_price (``int``, *optional*):
|
||||
The number of stars you need to transfer this gift.
|
||||
|
||||
available_amount (``int``, *optional*):
|
||||
The number of gifts available for purchase.
|
||||
Returned only if is_limited is True.
|
||||
|
||||
total_amount (``int``, *optional*):
|
||||
Total amount of gifts.
|
||||
Returned only if is_limited is True.
|
||||
|
||||
can_upgrade (``bool``, *optional*):
|
||||
True, if the gift can be upgraded.
|
||||
|
||||
can_export_at (``datetime``, *optional*):
|
||||
Date when the gift can be exported via blockchain.
|
||||
|
||||
is_limited (``bool``, *optional*):
|
||||
True, if the number of gifts is limited.
|
||||
|
||||
is_name_hidden (``bool``, *optional*):
|
||||
True, if the sender's name is hidden.
|
||||
|
||||
is_saved (``bool``, *optional*):
|
||||
True, if the star gift is saved in profile.
|
||||
|
||||
is_sold_out (``bool``, *optional*):
|
||||
True, if the star gift is sold out.
|
||||
|
||||
is_converted (``bool``, *optional*):
|
||||
True, if the gift was converted to Telegram Stars.
|
||||
Only for the receiver of the gift.
|
||||
|
||||
is_upgraded (``bool``, *optional*):
|
||||
True, if the gift was upgraded.
|
||||
|
||||
is_refunded (``bool``, *optional*):
|
||||
True, if the gift was refunded.
|
||||
|
||||
is_transferred (``bool``, *optional*):
|
||||
True, if the gift was transferred.
|
||||
|
||||
is_unique (``bool``, *optional*):
|
||||
True, if the gift is unique.
|
||||
"""
|
||||
|
||||
def __init__(
|
||||
self,
|
||||
*,
|
||||
client: "pyrogram.Client" = None,
|
||||
id: int,
|
||||
sticker: "types.Sticker" = None,
|
||||
caption: Optional[str] = None,
|
||||
caption_entities: List["types.MessageEntity"] = None,
|
||||
message_id: Optional[int] = None,
|
||||
date: Optional[datetime] = None,
|
||||
first_sale_date: Optional[datetime] = None,
|
||||
last_sale_date: Optional[datetime] = None,
|
||||
from_user: Optional["types.User"] = None,
|
||||
price: Optional[int] = None,
|
||||
convert_price: Optional[int] = None,
|
||||
upgrade_price: Optional[int] = None,
|
||||
transfer_price: Optional[int] = None,
|
||||
upgrade_message_id: Optional[int] = None,
|
||||
title: Optional[str] = None,
|
||||
number: Optional[int] = None,
|
||||
model: Optional["types.StarGiftAttribute"] = None,
|
||||
backdrop: Optional["types.StarGiftAttribute"] = None,
|
||||
symbol: Optional["types.StarGiftAttribute"] = None,
|
||||
available_amount: Optional[int] = None,
|
||||
total_amount: Optional[int] = None,
|
||||
can_upgrade: Optional[bool] = None,
|
||||
can_export_at: Optional[datetime] = None,
|
||||
is_limited: Optional[bool] = None,
|
||||
is_name_hidden: Optional[bool] = None,
|
||||
is_saved: Optional[bool] = None,
|
||||
is_sold_out: Optional[bool] = None,
|
||||
is_converted: Optional[bool] = None,
|
||||
is_upgraded: Optional[bool] = None,
|
||||
is_refunded: Optional[bool] = None,
|
||||
is_transferred: Optional[bool] = None,
|
||||
is_unique: Optional[bool] = None
|
||||
):
|
||||
super().__init__(client)
|
||||
|
||||
self.id = id
|
||||
self.sticker = sticker
|
||||
self.caption = caption
|
||||
self.caption_entities = caption_entities
|
||||
self.message_id = message_id
|
||||
self.date = date
|
||||
self.first_sale_date = first_sale_date
|
||||
self.last_sale_date = last_sale_date
|
||||
self.from_user = from_user
|
||||
self.price = price
|
||||
self.convert_price = convert_price
|
||||
self.upgrade_price = upgrade_price
|
||||
self.transfer_price = transfer_price
|
||||
self.upgrade_message_id = upgrade_message_id
|
||||
self.title = title
|
||||
self.number = number
|
||||
self.model = model
|
||||
self.backdrop = backdrop
|
||||
self.symbol = symbol
|
||||
self.available_amount = available_amount
|
||||
self.total_amount = total_amount
|
||||
self.can_upgrade = can_upgrade
|
||||
self.can_export_at = can_export_at
|
||||
self.is_limited = is_limited
|
||||
self.is_name_hidden = is_name_hidden
|
||||
self.is_saved = is_saved
|
||||
self.is_sold_out = is_sold_out
|
||||
self.is_converted = is_converted
|
||||
self.is_upgraded = is_upgraded
|
||||
self.is_refunded = is_refunded
|
||||
self.is_transferred = is_transferred
|
||||
self.is_unique = is_unique
|
||||
|
||||
@staticmethod
|
||||
async def _parse(
|
||||
client,
|
||||
star_gift: "raw.types.StarGift",
|
||||
) -> "StarGift":
|
||||
doc = star_gift.sticker
|
||||
attributes = {type(i): i for i in doc.attributes}
|
||||
|
||||
return StarGift(
|
||||
id=star_gift.id,
|
||||
sticker=await types.Sticker._parse(client, doc, attributes),
|
||||
price=star_gift.stars,
|
||||
convert_price=star_gift.convert_stars,
|
||||
available_amount=getattr(star_gift, "availability_remains", None),
|
||||
total_amount=getattr(star_gift, "availability_total", None),
|
||||
is_limited=getattr(star_gift, "limited", None),
|
||||
first_sale_date=utils.timestamp_to_datetime(getattr(star_gift, "first_sale_date", None)),
|
||||
last_sale_date=utils.timestamp_to_datetime(getattr(star_gift, "last_sale_date", None)),
|
||||
is_sold_out=getattr(star_gift, "sold_out", None),
|
||||
client=client
|
||||
)
|
||||
|
||||
@staticmethod
|
||||
async def _parse_user_star_gift(
|
||||
client,
|
||||
user_star_gift: "raw.types.UserStarGift",
|
||||
users: dict
|
||||
) -> "StarGift":
|
||||
caption, caption_entities = (
|
||||
utils.parse_text_with_entities(
|
||||
client, getattr(user_star_gift, "message", None), users
|
||||
)
|
||||
).values()
|
||||
|
||||
|
||||
if isinstance(user_star_gift.gift, raw.types.StarGift):
|
||||
doc = user_star_gift.gift.sticker
|
||||
attributes = {type(i): i for i in doc.attributes}
|
||||
|
||||
return StarGift(
|
||||
id=user_star_gift.gift.id,
|
||||
sticker=await types.Sticker._parse(client, doc, attributes),
|
||||
price=user_star_gift.gift.stars,
|
||||
convert_price=user_star_gift.gift.convert_stars,
|
||||
available_amount=getattr(user_star_gift.gift, "availability_remains", None),
|
||||
total_amount=getattr(user_star_gift.gift, "availability_total", None),
|
||||
date=utils.timestamp_to_datetime(user_star_gift.date),
|
||||
is_limited=getattr(user_star_gift.gift, "limited", None),
|
||||
is_name_hidden=getattr(user_star_gift, "name_hidden", None),
|
||||
is_saved=not user_star_gift.unsaved if getattr(user_star_gift, "unsaved", None) else None,
|
||||
is_refunded=getattr(user_star_gift, "refunded", None),
|
||||
can_upgrade=getattr(user_star_gift, "can_upgrade", None),
|
||||
can_export_at=utils.timestamp_to_datetime(getattr(user_star_gift, "can_export_at", None)),
|
||||
upgrade_price=getattr(user_star_gift, "upgrade_stars", None),
|
||||
transfer_price=getattr(user_star_gift, "transfer_stars", None),
|
||||
from_user=types.User._parse(client, users.get(user_star_gift.from_id)) if getattr(user_star_gift, "from_id", None) else None,
|
||||
message_id=getattr(user_star_gift, "msg_id", None),
|
||||
caption=caption,
|
||||
caption_entities=caption_entities,
|
||||
client=client
|
||||
)
|
||||
elif isinstance(user_star_gift.gift, raw.types.StarGiftUnique):
|
||||
gift = user_star_gift.gift
|
||||
attributes = {type(i): i for i in gift.attributes}
|
||||
|
||||
model = None
|
||||
backdrop = None
|
||||
symbol = None
|
||||
|
||||
for key, value in attributes.items():
|
||||
if isinstance(key, raw.types.StarGiftAttributeModel):
|
||||
model = await types.StarGiftAttribute._parse(client, value)
|
||||
elif isinstance(key, raw.types.StarGiftAttributeBackdrop):
|
||||
backdrop = await types.StarGiftAttribute._parse(client, value)
|
||||
elif isinstance(key, raw.types.StarGiftAttributePattern):
|
||||
symbol = await types.StarGiftAttribute._parse(client, value)
|
||||
|
||||
return StarGift(
|
||||
id=user_star_gift.gift.id,
|
||||
available_amount=getattr(user_star_gift.gift, "availability_issued", None),
|
||||
total_amount=getattr(user_star_gift.gift, "availability_total", None),
|
||||
date=utils.timestamp_to_datetime(user_star_gift.date),
|
||||
model=model,
|
||||
backdrop=backdrop,
|
||||
symbol=symbol,
|
||||
title=gift.title,
|
||||
number=gift.num,
|
||||
is_unique=True,
|
||||
is_name_hidden=getattr(user_star_gift, "name_hidden", None),
|
||||
is_saved=not user_star_gift.unsaved if getattr(user_star_gift, "unsaved", None) else None,
|
||||
is_refunded=getattr(user_star_gift, "refunded", None),
|
||||
can_upgrade=getattr(user_star_gift, "can_upgrade", None),
|
||||
can_export_at=utils.timestamp_to_datetime(getattr(user_star_gift, "can_export_at", None)),
|
||||
upgrade_price=getattr(user_star_gift, "upgrade_stars", None),
|
||||
transfer_price=getattr(user_star_gift, "transfer_stars", None),
|
||||
from_user=types.User._parse(client, users.get(user_star_gift.from_id)) if getattr(user_star_gift, "from_id", None) else None,
|
||||
message_id=getattr(user_star_gift, "msg_id", None),
|
||||
caption=caption,
|
||||
caption_entities=caption_entities,
|
||||
client=client
|
||||
)
|
||||
|
||||
@staticmethod
|
||||
async def _parse_action(
|
||||
client,
|
||||
message: "raw.base.Message",
|
||||
users: dict
|
||||
) -> "StarGift":
|
||||
action = message.action # type: raw.types.MessageActionStarGift
|
||||
|
||||
caption, caption_entities = (
|
||||
utils.parse_text_with_entities(
|
||||
client, getattr(action, "message", None), users
|
||||
)
|
||||
).values()
|
||||
|
||||
if isinstance(action, raw.types.MessageActionStarGift):
|
||||
doc = action.gift.sticker
|
||||
attributes = {type(i): i for i in doc.attributes}
|
||||
|
||||
return StarGift(
|
||||
id=action.gift.id,
|
||||
sticker=await types.Sticker._parse(client, doc, attributes),
|
||||
price=action.gift.stars,
|
||||
convert_price=action.gift.convert_stars,
|
||||
available_amount=getattr(action.gift, "availability_remains", None),
|
||||
total_amount=getattr(action.gift, "availability_total", None),
|
||||
date=utils.timestamp_to_datetime(message.date),
|
||||
can_upgrade=getattr(action, "can_upgrade", None),
|
||||
is_limited=getattr(action.gift, "limited", None),
|
||||
is_name_hidden=getattr(action, "name_hidden", None),
|
||||
is_saved=getattr(action, "saved", None),
|
||||
is_converted=getattr(action, "converted", None),
|
||||
is_upgraded=getattr(action, "upgraded", None),
|
||||
is_refunded=getattr(action, "refunded", None),
|
||||
from_user=types.User._parse(client, users.get(utils.get_raw_peer_id(message.peer_id))),
|
||||
message_id=message.id,
|
||||
upgrade_message_id=getattr(action, "upgrade_msg_id", None),
|
||||
upgrade_price=getattr(action, "upgrade_stars", None),
|
||||
caption=caption,
|
||||
caption_entities=caption_entities,
|
||||
client=client
|
||||
)
|
||||
elif isinstance(action, raw.types.MessageActionStarGiftUnique):
|
||||
gift = action.gift
|
||||
attributes = {type(i): i for i in gift.attributes}
|
||||
|
||||
model = None
|
||||
backdrop = None
|
||||
symbol = None
|
||||
|
||||
for key, value in attributes.items():
|
||||
if isinstance(key, raw.types.StarGiftAttributeModel):
|
||||
model = await types.StarGiftAttribute._parse(client, value)
|
||||
elif isinstance(key, raw.types.StarGiftAttributeBackdrop):
|
||||
backdrop = await types.StarGiftAttribute._parse(client, value)
|
||||
elif isinstance(key, raw.types.StarGiftAttributePattern):
|
||||
symbol = await types.StarGiftAttribute._parse(client, value)
|
||||
|
||||
return StarGift(
|
||||
id=action.gift.id,
|
||||
available_amount=getattr(action.gift, "availability_issued", None),
|
||||
total_amount=getattr(action.gift, "availability_total", None),
|
||||
date=utils.timestamp_to_datetime(message.date),
|
||||
is_unique=True,
|
||||
from_user=types.User._parse(client, users.get(utils.get_raw_peer_id(message.peer_id))),
|
||||
message_id=message.id,
|
||||
caption=caption,
|
||||
caption_entities=caption_entities,
|
||||
title=gift.title,
|
||||
number=gift.num,
|
||||
model=model,
|
||||
backdrop=backdrop,
|
||||
symbol=symbol,
|
||||
is_upgraded=getattr(action, "upgrade", None),
|
||||
is_transferred=getattr(action, "transferred", None),
|
||||
is_saved=getattr(action, "saved", None),
|
||||
is_refunded=getattr(action, "refunded", None),
|
||||
can_export_at=utils.timestamp_to_datetime(getattr(action, "can_export_at", None)),
|
||||
transfer_price=getattr(action, "transfer_stars", None),
|
||||
client=client
|
||||
)
|
||||
|
||||
async def show(self) -> bool:
|
||||
"""Bound method *show* of :obj:`~pyrogram.types.StarGift`.
|
||||
|
||||
Use as a shortcut for:
|
||||
|
||||
.. code-block:: python
|
||||
|
||||
await client.show_star_gift(
|
||||
chat_id=message.chat.id,
|
||||
message_id=message_id
|
||||
)
|
||||
|
||||
Example:
|
||||
.. code-block:: python
|
||||
|
||||
await star_gift.show()
|
||||
|
||||
Returns:
|
||||
``bool``: On success, True is returned.
|
||||
"""
|
||||
return await self._client.show_star_gift(
|
||||
chat_id=self.from_user.id,
|
||||
message_id=self.message_id
|
||||
)
|
||||
|
||||
async def hide(self) -> bool:
|
||||
"""Bound method *hide* of :obj:`~pyrogram.types.StarGift`.
|
||||
|
||||
Use as a shortcut for:
|
||||
|
||||
.. code-block:: python
|
||||
|
||||
await client.hide_star_gift(
|
||||
chat_id=message.chat.id,
|
||||
message_id=message_id
|
||||
)
|
||||
|
||||
Example:
|
||||
.. code-block:: python
|
||||
|
||||
await star_gift.hide()
|
||||
|
||||
Returns:
|
||||
``bool``: On success, True is returned.
|
||||
"""
|
||||
return await self._client.hide_star_gift(
|
||||
chat_id=self.from_user.id,
|
||||
message_id=self.message_id
|
||||
)
|
||||
80
pyrogram/types/messages_and_media/star_gift_attribute.py
Normal file
80
pyrogram/types/messages_and_media/star_gift_attribute.py
Normal file
|
|
@ -0,0 +1,80 @@
|
|||
# Pyrofork - Telegram MTProto API Client Library for Python
|
||||
# Copyright (C) 2017-present Dan <https://github.com/delivrance>
|
||||
# Copyright (C) 2022-present Mayuri-Chan <https://github.com/Mayuri-Chan>
|
||||
#
|
||||
# This file is part of Pyrofork.
|
||||
#
|
||||
# Pyrofork is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU Lesser General Public License as published
|
||||
# by the Free Software Foundation, either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# Pyrofork is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU Lesser General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU Lesser General Public License
|
||||
# along with Pyrofork. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
from datetime import datetime
|
||||
from typing import Optional, List
|
||||
|
||||
import pyrogram
|
||||
from pyrogram import raw
|
||||
from pyrogram import types
|
||||
from pyrogram import enums
|
||||
from pyrogram import utils
|
||||
from ..object import Object
|
||||
|
||||
|
||||
class StarGiftAttribute(Object):
|
||||
"""Contains information about a star gift attribute.
|
||||
|
||||
Parameters:
|
||||
name (``str``):
|
||||
Name of the attribute.
|
||||
|
||||
type (:obj:`~pyrogram.enums.StarGiftAttributeType`):
|
||||
Type of the attribute.
|
||||
|
||||
rarity (``int``):
|
||||
Rarity of the attribute in permilles.
|
||||
For example, 15 means 1.5%. So only 1.5% of such collectibles have this attribute.
|
||||
|
||||
sticker (:obj:`~pyrogram.types.Sticker`):
|
||||
Information about the sticker.
|
||||
"""
|
||||
|
||||
def __init__(
|
||||
self,
|
||||
*,
|
||||
client: "pyrogram.Client" = None,
|
||||
name: str,
|
||||
type: "enums.StarGiftAttributeType",
|
||||
rarity: int,
|
||||
sticker: "types.Sticker",
|
||||
):
|
||||
super().__init__(client)
|
||||
|
||||
self.name = name
|
||||
self.type = type
|
||||
self.rarity = rarity
|
||||
self.sticker = sticker
|
||||
# TODO: Add support for raw.types.StarGiftAttributeOriginalDetails
|
||||
|
||||
@staticmethod
|
||||
async def _parse(
|
||||
client,
|
||||
attr: "raw.base.StarGiftAttribute",
|
||||
) -> "StarGiftAttribute":
|
||||
doc = attr.document
|
||||
attributes = {type(i): i for i in doc.attributes}
|
||||
|
||||
return StarGiftAttribute(
|
||||
name=attr.name,
|
||||
type=enums.StarGiftAttributeType(type(attr)),
|
||||
sticker=await types.Sticker._parse(client, doc, attributes),
|
||||
rarity=attr.rarity_permille,
|
||||
client=client
|
||||
)
|
||||
Loading…
Reference in a new issue