From d4649275e9aac6ab8a4ec991de356b101a913e2d Mon Sep 17 00:00:00 2001 From: KurimuzonAkuma Date: Mon, 7 Oct 2024 10:00:37 +0300 Subject: [PATCH] Add send_star_gift method Signed-off-by: wulan17 --- compiler/docs/compiler.py | 1 + pyrogram/methods/payments/__init__.py | 4 +- pyrogram/methods/payments/send_star_gift.py | 103 ++++++++++++++++++++ 3 files changed, 107 insertions(+), 1 deletion(-) create mode 100644 pyrogram/methods/payments/send_star_gift.py diff --git a/compiler/docs/compiler.py b/compiler/docs/compiler.py index 1cf5c854..b07a47d7 100644 --- a/compiler/docs/compiler.py +++ b/compiler/docs/compiler.py @@ -358,6 +358,7 @@ def pyrogram_api(): send_paid_media send_paid_reaction send_payment_form + send_star_gift """, password=""" Password diff --git a/pyrogram/methods/payments/__init__.py b/pyrogram/methods/payments/__init__.py index ebd293f1..b3c8a2ed 100644 --- a/pyrogram/methods/payments/__init__.py +++ b/pyrogram/methods/payments/__init__.py @@ -29,6 +29,7 @@ from .send_invoice import SendInvoice from .send_paid_media import SendPaidMedia from .send_paid_reaction import SendPaidReaction from .send_payment_form import SendPaymentForm +from .send_star_gift import SendStarGift class Payments( ApplyGiftCode, @@ -42,6 +43,7 @@ class Payments( SendPaidReaction, SendPaidMedia, SendInvoice, - SendPaymentForm + SendPaymentForm, + SendStarGift ): pass diff --git a/pyrogram/methods/payments/send_star_gift.py b/pyrogram/methods/payments/send_star_gift.py new file mode 100644 index 00000000..b2e6124b --- /dev/null +++ b/pyrogram/methods/payments/send_star_gift.py @@ -0,0 +1,103 @@ +# Pyrofork - Telegram MTProto API Client Library for Python +# Copyright (C) 2017-present Dan +# Copyright (C) 2022-present 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 . + + +from typing import Optional, Union, List + +import pyrogram +from pyrogram import raw, types, enums, utils + + +class SendStarGift: + async def send_star_gift( + self: "pyrogram.Client", + chat_id: Union[int, str], + star_gift_id: int, + text: Optional[str] = None, + parse_mode: Optional["enums.ParseMode"] = None, + entities: Optional[List["types.MessageEntity"]] = None, + hide_my_name: Optional[bool] = None, + ) -> bool: + """Send star gift. + + .. 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). + + star_gift_id (``int``): + Unique identifier of star gift. + + text (``str``, *optional*): + Text of the message to be sent. + + parse_mode (:obj:`~pyrogram.enums.ParseMode`, *optional*): + By default, texts are parsed using both Markdown and HTML styles. + You can combine both syntaxes together. + + entities (List of :obj:`~pyrogram.types.MessageEntity`, *optional*): + List of special entities that appear in message text, which can be specified instead of *parse_mode*. + + hide_my_name (``bool``, *optional*): + If True, your name will be hidden from visitors to the gift recipient's profile. + + Returns: + ``bool``: On success, True is returned. + + Example: + .. code-block:: python + + # Send gift + app.send_star_gift(chat_id=chat_id, star_gift_id=123) + """ + peer = await self.resolve_peer(chat_id) + + if isinstance(peer, raw.types.InputPeerUser): + peer = raw.types.InputUser(user_id=peer.user_id, access_hash=peer.access_hash) + elif isinstance(peer, raw.types.InputPeerSelf): + peer = raw.types.InputUserSelf() + else: + raise ValueError("chat_id must belong to a user.") + + text, entities = (await utils.parse_text_entities(self, text, parse_mode, entities)).values() + + invoice = raw.types.InputInvoiceStarGift( + user_id=peer, + gift_id=star_gift_id, + hide_name=hide_my_name, + message=raw.types.TextWithEntities(text=text, entities=entities) if text else None + ) + + form = await self.invoke( + raw.functions.payments.GetPaymentForm( + invoice=invoice + ) + ) + + await self.invoke( + raw.functions.payments.SendStarsForm( + form_id=form.form_id, + invoice=invoice + ) + ) + + return True