You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: guide/docs/popular-topics/monetization.mdx
+42-15Lines changed: 42 additions & 15 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -10,37 +10,41 @@ Monetization is limited to **verified** apps/bots.
10
10
11
11
:::
12
12
13
-
Premium Apps offer developers the ability to monetize their application through monthly recurring subscriptions, natively on Discord.
14
-
This allows you to e.g. restrict specific commands or other functionality to premium users/guilds.
13
+
Premium Apps offer developers the ability to monetize their application through either **monthly recurring subscriptions** or **one-time purchases**, natively on Discord.
14
+
This allows you to e.g. limit specific commands or other functionality to premium users/guilds.
15
15
16
16
Not all applications are eligible - your app must be verified, part of a developer team, and use [slash commands](/interactions/slash-commands) or the privileged `Message Content` intent, among other things.
17
17
18
18
## Initial setup
19
19
20
20
To get started, visit the [official documentation](https://discord.com/developers/docs/monetization/overview) to see the full list of requirements, and configure your app for monetization by following the steps outlined there.
21
21
22
-
## Retrieving entitlements
22
+
## Entitlements
23
23
24
-
Entitlements represent access to the premium functionality of your application. These can be granted to users or guilds, depending on how you set up monetization in the previous step, and contain a start/end date.
24
+
Entitlements represent access to the premium functionality of your application. These can be granted to users or guilds, depending on the type of SKU you set up in the previous step.
25
25
26
26
In [interactions](/interactions) (e.g. slash commands), the entitlements for the invoking user/guild are easily accessible using <DocsLinkreference="disnake.Interaction.entitlements" />.
27
27
28
28
Outside of interactions, you can fetch entitlements using <DocsLinkreference="disnake.Client.entitlements">Client.entitlements()</DocsLink>, optionally only fetching entitlements of a specific user or guild. Note that this may include expired entitlements, unless you pass the `exclude_ended` parameter.
29
29
30
30
To check whether an entitlement is still active, you can use <DocsLinkreference="disnake.Entitlement.is_active">Entitlement.is_active()</DocsLink>.
31
31
32
-
## Premium interactions
32
+
###Premium interactions
33
33
34
34
This is usually the main way to provide premium functionality.
35
-
Application commands are not preemptively marked as "premium-only" - instead, you may respond to interactions with a new response type: <DocsLinkreference="disnake.InteractionResponse.require_premium" />.
36
-
37
-
This will display an ephemeral message to the invoking user, prompting them to upgrade:
35
+
Commands are not preemptively marked as "premium-only" - instead, you may respond with a premium button, prompting users to upgrade/purchase a specific SKU:
Whenever users subscribe or renew a subscription with your app, you will receive an <DocsLinkreference="disnake.on_entitlement_create" /> or <DocsLinkreference="disnake.on_entitlement_update" /> event respectively.
59
-
In the case of renewals, the <DocsLinkreference="disnake.Entitlement.ends_at">ends_at</DocsLink> attribute of the entitlement you receive from the event will reflect the new expiry date.
62
+
Whenever users make a purchase in your app, you will receive an <DocsLinkreference="disnake.on_entitlement_create" /> event. For subscriptions, entitlements are granted indefinitely until the user decides to cancel their subscription, in which case you will receive a <DocsLinkreference="disnake.on_entitlement_update" /> event when the subscription ends.
63
+
Note that entitlement events are not emitted immediately when a subscription is canceled, only at the end of the subscription period. In this case, the entitlement's <DocsLinkreference="disnake.Entitlement.ends_at">ends_at</DocsLink> attribute reflects the date indicating when the subscription (and entitlement) ended.
60
64
61
65
:::note
62
66
While an <DocsLinkreference="disnake.on_entitlement_delete" /> event also exists, it will not fire when a subscription expires; it only occurs e.g. in case of refunds or due to manual removal by Discord.
63
67
:::
64
68
65
-
## Testing entitlements
69
+
## Subscriptions
70
+
71
+
Subscriptions are used for products with recurring monthly payments. These should not be used to determine access to premium features, they are only meant for lifecycle management purposes.
72
+
73
+
Similarly to entitlements, you will receive an <DocsLinkreference="disnake.on_subscription_create" /> event whenever a subscription is created. An <DocsLinkreference="disnake.on_subscription_update" /> event is emitted when a user cancels their subscription; canceled subscriptions remain valid until the end of the subscription period. Further details about subscription lifecycles can be found in the [official documentation](https://discord.com/developers/docs/monetization/implementing-app-subscriptions#supporting-subscriptions).
74
+
75
+
To obtain the subscriptions of a user to a particular SKU, you can use <DocsLinkreference="disnake.SKU.subscriptions" />.
76
+
77
+
### Testing subscriptions
66
78
67
-
You can create test entitlements using <DocsLinkreference="disnake.Client.create_entitlement" /> and delete them using <DocsLinkreference="disnake.Entitlement.delete" />, which allows you to test your implementation in various subscription states. These entitlements do not expire and therefore have no start/end date.
79
+
For subscription SKUs, you can create test entitlements using <DocsLinkreference="disnake.Client.create_entitlement" /> and delete them using <DocsLinkreference="disnake.Entitlement.delete" />, which allows you to test your implementation in various subscription states. These entitlements do not expire and therefore have no start/end date.
68
80
69
81
If you want to test the full payment flow, you can go through the same upgrade steps as any other user of your application would - all members of the app's associated team automatically receive a 100% discount on the subscription. Note that you cannot delete these entitlements, unlike the test entitlements mentioned before.
82
+
83
+
## One-time purchases
84
+
85
+
One-time purchases can be durable (i.e. permanent) or consumable.
86
+
Just like subscriptions, access to these items is represented by entitlements, which you can receive in entitlement events or interactions.
87
+
88
+
Users may only have one unconsumed entitlement for an SKU at a time. To consume an entitlement, use <DocsLinkreference="disnake.Entitlement.consume" /> and process/store the state of the item in your application where applicable.
89
+
90
+
For further lifecycle details and other considerations, visit the [official documentation](https://discord.com/developers/docs/monetization/implementing-one-time-purchases#how-onetime-purchases-work) for one-time purchases.
91
+
92
+
### Testing one-time purchases
93
+
94
+
Unlike subscriptions, one-time purchases may only be tested through the Application Test Mode, not via test entitlements.
95
+
To test one-time purchases without being charged, [enable Application Test Mode](https://discord.com/developers/docs/monetization/implementing-one-time-purchases#using-application-test-mode) for your app and visit the app's store page.
96
+
Entitlements tied to one-time purchases made this way will have a `type` of <DocsLinkreference="disnake.EntitlementType.test_mode_purchase">test_mode_purchase</DocsLink>.
0 commit comments