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(