diff --git a/pyrogram/types/business/pre_checkout_query.py b/pyrogram/types/business/pre_checkout_query.py index 09f3bdaf..ecf0cfe7 100644 --- a/pyrogram/types/business/pre_checkout_query.py +++ b/pyrogram/types/business/pre_checkout_query.py @@ -17,14 +17,12 @@ # You should have received a copy of the GNU Lesser General Public License # along with Pyrofork. If not, see . -from typing import Union, List, Match, Optional import pyrogram -from pyrogram import raw, enums -from pyrogram import types +from pyrogram import raw, types +from typing import Dict from ..object import Object from ..update import Update -from ... import utils class PreCheckoutQuery(Object, Update): @@ -76,7 +74,11 @@ class PreCheckoutQuery(Object, Update): self.payment_info = payment_info @staticmethod - async def _parse(client: "pyrogram.Client", pre_checkout_query, users) -> "PreCheckoutQuery": + async def _parse( + client: "pyrogram.Client", + pre_checkout_query: "raw.types.UpdateBotPrecheckoutQuery", + users: Dict[int, "raw.types.User"] = None + ) -> "PreCheckoutQuery": # Try to decode pre-checkout query payload into string. If that fails, fallback to bytes instead of decoding by # ignoring/replacing errors, this way, button clicks will still work. try: @@ -95,14 +97,7 @@ class PreCheckoutQuery(Object, Update): name=pre_checkout_query.info.name, phone_number=pre_checkout_query.info.phone, email=pre_checkout_query.info.email, - shipping_address=types.ShippingAddress( - street_line1=pre_checkout_query.info.shipping_address.street_line1, - street_line2=pre_checkout_query.info.shipping_address.street_line2, - city=pre_checkout_query.info.shipping_address.city, - state=pre_checkout_query.info.shipping_address.state, - post_code=pre_checkout_query.info.shipping_address.post_code, - country_code=pre_checkout_query.info.shipping_address.country_iso2 - ) + shipping_address=types.ShippingAddress._parse(pre_checkout_query.info.shipping_address) ) if pre_checkout_query.info else None, client=client ) diff --git a/pyrogram/types/business/shipping_address.py b/pyrogram/types/business/shipping_address.py index 0b35f301..2f637288 100644 --- a/pyrogram/types/business/shipping_address.py +++ b/pyrogram/types/business/shipping_address.py @@ -17,6 +17,8 @@ # You should have received a copy of the GNU Lesser General Public License # along with Pyrofork. If not, see . +from pyrogram import raw + from ..object import Object @@ -60,3 +62,17 @@ class ShippingAddress(Object): self.state = state self.post_code = post_code self.country_code = country_code + + @staticmethod + def _parse(shipping_address: "raw.types.raw.types.PostAddress") -> "ShippingAddress": + if shipping_address is None: + return None + + return ShippingAddress( + street_line1=shipping_address.street_line1, + street_line2=shipping_address.street_line2, + city=shipping_address.city, + state=shipping_address.state, + post_code=shipping_address.post_code, + country_code=shipping_address.country_code + ) diff --git a/pyrogram/types/business/shipping_option.py b/pyrogram/types/business/shipping_option.py index a0fa1934..81f64124 100644 --- a/pyrogram/types/business/shipping_option.py +++ b/pyrogram/types/business/shipping_option.py @@ -1,5 +1,6 @@ # Pyrogram - Telegram MTProto API Client Library for Python # Copyright (C) 2017-present Dan +# Copyright (C) 2022-present Mayuri-Chan # # This file is part of Pyrogram. # diff --git a/pyrogram/types/business/shipping_query.py b/pyrogram/types/business/shipping_query.py index 51926cd9..ca254a23 100644 --- a/pyrogram/types/business/shipping_query.py +++ b/pyrogram/types/business/shipping_query.py @@ -1,5 +1,6 @@ # Pyrogram - Telegram MTProto API Client Library for Python # Copyright (C) 2017-present Dan +# Copyright (C) 2022-present Mayuri-Chan # # This file is part of Pyrogram. # @@ -16,8 +17,6 @@ # You should have received a copy of the GNU Lesser General Public License # along with Pyrogram. If not, see . -from typing import Union, Optional - import pyrogram from pyrogram import raw, types @@ -49,20 +48,20 @@ class ShippingQuery(Object, Update): client: "pyrogram.Client" = None, id: str, from_user: "types.User", - invoice_payload: str, + payload: str, shipping_address: "types.ShippingAddress" = None ): super().__init__(client) self.id = id self.from_user = from_user - self.invoice_payload = invoice_payload + self.payload = payload self.shipping_address = shipping_address @staticmethod async def _parse( client: "pyrogram.Client", - shipping_query: "raw.types.updateBotShippingQuery", + shipping_query: "raw.types.UpdateBotShippingQuery", users: dict ) -> "types.PreCheckoutQuery": # Try to decode pre-checkout query payload into string. If that fails, fallback to bytes instead of decoding by @@ -72,19 +71,12 @@ class ShippingQuery(Object, Update): except (UnicodeDecodeError, AttributeError): payload = shipping_query.payload - return types.PreCheckoutQuery( - id=str(shipping_query.query_id), - from_user=types.User._parse(client, users[shipping_query.user_id]), - invoice_payload=payload, - shipping_address=types.ShippingAddress( - country_code=shipping_query.shipping_address.country_iso2, - state=shipping_query.shipping_address.state, - city=shipping_query.shipping_address.city, - street_line1=shipping_query.shipping_address.street_line1, - street_line2=shipping_query.shipping_address.street_line2, - post_code=shipping_query.shipping_address.post_code - ), - client=client + return ShippingQuery( + client=client, + id=shipping_query.query_id, + from_user=types.User._parse(client, users.get(shipping_query.user_id)), + payload=payload, + shipping_address=types.ShippingAddress._parse(shipping_query.shipping_address) ) async def answer(