mirror of
https://github.com/Rapptz/discord.py.git
synced 2025-06-07 12:18:59 +00:00
Add support for one-time purchases
This commit is contained in:
parent
0ee1794c6d
commit
2892401992
@ -796,11 +796,20 @@ class SelectDefaultValueType(Enum):
|
|||||||
|
|
||||||
|
|
||||||
class SKUType(Enum):
|
class SKUType(Enum):
|
||||||
|
durable = 2
|
||||||
|
consumable = 3
|
||||||
subscription = 5
|
subscription = 5
|
||||||
subscription_group = 6
|
subscription_group = 6
|
||||||
|
|
||||||
|
|
||||||
class EntitlementType(Enum):
|
class EntitlementType(Enum):
|
||||||
|
purchase = 1
|
||||||
|
premium_subscription = 2
|
||||||
|
developer_gift = 3
|
||||||
|
test_mode_purchase = 4
|
||||||
|
free_purchase = 5
|
||||||
|
user_gift = 6
|
||||||
|
premium_purchase = 7
|
||||||
application_subscription = 8
|
application_subscription = 8
|
||||||
|
|
||||||
|
|
||||||
|
@ -2454,6 +2454,16 @@ class HTTPClient:
|
|||||||
),
|
),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
def consume_entitlement(self, application_id: Snowflake, entitlement_id: Snowflake) -> Response[None]:
|
||||||
|
return self.request(
|
||||||
|
Route(
|
||||||
|
'POST',
|
||||||
|
'/applications/{application_id}/entitlements/{entitlement_id}/consume',
|
||||||
|
application_id=application_id,
|
||||||
|
entitlement_id=entitlement_id,
|
||||||
|
),
|
||||||
|
)
|
||||||
|
|
||||||
def create_entitlement(
|
def create_entitlement(
|
||||||
self, application_id: Snowflake, sku_id: Snowflake, owner_id: Snowflake, owner_type: sku.EntitlementOwnerType
|
self, application_id: Snowflake, sku_id: Snowflake, owner_id: Snowflake, owner_type: sku.EntitlementOwnerType
|
||||||
) -> Response[sku.Entitlement]:
|
) -> Response[sku.Entitlement]:
|
||||||
|
@ -126,6 +126,8 @@ class Entitlement:
|
|||||||
A UTC date which entitlement is no longer valid. Not present when using test entitlements.
|
A UTC date which entitlement is no longer valid. Not present when using test entitlements.
|
||||||
guild_id: Optional[:class:`int`]
|
guild_id: Optional[:class:`int`]
|
||||||
The ID of the guild that is granted access to the entitlement
|
The ID of the guild that is granted access to the entitlement
|
||||||
|
consumed: :class:`bool`
|
||||||
|
For consumable items, whether the entitlement has been consumed.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
__slots__ = (
|
__slots__ = (
|
||||||
@ -139,6 +141,7 @@ class Entitlement:
|
|||||||
'starts_at',
|
'starts_at',
|
||||||
'ends_at',
|
'ends_at',
|
||||||
'guild_id',
|
'guild_id',
|
||||||
|
'consumed',
|
||||||
)
|
)
|
||||||
|
|
||||||
def __init__(self, state: ConnectionState, data: EntitlementPayload):
|
def __init__(self, state: ConnectionState, data: EntitlementPayload):
|
||||||
@ -152,6 +155,7 @@ class Entitlement:
|
|||||||
self.starts_at: Optional[datetime] = utils.parse_time(data.get('starts_at', None))
|
self.starts_at: Optional[datetime] = utils.parse_time(data.get('starts_at', None))
|
||||||
self.ends_at: Optional[datetime] = utils.parse_time(data.get('ends_at', None))
|
self.ends_at: Optional[datetime] = utils.parse_time(data.get('ends_at', None))
|
||||||
self.guild_id: Optional[int] = utils._get_as_snowflake(data, 'guild_id')
|
self.guild_id: Optional[int] = utils._get_as_snowflake(data, 'guild_id')
|
||||||
|
self.consumed: bool = data.get('consumed', False)
|
||||||
|
|
||||||
def __repr__(self) -> str:
|
def __repr__(self) -> str:
|
||||||
return f'<Entitlement id={self.id} type={self.type!r} user_id={self.user_id}>'
|
return f'<Entitlement id={self.id} type={self.type!r} user_id={self.user_id}>'
|
||||||
@ -179,6 +183,26 @@ class Entitlement:
|
|||||||
return False
|
return False
|
||||||
return utils.utcnow() >= self.ends_at
|
return utils.utcnow() >= self.ends_at
|
||||||
|
|
||||||
|
async def consume(self) -> None:
|
||||||
|
"""|coro|
|
||||||
|
|
||||||
|
Marks a one-time purchase entitlement as consumed.
|
||||||
|
|
||||||
|
Raises
|
||||||
|
-------
|
||||||
|
MissingApplicationID
|
||||||
|
The application ID could not be found.
|
||||||
|
NotFound
|
||||||
|
The entitlement could not be found.
|
||||||
|
HTTPException
|
||||||
|
Consuming the entitlement failed.
|
||||||
|
"""
|
||||||
|
|
||||||
|
if self.application_id is None:
|
||||||
|
raise MissingApplicationID
|
||||||
|
|
||||||
|
await self._state.http.consume_entitlement(self.application_id, self.id)
|
||||||
|
|
||||||
async def delete(self) -> None:
|
async def delete(self) -> None:
|
||||||
"""|coro|
|
"""|coro|
|
||||||
|
|
||||||
|
@ -46,7 +46,8 @@ class Entitlement(TypedDict):
|
|||||||
deleted: bool
|
deleted: bool
|
||||||
starts_at: NotRequired[str]
|
starts_at: NotRequired[str]
|
||||||
ends_at: NotRequired[str]
|
ends_at: NotRequired[str]
|
||||||
guild_id: Optional[str]
|
guild_id: NotRequired[str]
|
||||||
|
consumed: NotRequired[bool]
|
||||||
|
|
||||||
|
|
||||||
EntitlementOwnerType = Literal[1, 2]
|
EntitlementOwnerType = Literal[1, 2]
|
||||||
|
36
docs/api.rst
36
docs/api.rst
@ -3506,6 +3506,14 @@ of :class:`enum.Enum`.
|
|||||||
|
|
||||||
.. versionadded:: 2.4
|
.. versionadded:: 2.4
|
||||||
|
|
||||||
|
.. attribute:: durable
|
||||||
|
|
||||||
|
The SKU is a durable one-time purchase.
|
||||||
|
|
||||||
|
.. attribute:: consumable
|
||||||
|
|
||||||
|
The SKU is a consumable one-time purchase.
|
||||||
|
|
||||||
.. attribute:: subscription
|
.. attribute:: subscription
|
||||||
|
|
||||||
The SKU is a recurring subscription.
|
The SKU is a recurring subscription.
|
||||||
@ -3521,6 +3529,34 @@ of :class:`enum.Enum`.
|
|||||||
|
|
||||||
.. versionadded:: 2.4
|
.. versionadded:: 2.4
|
||||||
|
|
||||||
|
.. attribute:: purchase
|
||||||
|
|
||||||
|
The entitlement was purchased by the user.
|
||||||
|
|
||||||
|
.. attribute:: premium_subscription
|
||||||
|
|
||||||
|
The entitlement is for a nitro subscription.
|
||||||
|
|
||||||
|
.. attribute:: developer_gift
|
||||||
|
|
||||||
|
The entitlement was gifted by the developer.
|
||||||
|
|
||||||
|
.. attribute:: test_mode_purchase
|
||||||
|
|
||||||
|
The entitlement was purchased by a developer in application test mode.
|
||||||
|
|
||||||
|
.. attribute:: free_purchase
|
||||||
|
|
||||||
|
The entitlement was granted, when the SKU was free.
|
||||||
|
|
||||||
|
.. attribute:: user_gift
|
||||||
|
|
||||||
|
The entitlement was gifted by a another user.
|
||||||
|
|
||||||
|
.. attribute:: premium_purchase
|
||||||
|
|
||||||
|
The entitlement was claimed for free by a nitro subscriber.
|
||||||
|
|
||||||
.. attribute:: application_subscription
|
.. attribute:: application_subscription
|
||||||
|
|
||||||
The entitlement was purchased as an app subscription.
|
The entitlement was purchased as an app subscription.
|
||||||
|
Loading…
x
Reference in New Issue
Block a user