Rapptz c32567ea81 Refactor TranslationContext to be more useful
The previous enum was good at accomplishing dynamic key generation for
a few cases, but it fell short in others:

1. It could not discern group names and command names
2. It could not give you more contextual data such as the full object
   currently being translated.

On top of that, the context being a required parameter for
Translator.translate meant that it wouldn't be possible to re-use the
translator for other use cases outside of the rigid ones defined in the
library.

To alleviate these concerns, new enum attributes were added along with
a richer type for obtaining even more context.
2022-08-09 10:41:45 -04:00

744 lines
15 KiB
ReStructuredText

.. currentmodule:: discord
Interactions API Reference
============================
The following section outlines the API of interactions, as implemented by the library.
For documentation about the rest of the library, check :doc:`/api`.
Models
--------
Similar to :ref:`discord_api_models`, these are not meant to be constructed by the user.
Interaction
~~~~~~~~~~~~
.. attributetable:: Interaction
.. autoclass:: Interaction()
:members:
InteractionResponse
~~~~~~~~~~~~~~~~~~~~
.. attributetable:: InteractionResponse
.. autoclass:: InteractionResponse()
:members:
InteractionMessage
~~~~~~~~~~~~~~~~~~~
.. attributetable:: InteractionMessage
.. autoclass:: InteractionMessage()
:members:
:inherited-members:
MessageInteraction
~~~~~~~~~~~~~~~~~~~
.. attributetable:: MessageInteraction
.. autoclass:: MessageInteraction()
:members:
Component
~~~~~~~~~~
.. attributetable:: Component
.. autoclass:: Component()
:members:
ActionRow
~~~~~~~~~~
.. attributetable:: ActionRow
.. autoclass:: ActionRow()
:members:
Button
~~~~~~~
.. attributetable:: Button
.. autoclass:: Button()
:members:
:inherited-members:
SelectMenu
~~~~~~~~~~~
.. attributetable:: SelectMenu
.. autoclass:: SelectMenu()
:members:
:inherited-members:
TextInput
~~~~~~~~~~
.. attributetable:: TextInput
.. autoclass:: TextInput()
:members:
:inherited-members:
AppCommand
~~~~~~~~~~~
.. attributetable:: discord.app_commands.AppCommand
.. autoclass:: discord.app_commands.AppCommand()
:members:
AppCommandGroup
~~~~~~~~~~~~~~~~
.. attributetable:: discord.app_commands.AppCommandGroup
.. autoclass:: discord.app_commands.AppCommandGroup()
:members:
AppCommandChannel
~~~~~~~~~~~~~~~~~~
.. attributetable:: discord.app_commands.AppCommandChannel
.. autoclass:: discord.app_commands.AppCommandChannel()
:members:
AppCommandThread
~~~~~~~~~~~~~~~~~
.. attributetable:: discord.app_commands.AppCommandThread
.. autoclass:: discord.app_commands.AppCommandThread()
:members:
AppCommandPermissions
~~~~~~~~~~~~~~~~~~~~~~
.. attributetable:: discord.app_commands.AppCommandPermissions
.. autoclass:: discord.app_commands.AppCommandPermissions()
:members:
GuildAppCommandPermissions
~~~~~~~~~~~~~~~~~~~~~~~~~~~
.. attributetable:: discord.app_commands.GuildAppCommandPermissions
.. autoclass:: discord.app_commands.GuildAppCommandPermissions()
:members:
Argument
~~~~~~~~~~
.. attributetable:: discord.app_commands.Argument
.. autoclass:: discord.app_commands.Argument()
:members:
AllChannels
~~~~~~~~~~~~
.. attributetable:: discord.app_commands.AllChannels
.. autoclass:: discord.app_commands.AllChannels()
:members:
Data Classes
--------------
Similar to :ref:`discord_api_data`, these can be received and constructed by users.
SelectOption
~~~~~~~~~~~~~
.. attributetable:: SelectOption
.. autoclass:: SelectOption
:members:
Choice
~~~~~~~
.. attributetable:: discord.app_commands.Choice
.. autoclass:: discord.app_commands.Choice
:members:
Enumerations
-------------
.. class:: InteractionType
Specifies the type of :class:`Interaction`.
.. versionadded:: 2.0
.. attribute:: ping
Represents Discord pinging to see if the interaction response server is alive.
.. attribute:: application_command
Represents a slash command interaction.
.. attribute:: component
Represents a component based interaction, i.e. using the Discord Bot UI Kit.
.. attribute:: autocomplete
Represents an auto complete interaction.
.. attribute:: modal_submit
Represents submission of a modal interaction.
.. class:: InteractionResponseType
Specifies the response type for the interaction.
.. versionadded:: 2.0
.. attribute:: pong
Pongs the interaction when given a ping.
See also :meth:`InteractionResponse.pong`
.. attribute:: channel_message
Respond to the interaction with a message.
See also :meth:`InteractionResponse.send_message`
.. attribute:: deferred_channel_message
Responds to the interaction with a message at a later time.
See also :meth:`InteractionResponse.defer`
.. attribute:: deferred_message_update
Acknowledges the component interaction with a promise that
the message will update later (though there is no need to actually update the message).
See also :meth:`InteractionResponse.defer`
.. attribute:: message_update
Responds to the interaction by editing the message.
See also :meth:`InteractionResponse.edit_message`
.. attribute:: autocomplete_result
Responds to the autocomplete interaction with suggested choices.
See also :meth:`InteractionResponse.autocomplete`
.. attribute:: modal
Responds to the interaction with a modal.
See also :meth:`InteractionResponse.send_modal`
.. class:: ComponentType
Represents the component type of a component.
.. versionadded:: 2.0
.. attribute:: action_row
Represents the group component which holds different components in a row.
.. attribute:: button
Represents a button component.
.. attribute:: select
Represents a select component.
.. attribute:: text_input
Represents a text box component.
.. class:: ButtonStyle
Represents the style of the button component.
.. versionadded:: 2.0
.. attribute:: primary
Represents a blurple button for the primary action.
.. attribute:: secondary
Represents a grey button for the secondary action.
.. attribute:: success
Represents a green button for a successful action.
.. attribute:: danger
Represents a red button for a dangerous action.
.. attribute:: link
Represents a link button.
.. attribute:: blurple
An alias for :attr:`primary`.
.. attribute:: grey
An alias for :attr:`secondary`.
.. attribute:: gray
An alias for :attr:`secondary`.
.. attribute:: green
An alias for :attr:`success`.
.. attribute:: red
An alias for :attr:`danger`.
.. attribute:: url
An alias for :attr:`link`.
.. class:: TextStyle
Represents the style of the text box component.
.. versionadded:: 2.0
.. attribute:: short
Represents a short text box.
.. attribute:: paragraph
Represents a long form text box.
.. attribute:: long
An alias for :attr:`paragraph`.
.. class:: AppCommandOptionType
The application command's option type. This is usually the type of parameter an application command takes.
.. versionadded:: 2.0
.. attribute:: subcommand
A subcommand.
.. attribute:: subcommand_group
A subcommand group.
.. attribute:: string
A string parameter.
.. attribute:: integer
A integer parameter.
.. attribute:: boolean
A boolean parameter.
.. attribute:: user
A user parameter.
.. attribute:: channel
A channel parameter.
.. attribute:: role
A role parameter.
.. attribute:: mentionable
A mentionable parameter.
.. attribute:: number
A number parameter.
.. attribute:: attachment
An attachment parameter.
.. class:: AppCommandType
The type of application command.
.. versionadded:: 2.0
.. attribute:: chat_input
A slash command.
.. attribute:: user
A user context menu command.
.. attribute:: message
A message context menu command.
.. class:: AppCommandPermissionType
The application command's permission type.
.. versionadded:: 2.0
.. attribute:: role
The permission is for a role.
.. attribute:: channel
The permission is for one or all channels.
.. attribute:: user
The permission is for a user.
.. _discord_ui_kit:
Bot UI Kit
-------------
The library has helpers to aid create component-based UIs. These are all in the ``discord.ui`` package.
View
~~~~~~~
.. attributetable:: discord.ui.View
.. autoclass:: discord.ui.View
:members:
Modal
~~~~~~
.. attributetable:: discord.ui.Modal
.. autoclass:: discord.ui.Modal
:members:
:inherited-members:
Item
~~~~~~~
.. attributetable:: discord.ui.Item
.. autoclass:: discord.ui.Item
:members:
Button
~~~~~~~
.. attributetable:: discord.ui.Button
.. autoclass:: discord.ui.Button
:members:
:inherited-members:
.. autofunction:: discord.ui.button
Select
~~~~~~~
.. attributetable:: discord.ui.Select
.. autoclass:: discord.ui.Select
:members:
:inherited-members:
.. autofunction:: discord.ui.select
TextInput
~~~~~~~~~~
.. attributetable:: discord.ui.TextInput
.. autoclass:: discord.ui.TextInput
:members:
:inherited-members:
.. _discord_app_commands:
Application Commands
----------------------
The library has helpers to aid in creation of application commands. These are all in the ``discord.app_commands`` package.
CommandTree
~~~~~~~~~~~~
.. attributetable:: discord.app_commands.CommandTree
.. autoclass:: discord.app_commands.CommandTree
:members:
Commands
~~~~~~~~~
Command
++++++++
.. attributetable:: discord.app_commands.Command
.. autoclass:: discord.app_commands.Command
:members:
Parameter
++++++++++
.. attributetable:: discord.app_commands.Parameter
.. autoclass:: discord.app_commands.Parameter()
:members:
ContextMenu
++++++++++++
.. attributetable:: discord.app_commands.ContextMenu
.. autoclass:: discord.app_commands.ContextMenu
:members:
Group
++++++
.. attributetable:: discord.app_commands.Group
.. autoclass:: discord.app_commands.Group
:members:
Decorators
~~~~~~~~~~~
.. autofunction:: discord.app_commands.command
:decorator:
.. autofunction:: discord.app_commands.context_menu
:decorator:
.. autofunction:: discord.app_commands.describe
:decorator:
.. autofunction:: discord.app_commands.rename
:decorator:
.. autofunction:: discord.app_commands.choices
:decorator:
.. autofunction:: discord.app_commands.autocomplete
:decorator:
.. autofunction:: discord.app_commands.guilds
:decorator:
.. autofunction:: discord.app_commands.guild_only
:decorator:
.. autofunction:: discord.app_commands.default_permissions
:decorator:
Checks
~~~~~~~
.. autofunction:: discord.app_commands.check
:decorator:
.. autofunction:: discord.app_commands.checks.has_role
:decorator:
.. autofunction:: discord.app_commands.checks.has_any_role
:decorator:
.. autofunction:: discord.app_commands.checks.has_permissions
:decorator:
.. autofunction:: discord.app_commands.checks.bot_has_permissions
:decorator:
.. autofunction:: discord.app_commands.checks.cooldown
:decorator:
.. autofunction:: discord.app_commands.checks.dynamic_cooldown
:decorator:
Cooldown
~~~~~~~~~
.. attributetable:: discord.app_commands.Cooldown
.. autoclass:: discord.app_commands.Cooldown
:members:
Namespace
~~~~~~~~~~
.. attributetable:: discord.app_commands.Namespace
.. autoclass:: discord.app_commands.Namespace()
:members:
Transformers
~~~~~~~~~~~~~
Transformer
++++++++++++
.. attributetable:: discord.app_commands.Transformer
.. autoclass:: discord.app_commands.Transformer
:members:
Transform
++++++++++
.. attributetable:: discord.app_commands.Transform
.. autoclass:: discord.app_commands.Transform
:members:
Range
++++++
.. attributetable:: discord.app_commands.Range
.. autoclass:: discord.app_commands.Range
:members:
Translations
~~~~~~~~~~~~~
Translator
+++++++++++
.. attributetable:: discord.app_commands.Translator
.. autoclass:: discord.app_commands.Translator
:members:
locale_str
+++++++++++
.. attributetable:: discord.app_commands.locale_str
.. autoclass:: discord.app_commands.locale_str
:members:
TranslationContext
+++++++++++++++++++
.. attributetable:: discord.app_commands.TranslationContext
.. autoclass:: discord.app_commands.TranslationContext
:members:
TranslationContextLocation
+++++++++++++++++++++++++++
.. class:: TranslationContextLocation
:module: discord.app_commands
An enum representing the location context that the translation occurs in when requested for translation.
.. versionadded:: 2.0
.. attribute:: command_name
The translation involved a command name.
.. attribute:: command_description
The translation involved a command description.
.. attribute:: group_name
The translation involved a group name.
.. attribute:: group_description
The translation involved a group description.
.. attribute:: parameter_name
The translation involved a parameter name.
.. attribute:: parameter_description
The translation involved a parameter description.
.. attribute:: choice_name
The translation involved a choice name.
.. attribute:: other
The translation involved something else entirely. This is useful for running
:meth:`Translator.translate` for custom usage.
Exceptions
~~~~~~~~~~~
.. autoexception:: discord.app_commands.AppCommandError
:members:
.. autoexception:: discord.app_commands.CommandInvokeError
:members:
.. autoexception:: discord.app_commands.TransformerError
:members:
.. autoexception:: discord.app_commands.TranslationError
:members:
.. autoexception:: discord.app_commands.CheckFailure
:members:
.. autoexception:: discord.app_commands.NoPrivateMessage
:members:
.. autoexception:: discord.app_commands.MissingRole
:members:
.. autoexception:: discord.app_commands.MissingAnyRole
:members:
.. autoexception:: discord.app_commands.MissingPermissions
:members:
.. autoexception:: discord.app_commands.BotMissingPermissions
:members:
.. autoexception:: discord.app_commands.CommandOnCooldown
:members:
.. autoexception:: discord.app_commands.CommandLimitReached
:members:
.. autoexception:: discord.app_commands.CommandAlreadyRegistered
:members:
.. autoexception:: discord.app_commands.CommandSignatureMismatch
:members:
.. autoexception:: discord.app_commands.CommandNotFound
:members:
.. autoexception:: discord.app_commands.MissingApplicationID
:members:
Exception Hierarchy
~~~~~~~~~~~~~~~~~~~~
.. exception_hierarchy::
- :exc:`~discord.DiscordException`
- :exc:`~discord.app_commands.AppCommandError`
- :exc:`~discord.app_commands.CommandInvokeError`
- :exc:`~discord.app_commands.TransformerError`
- :exc:`~discord.app_commands.TranslationError`
- :exc:`~discord.app_commands.CheckFailure`
- :exc:`~discord.app_commands.NoPrivateMessage`
- :exc:`~discord.app_commands.MissingRole`
- :exc:`~discord.app_commands.MissingAnyRole`
- :exc:`~discord.app_commands.MissingPermissions`
- :exc:`~discord.app_commands.BotMissingPermissions`
- :exc:`~discord.app_commands.CommandOnCooldown`
- :exc:`~discord.app_commands.CommandLimitReached`
- :exc:`~discord.app_commands.CommandAlreadyRegistered`
- :exc:`~discord.app_commands.CommandSignatureMismatch`
- :exc:`~discord.app_commands.CommandNotFound`
- :exc:`~discord.app_commands.MissingApplicationID`