Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Adds premium interaction docs #6875

Merged
merged 22 commits into from
Jun 17, 2024
Merged

Conversation

goatslacker
Copy link
Member

@goatslacker goatslacker commented May 16, 2024

  • New entry in Changelog
  • Documents new ButtonStyle.Premium
  • Deprecates PREMIUM_REQUIRED interaction response type
  • Adds new button design guidelines

@goatslacker goatslacker added the not released This issue or PR is referencing a change that is not yet widely released and/or subject to change. label May 16, 2024
@goatslacker goatslacker requested a review from colinloretz May 16, 2024 19:43
Co-authored-by: MCausc78 <mcausc78@gmail.com>
@@ -36,6 +36,33 @@ When a user subscribes to your app, there are a few things you will need to impl

### Gating Premium Interactions

Each interaction payload includes an `entitlements` field containing an array of full [entitlement objects](#DOCS_MONETIZATION_ENTITLEMENTS/entitlement-object). You can use this field to determine if the user or guild is subscribed to your app. If the user or guild is not subscribed and you wish to present them with a means to do so you can use a [button](#DOCS_INTERACTIONS_MESSAGE_COMPONENTS/buttons) with a [premium style](#DOCS_INTERACTIONS_MESSAGE_COMPONENTS/button-object-button-styles) and a `sku_id` attached. You may also use these buttons to present users with options to make a [One-Time Purchase](#DOCS_MONETIZATION_ONE-TIME_PURCHASES).

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This gets restated below, under Type 10 Interaction Response:

If someone is already subscribed, this command will show the upgrade prompt with a disabled upgrade button. In order to avoid this, your interaction handler should check to see if the user or guild has an active entitlement for your SKU.
Each interaction payload includes an `entitlements` field containing an array of full [entitlement objects](#DOCS_MONETIZATION_ENTITLEMENTS/entitlement-object).
You can use this field to determine if the user or guild is subscribed to your app.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

yeah it's relevant in both cases.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

yeah it's relevant in both cases.

it just seems redundant, since it's already started once here and then again under the sub header on the same page

docs/Change_Log.md Outdated Show resolved Hide resolved
docs/Change_Log.md Outdated Show resolved Hide resolved
docs/interactions/Message_Components.md Outdated Show resolved Hide resolved
docs/interactions/Receiving_and_Responding.md Outdated Show resolved Hide resolved
@MCausc78
Copy link
Contributor

Why custom_id is required when using style 6? Just curious, if docs say only "sku_id" is required.

Traceback (most recent call last):
  File "/home/***/venv/lib/python3.10/site-packages/jishaku/features/python.py", line 190, in jsk_python
    async for send, result in AsyncSender(executor):  # type: ignore
  File "/home/***/venv/lib/python3.10/site-packages/jishaku/functools.py", line 124, in _internal
    value = await base.asend(self.send_value)
  File "/home/***/venv/lib/python3.10/site-packages/jishaku/repl/compilation.py", line 210, in traverse
    async for send, result in AsyncSender(func_g(*self.args)):  # type: ignore
  File "/home/***/venv/lib/python3.10/site-packages/jishaku/functools.py", line 124, in _internal
    value = await base.asend(self.send_value)
  File "<repl>", line 15, in _repl_coroutine
    await _bot.http.request(
  File "/home/***/venv/lib/python3.10/site-packages/discord/http.py", line 758, in request
    raise HTTPException(response, data)
discord.errors.HTTPException: 400 Bad Request (error code: 50035): Invalid Form Body
In components.0.components.0.sku_id: Invalid SKU
In components.0.components.0.custom_id: A custom id is required
components = [
  {
    'type': 1, 'components': [
      {
        'type': 2,
        'style': 6,
        'sku_id': '521847234246082599', # nitro sku id (maybe)
        'label': 'wdhsjshjs',
      }
    ]
  }
]

await _bot.http.request(
  discord.http.Route('POST',
    '/channels/{channel_id}/messages',
    channel_id=_channel.id
  ), json={
  'content': 'Hello world',
  'components': components
})

(Unverified bot)

@advaith1
Copy link
Contributor

Why are custom labels not supported for premium buttons? That's unfortunate for bots that want to provide multiple options in the response

@Shuu-37
Copy link

Shuu-37 commented May 28, 2024

Why are custom labels not supported for premium buttons? That's unfortunate for bots that want to provide multiple options in the response

They can still have multiple buttons in a response. But we want clarity in each of the premium buttons and requiring sku_name & price is the best path forward right now. It's possible we can open this up in the future to not require sku name & price.

goatslacker and others added 2 commits May 29, 2024 17:52
Co-authored-by: codershiba <155646804+codershiba@users.noreply.github.com>
goatslacker and others added 4 commits June 13, 2024 17:27
Co-authored-by: advaith <advaithj1@gmail.com>
Co-authored-by: Adrian Paschkowski <adrian.paschkowski@ruhr-uni-bochum.de>
Co-authored-by: val.le <81811276+valdotle@users.noreply.github.com>
Co-authored-by: val.le <81811276+valdotle@users.noreply.github.com>
colinloretz and others added 3 commits June 14, 2024 11:15
Co-authored-by: val.le <81811276+valdotle@users.noreply.github.com>
Co-authored-by: val.le <81811276+valdotle@users.noreply.github.com>
@goatslacker goatslacker marked this pull request as ready for review June 14, 2024 20:21
@advaith1
Copy link
Contributor

if the image is being updated, might as well update the other buttons in it too - the green and maybe the red are outdated colors, and the grays are inconsistent

@Shuu-37
Copy link

Shuu-37 commented Jun 15, 2024

if the image is being updated, might as well update the other buttons in it too - the green and maybe the red are outdated colors, and the grays are inconsistent

Agree, I'll get those other colors updated. Thanks Advaith!

@colinloretz colinloretz force-pushed the joshperez/premium-interactions branch from 179dfc2 to 0b7c265 Compare June 17, 2024 17:43
@colinloretz colinloretz merged commit 4853fbc into main Jun 17, 2024
4 checks passed
@colinloretz colinloretz deleted the joshperez/premium-interactions branch June 17, 2024 19:00
@colinloretz colinloretz removed the not released This issue or PR is referencing a change that is not yet widely released and/or subject to change. label Jun 17, 2024
suneettipirneni pushed a commit to twilight-rs/twilight that referenced this pull request Aug 31, 2024
This PR implements the new premium button style.

Refs:
- discord/discord-api-docs#6875
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

8 participants