Skip to content

Commit 0057216

Browse files
Add suggested_post_message attribute to SuggestedPost classes
1 parent 782464f commit 0057216

6 files changed

Lines changed: 177 additions & 33 deletions

File tree

pyrogram/types/messages_and_media/message.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1071,19 +1071,19 @@ async def _parse_service(
10711071
elif isinstance(action, raw.types.MessageActionSuggestedPostApproval):
10721072
if action.balance_too_low:
10731073
service_type = enums.MessageServiceType.SUGGESTED_POST_APPROVAL_FAILED
1074-
suggested_post_approval_failed = types.SuggestedPostApprovalFailed._parse(action, message.reply_to)
1074+
suggested_post_approval_failed = await types.SuggestedPostApprovalFailed._parse(client, message)
10751075
elif action.rejected:
10761076
service_type = enums.MessageServiceType.SUGGESTED_POST_DECLINED
1077-
suggested_post_declined = types.SuggestedPostDeclined._parse(action, message.reply_to)
1077+
suggested_post_declined = await types.SuggestedPostDeclined._parse(client, message)
10781078
else:
10791079
service_type = enums.MessageServiceType.SUGGESTED_POST_APPROVED
1080-
suggested_post_approved = types.SuggestedPostApproved._parse(action, message.reply_to)
1080+
suggested_post_approved = await types.SuggestedPostApproved._parse(client, message)
10811081
elif isinstance(action, raw.types.MessageActionSuggestedPostSuccess):
10821082
service_type = enums.MessageServiceType.SUGGESTED_POST_PAID
1083-
suggested_post_paid = types.SuggestedPostPaid._parse(action, message.reply_to)
1083+
suggested_post_paid = await types.SuggestedPostPaid._parse(client, message)
10841084
elif isinstance(action, raw.types.MessageActionSuggestedPostRefund):
10851085
service_type = enums.MessageServiceType.SUGGESTED_POST_REFUNDED
1086-
suggested_post_refunded = types.SuggestedPostRefunded._parse(action, message.reply_to)
1086+
suggested_post_refunded = await types.SuggestedPostRefunded._parse(client, message)
10871087
elif isinstance(action, raw.types.MessageActionPhoneCall):
10881088
if action.reason:
10891089
service_type = enums.MessageServiceType.PHONE_CALL_ENDED

pyrogram/types/messages_and_media/suggested_post_approval_failed.py

Lines changed: 35 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,11 @@
1616
# You should have received a copy of the GNU Lesser General Public License
1717
# along with Pyrogram. If not, see <http://www.gnu.org/licenses/>.
1818

19-
from pyrogram import raw, types
19+
from typing import Optional
20+
21+
import pyrogram
22+
from pyrogram import raw, types, utils
23+
from pyrogram.errors import MessageIdsEmpty
2024

2125
from ..object import Object
2226

@@ -30,30 +34,55 @@ class SuggestedPostApprovalFailed(Object):
3034
suggested_post_message_id (``int``, *optional*):
3135
Identifier of the message with the suggested post.
3236
37+
suggested_post_message (:obj:`~pyrogram.types.Message`, *optional*):
38+
Message containing the suggested post.
39+
3340
price (:obj:`~pyrogram.types.SuggestedPostPrice`, *optional*):
3441
Expected price of the post.
3542
"""
3643
def __init__(
3744
self, *,
38-
suggested_post_message_id: int = None,
39-
price: "types.SuggestedPostPrice" = None
45+
suggested_post_message_id: Optional[int] = None,
46+
suggested_post_message: Optional["types.Message"] = None,
47+
price: Optional["types.SuggestedPostPrice"] = None
4048
):
4149
super().__init__()
4250

4351
self.suggested_post_message_id = suggested_post_message_id
52+
self.suggested_post_message = suggested_post_message
4453
self.price = price
4554

4655
@staticmethod
47-
def _parse(action: "raw.types.MessageActionSuggestedPostApproval", reply_to: "raw.base.MessageReplyHeader") -> "SuggestedPostApprovalFailed":
56+
async def _parse(
57+
client: "pyrogram.Client",
58+
message: "raw.types.MessageService"
59+
) -> "SuggestedPostApprovalFailed":
60+
action: "raw.types.MessageActionSuggestedPostApproval" = message.action
61+
4862
if not isinstance(action, raw.types.MessageActionSuggestedPostApproval):
4963
return None
5064

65+
from_id = utils.get_peer_id(message.from_id)
66+
peer_id = utils.get_peer_id(message.peer_id)
67+
chat_id = peer_id or from_id
68+
5169
suggested_post_message_id = None
70+
suggested_post_message = None
71+
72+
if isinstance(message.reply_to, raw.types.MessageReplyHeader):
73+
suggested_post_message_id = message.reply_to.reply_to_msg_id
5274

53-
if isinstance(reply_to, raw.types.MessageReplyHeader):
54-
suggested_post_message_id = reply_to.reply_to_msg_id
75+
if client.fetch_replies:
76+
try:
77+
suggested_post_message = await client.get_messages(
78+
chat_id=chat_id,
79+
message_ids=suggested_post_message_id
80+
)
81+
except MessageIdsEmpty:
82+
pass
5583

5684
return SuggestedPostApprovalFailed(
5785
suggested_post_message_id=suggested_post_message_id,
86+
suggested_post_message=suggested_post_message,
5887
price=types.SuggestedPostPrice._parse(action.price),
5988
)

pyrogram/types/messages_and_media/suggested_post_approved.py

Lines changed: 35 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,11 @@
1717
# along with Pyrogram. If not, see <http://www.gnu.org/licenses/>.
1818

1919
from datetime import datetime
20+
from typing import Optional
21+
22+
import pyrogram
2023
from pyrogram import raw, types, utils
24+
from pyrogram.errors import MessageIdsEmpty
2125

2226
from ..object import Object
2327

@@ -29,6 +33,9 @@ class SuggestedPostApproved(Object):
2933
suggested_post_message_id (``int``, *optional*):
3034
Identifier of the message with the suggested post.
3135
36+
suggested_post_message (:obj:`~pyrogram.types.Message`, *optional*):
37+
Message containing the suggested post.
38+
3239
price (:obj:`~pyrogram.types.SuggestedPostPrice`, *optional*):
3340
Amount paid for the post.
3441
@@ -37,28 +44,50 @@ class SuggestedPostApproved(Object):
3744
"""
3845
def __init__(
3946
self, *,
40-
suggested_post_message_id: int = None,
41-
price: "types.SuggestedPostPrice" = None,
42-
send_date: datetime = None
47+
suggested_post_message_id: Optional[int] = None,
48+
suggested_post_message: Optional["types.Message"] = None,
49+
price: Optional["types.SuggestedPostPrice"] = None,
50+
send_date: Optional[datetime] = None
4351
):
4452
super().__init__()
4553

4654
self.suggested_post_message_id = suggested_post_message_id
55+
self.suggested_post_message = suggested_post_message
4756
self.price = price
4857
self.send_date = send_date
4958

5059
@staticmethod
51-
def _parse(action: "raw.types.MessageActionSuggestedPostApproval", reply_to: "raw.base.MessageReplyHeader") -> "SuggestedPostApproved":
60+
async def _parse(
61+
client: "pyrogram.Client",
62+
message: "raw.types.MessageService"
63+
) -> "SuggestedPostApproved":
64+
action: "raw.types.MessageActionSuggestedPostApproval" = message.action
65+
5266
if not isinstance(action, raw.types.MessageActionSuggestedPostApproval):
5367
return None
5468

69+
from_id = utils.get_peer_id(message.from_id)
70+
peer_id = utils.get_peer_id(message.peer_id)
71+
chat_id = peer_id or from_id
72+
5573
suggested_post_message_id = None
74+
suggested_post_message = None
75+
76+
if isinstance(message.reply_to, raw.types.MessageReplyHeader):
77+
suggested_post_message_id = message.reply_to.reply_to_msg_id
5678

57-
if isinstance(reply_to, raw.types.MessageReplyHeader):
58-
suggested_post_message_id = reply_to.reply_to_msg_id
79+
if client.fetch_replies:
80+
try:
81+
suggested_post_message = await client.get_messages(
82+
chat_id=chat_id,
83+
message_ids=suggested_post_message_id
84+
)
85+
except MessageIdsEmpty:
86+
pass
5987

6088
return SuggestedPostApproved(
6189
suggested_post_message_id=suggested_post_message_id,
90+
suggested_post_message=suggested_post_message,
6291
price=types.SuggestedPostPrice._parse(action.price),
6392
send_date=utils.timestamp_to_datetime(action.schedule_date)
6493
)

pyrogram/types/messages_and_media/suggested_post_declined.py

Lines changed: 35 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,11 @@
1616
# You should have received a copy of the GNU Lesser General Public License
1717
# along with Pyrogram. If not, see <http://www.gnu.org/licenses/>.
1818

19-
from pyrogram import raw
19+
from typing import Optional
20+
21+
import pyrogram
22+
from pyrogram import raw, types, utils
23+
from pyrogram.errors import MessageIdsEmpty
2024

2125
from ..object import Object
2226

@@ -28,30 +32,55 @@ class SuggestedPostDeclined(Object):
2832
suggested_post_message_id (``int``, *optional*):
2933
Identifier of the message with the suggested post.
3034
35+
suggested_post_message (:obj:`~pyrogram.types.Message`, *optional*):
36+
Message containing the suggested post.
37+
3138
comment (``str``, *optional*):
3239
Comment added by administrator of the channel when the post was declined.
3340
"""
3441
def __init__(
3542
self, *,
36-
suggested_post_message_id: int = None,
37-
comment: str = None
43+
suggested_post_message_id: Optional[int] = None,
44+
suggested_post_message: Optional["types.Message"] = None,
45+
comment: Optional[str] = None
3846
):
3947
super().__init__()
4048

4149
self.suggested_post_message_id = suggested_post_message_id
50+
self.suggested_post_message = suggested_post_message
4251
self.comment = comment
4352

4453
@staticmethod
45-
def _parse(action: "raw.types.MessageActionSuggestedPostApproval", reply_to: "raw.base.MessageReplyHeader") -> "SuggestedPostDeclined":
54+
async def _parse(
55+
client: "pyrogram.Client",
56+
message: "raw.types.MessageService"
57+
) -> "SuggestedPostDeclined":
58+
action: "raw.types.MessageActionSuggestedPostApproval" = message.action
59+
4660
if not isinstance(action, raw.types.MessageActionSuggestedPostApproval):
4761
return None
4862

63+
from_id = utils.get_peer_id(message.from_id)
64+
peer_id = utils.get_peer_id(message.peer_id)
65+
chat_id = peer_id or from_id
66+
4967
suggested_post_message_id = None
68+
suggested_post_message = None
69+
70+
if isinstance(message.reply_to, raw.types.MessageReplyHeader):
71+
suggested_post_message_id = message.reply_to.reply_to_msg_id
5072

51-
if isinstance(reply_to, raw.types.MessageReplyHeader):
52-
suggested_post_message_id = reply_to.reply_to_msg_id
73+
if client.fetch_replies:
74+
try:
75+
suggested_post_message = await client.get_messages(
76+
chat_id=chat_id,
77+
message_ids=suggested_post_message_id
78+
)
79+
except MessageIdsEmpty:
80+
pass
5381

5482
return SuggestedPostDeclined(
5583
suggested_post_message_id=suggested_post_message_id,
84+
suggested_post_message=suggested_post_message,
5685
comment=action.reject_comment or None
5786
)

pyrogram/types/messages_and_media/suggested_post_paid.py

Lines changed: 33 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,11 @@
1616
# You should have received a copy of the GNU Lesser General Public License
1717
# along with Pyrogram. If not, see <http://www.gnu.org/licenses/>.
1818

19-
from pyrogram import raw, types
19+
from typing import Optional
20+
21+
import pyrogram
22+
from pyrogram import raw, types, utils
23+
from pyrogram.errors import MessageIdsEmpty
2024

2125
from ..object import Object
2226

@@ -28,6 +32,9 @@ class SuggestedPostPaid(Object):
2832
suggested_post_message_id (``int``, *optional*):
2933
Identifier of the message with the suggested post.
3034
35+
suggested_post_message (:obj:`~pyrogram.types.Message`, *optional*):
36+
Message containing the suggested post.
37+
3138
amount (``int``, *optional*):
3239
The amount of the currency that was received by the channel in nanotoncoins.
3340
For payments in toncoins only.
@@ -39,26 +46,47 @@ class SuggestedPostPaid(Object):
3946
def __init__(
4047
self, *,
4148
suggested_post_message_id: int = None,
49+
suggested_post_message: Optional["types.Message"] = None,
4250
amount: int = None,
4351
star_amount: "types.StarAmount" = None,
4452
):
4553
super().__init__()
4654

4755
self.suggested_post_message_id = suggested_post_message_id
56+
self.suggested_post_message = suggested_post_message
4857
self.amount = amount
4958
self.star_amount = star_amount
5059

5160
@staticmethod
52-
def _parse(action: "raw.types.MessageActionSuggestedPostSuccess", reply_to: "raw.base.MessageReplyHeader") -> "SuggestedPostPaid":
61+
async def _parse(
62+
client: "pyrogram.Client",
63+
message: "raw.types.MessageService"
64+
) -> "SuggestedPostPaid":
65+
action: "raw.types.MessageActionSuggestedPostSuccess" = message.action
66+
5367
if not isinstance(action, raw.types.MessageActionSuggestedPostSuccess):
5468
return None
5569

70+
from_id = utils.get_peer_id(message.from_id)
71+
peer_id = utils.get_peer_id(message.peer_id)
72+
chat_id = peer_id or from_id
73+
5674
suggested_post_message_id = None
75+
suggested_post_message = None
5776
amount = None
5877
star_amount = None
5978

60-
if isinstance(reply_to, raw.types.MessageReplyHeader):
61-
suggested_post_message_id = reply_to.reply_to_msg_id
79+
if isinstance(message.reply_to, raw.types.MessageReplyHeader):
80+
suggested_post_message_id = message.reply_to.reply_to_msg_id
81+
82+
if client.fetch_replies:
83+
try:
84+
suggested_post_message = await client.get_messages(
85+
chat_id=chat_id,
86+
message_ids=suggested_post_message_id
87+
)
88+
except MessageIdsEmpty:
89+
pass
6290

6391
if isinstance(action.price, raw.types.StarsTonAmount):
6492
amount = action.price.ton_amount
@@ -67,6 +95,7 @@ def _parse(action: "raw.types.MessageActionSuggestedPostSuccess", reply_to: "raw
6795

6896
return SuggestedPostPaid(
6997
suggested_post_message_id=suggested_post_message_id,
98+
suggested_post_message=suggested_post_message,
7099
amount=amount,
71100
star_amount=star_amount
72101
)

0 commit comments

Comments
 (0)