hikari.interactions.modal_interactions
#
Models and enums used for Discord's Modals interaction flow.
ModalResponseTypesT
module-attribute
#
ModalResponseTypesT = Literal[
MESSAGE_CREATE,
4,
DEFERRED_MESSAGE_CREATE,
5,
MESSAGE_UPDATE,
7,
DEFERRED_MESSAGE_UPDATE,
6,
]
Type-hint of the response types which are valid for a modal interaction.
The following types are valid for this:
ModalInteraction
#
Bases: MessageResponseMixin[ModalResponseTypesT]
, PremiumResponseMixin
Represents a modal interaction on Discord.
app
class-attribute
instance-attribute
#
Client application that models may use for procedures.
app_permissions
class-attribute
instance-attribute
#
app_permissions: Optional[Permissions] = field(eq=False, hash=False, repr=False)
Permissions the bot has in this interaction's channel if it's in a guild.
application_id
class-attribute
instance-attribute
#
ID of the application this interaction belongs to.
channel_id
class-attribute
instance-attribute
#
ID of the channel this modal interaction event was triggered in.
components
class-attribute
instance-attribute
#
components: Sequence[ModalActionRowComponent] = field(
eq=False, hash=False, repr=True
)
Components in the modal.
custom_id
class-attribute
instance-attribute
#
The custom id of the modal.
entitlements
class-attribute
instance-attribute
#
entitlements: Sequence[Entitlement] = field(eq=False, hash=False, repr=True)
For monetized apps, any entitlements for the invoking user, represents access to SKUs.
guild_id
class-attribute
instance-attribute
#
ID of the guild this modal interaction event was triggered in.
This will be None
for modal interactions triggered in DMs.
guild_locale
class-attribute
instance-attribute
#
The preferred language of the guild this modal interaction was triggered in.
This will be None
for modal interactions triggered in DMs.
Note
This value can usually only be changed if hikari.guilds.GuildFeature.COMMUNITY
is in hikari.guilds.Guild.features
for the guild and will otherwise
default to hikari.locales.Locale.EN_US
.
id
class-attribute
instance-attribute
#
ID of this entity.
locale
class-attribute
instance-attribute
#
The selected language of the user who triggered this modal interaction.
member
class-attribute
instance-attribute
#
member: Optional[InteractionMember] = field(eq=False, hash=False, repr=True)
The member who triggered this modal interaction.
This will be None
for modal interactions triggered in DMs.
Note
This member object comes with the extra field permissions
which
contains the member's permissions in the current channel.
message
class-attribute
instance-attribute
#
The message whose component triggered the modal.
This will be None
if the modal was a response to a command.
token
class-attribute
instance-attribute
#
The interaction's token.
type
class-attribute
instance-attribute
#
type: Union[InteractionType, int] = field(eq=False, repr=True)
The type of interaction this is.
user
class-attribute
instance-attribute
#
The user who triggered this modal interaction.
version
class-attribute
instance-attribute
#
Version of the interaction system this interaction is under.
build_deferred_response
#
build_deferred_response() -> InteractionDeferredBuilder
Get a deferred message response builder for use in the REST server flow.
Note
For interactions received over the gateway
hikari.interactions.modal_interactions.ModalInteraction.create_initial_response
should be used to set the interaction response message.
Note
Unlike hikari.api.special_endpoints.InteractionMessageBuilder
,
the result of this call can be returned as is without any modifications
being made to it.
RETURNS | DESCRIPTION |
---|---|
InteractionDeferredBuilder
|
Deferred interaction message response builder object. |
build_response
#
build_response() -> InteractionMessageBuilder
Get a message response builder for use in the REST server flow.
Note
For interactions received over the gateway
hikari.interactions.modal_interactions.ModalInteraction.create_initial_response
should be used to set the interaction response message.
Examples:
async def handle_modal_interaction(interaction: ModalInteraction) -> InteractionMessageBuilder:
return (
interaction
.build_response()
.add_embed(Embed(description="Hi there"))
.set_content("Konnichiwa")
)
RETURNS | DESCRIPTION |
---|---|
InteractionMessageBuilder
|
Interaction message response builder object. |
create_initial_response
async
#
create_initial_response(
response_type: _CommandResponseTypesT,
content: UndefinedOr[Any] = undefined.UNDEFINED,
*,
flags: Union[int, MessageFlag, UndefinedType] = undefined.UNDEFINED,
tts: UndefinedOr[bool] = undefined.UNDEFINED,
attachment: UndefinedNoneOr[Resourceish] = undefined.UNDEFINED,
attachments: UndefinedNoneOr[Sequence[Resourceish]] = undefined.UNDEFINED,
component: UndefinedNoneOr[ComponentBuilder] = undefined.UNDEFINED,
components: UndefinedNoneOr[
Sequence[ComponentBuilder]
] = undefined.UNDEFINED,
embed: UndefinedNoneOr[Embed] = undefined.UNDEFINED,
embeds: UndefinedNoneOr[Sequence[Embed]] = undefined.UNDEFINED,
mentions_everyone: UndefinedOr[bool] = undefined.UNDEFINED,
user_mentions: UndefinedOr[
Union[SnowflakeishSequence[PartialUser], bool]
] = undefined.UNDEFINED,
role_mentions: UndefinedOr[
Union[SnowflakeishSequence[PartialRole], bool]
] = undefined.UNDEFINED
) -> None
Create the initial response for this interaction.
Warning
Calling this on an interaction which already has an initial
response will result in this raising a hikari.errors.NotFoundError
.
This includes if the REST interaction server has already responded
to the request.
PARAMETER | DESCRIPTION |
---|---|
response_type |
The type of interaction response this is.
TYPE:
|
PARAMETER | DESCRIPTION |
---|---|
content |
If provided, the message contents. If
If this is a
TYPE:
|
attachment |
If provided, the message attachment. This can be a resource, or string of a path on your computer or a URL.
TYPE:
|
attachments |
If provided, the message attachments. These can be resources, or strings consisting of paths on your computer or URLs.
TYPE:
|
component |
If provided, builder object of the component to include in this message.
TYPE:
|
components |
If provided, a sequence of the component builder objects to include in this message.
TYPE:
|
embed |
If provided, the message embed.
TYPE:
|
embeds |
If provided, the message embeds.
TYPE:
|
flags |
If provided, the message flags this response should have. As of writing the only message flags which can be set here are
TYPE:
|
tts |
If provided, whether the message will be read out by a screen reader using Discord's TTS (text-to-speech) system.
TYPE:
|
mentions_everyone |
If provided, whether the message should parse @everyone/@here mentions.
TYPE:
|
user_mentions |
If provided, and
TYPE:
|
role_mentions |
If provided, and
TYPE:
|
RAISES | DESCRIPTION |
---|---|
ValueError
|
If more than 100 unique objects/entities are passed for
|
TypeError
|
If both |
BadRequestError
|
This may be raised in several discrete situations, such as messages being empty with no embeds; messages with more than 2000 characters in them, embeds that exceed one of the many embed limits; invalid image URLs in embeds. |
UnauthorizedError
|
If you are unauthorized to make the request (invalid/missing token). |
NotFoundError
|
If the interaction is not found or if the interaction's initial response has already been created. |
RateLimitTooLongError
|
Raised in the event that a rate limit occurs that is
longer than |
InternalServerError
|
If an internal error occurs on Discord while handling the request. |
create_premium_required_response
async
#
Create a response by sending a premium upsell.
RAISES | DESCRIPTION |
---|---|
ForbiddenError
|
If you cannot access the target interaction. |
NotFoundError
|
If the initial response isn't found. |
UnauthorizedError
|
If you are unauthorized to make the request (invalid/missing token). |
RateLimitTooLongError
|
Raised in the event that a rate limit occurs that is
longer than |
InternalServerError
|
If an internal error occurs on Discord while handling the request. |
delete_initial_response
async
#
Delete the initial response of this interaction.
RAISES | DESCRIPTION |
---|---|
UnauthorizedError
|
If you are unauthorized to make the request (invalid/missing token). |
NotFoundError
|
If the interaction or response is not found. |
RateLimitTooLongError
|
Raised in the event that a rate limit occurs that is
longer than |
InternalServerError
|
If an internal error occurs on Discord while handling the request. |
delete_message
async
#
delete_message(message: SnowflakeishOr[Message]) -> None
Delete a given message in a given channel.
PARAMETER | DESCRIPTION |
---|---|
message |
The message to delete. This may be the object or the ID of an existing message.
TYPE:
|
RAISES | DESCRIPTION |
---|---|
ValueError
|
If |
UnauthorizedError
|
If you are unauthorized to make the request (invalid/missing token). |
NotFoundError
|
If the webhook or the message are not found. |
RateLimitTooLongError
|
Raised in the event that a rate limit occurs that is
longer than |
InternalServerError
|
If an internal error occurs on Discord while handling the request. |
edit_initial_response
async
#
edit_initial_response(
content: UndefinedNoneOr[Any] = undefined.UNDEFINED,
*,
attachment: UndefinedNoneOr[
Union[Resourceish, Attachment]
] = undefined.UNDEFINED,
attachments: UndefinedNoneOr[
Sequence[Union[Resourceish, Attachment]]
] = undefined.UNDEFINED,
component: UndefinedNoneOr[ComponentBuilder] = undefined.UNDEFINED,
components: UndefinedNoneOr[
Sequence[ComponentBuilder]
] = undefined.UNDEFINED,
embed: UndefinedNoneOr[Embed] = undefined.UNDEFINED,
embeds: UndefinedNoneOr[Sequence[Embed]] = undefined.UNDEFINED,
mentions_everyone: UndefinedOr[bool] = undefined.UNDEFINED,
user_mentions: UndefinedOr[
Union[SnowflakeishSequence[PartialUser], bool]
] = undefined.UNDEFINED,
role_mentions: UndefinedOr[
Union[SnowflakeishSequence[PartialRole], bool]
] = undefined.UNDEFINED
) -> Message
Edit the initial response of this command interaction.
Note
Mentioning everyone, roles, or users in message edits currently will not send a push notification showing a new mention to people on Discord. It will still highlight in their chat as if they were mentioned, however.
Warning
If you specify a text content
, mentions_everyone
,
mentions_reply
, user_mentions
, and role_mentions
will default
to False
as the message will be re-parsed for mentions. This will
also occur if only one of the four are specified
This is a limitation of Discord's design. If in doubt, specify all four of them each time.
PARAMETER | DESCRIPTION |
---|---|
content |
If provided, the message contents. If
If this is a Likewise, if this is a
TYPE:
|
attachment |
If provided, the attachment to set on the message. If
TYPE:
|
attachments |
If provided, the attachments to set on the message. If
TYPE:
|
component |
If provided, builder object of the component to set for this message.
This component will replace any previously set components and passing
TYPE:
|
components |
If provided, a sequence of the component builder objects set for
this message. These components will replace any previously set
components and passing
TYPE:
|
embed |
If provided, the embed to set on the message. If
TYPE:
|
embeds |
If provided, the embeds to set on the message. If
TYPE:
|
mentions_everyone |
If provided, whether the message should parse @everyone/@here mentions.
TYPE:
|
user_mentions |
If provided, and
TYPE:
|
role_mentions |
If provided, and
TYPE:
|
RETURNS | DESCRIPTION |
---|---|
Message
|
The edited message. |
RAISES | DESCRIPTION |
---|---|
ValueError
|
If more than 100 unique objects/entities are passed for
|
TypeError
|
If both |
BadRequestError
|
This may be raised in several discrete situations, such as messages being empty with no attachments or embeds; messages with more than 2000 characters in them, embeds that exceed one of the many embed limits; too many attachments; attachments that are too large; invalid image URLs in embeds; too many components. |
UnauthorizedError
|
If you are unauthorized to make the request (invalid/missing token). |
NotFoundError
|
If the interaction or the message are not found. |
RateLimitTooLongError
|
Raised in the event that a rate limit occurs that is
longer than |
InternalServerError
|
If an internal error occurs on Discord while handling the request. |
edit_message
async
#
edit_message(
message: SnowflakeishOr[Message],
content: UndefinedNoneOr[Any] = undefined.UNDEFINED,
*,
attachment: UndefinedNoneOr[
Union[Resourceish, Attachment]
] = undefined.UNDEFINED,
attachments: UndefinedNoneOr[
Sequence[Union[Resourceish, Attachment]]
] = undefined.UNDEFINED,
component: UndefinedNoneOr[ComponentBuilder] = undefined.UNDEFINED,
components: UndefinedNoneOr[
Sequence[ComponentBuilder]
] = undefined.UNDEFINED,
embed: UndefinedNoneOr[Embed] = undefined.UNDEFINED,
embeds: UndefinedNoneOr[Sequence[Embed]] = undefined.UNDEFINED,
mentions_everyone: UndefinedOr[bool] = undefined.UNDEFINED,
user_mentions: UndefinedOr[
Union[SnowflakeishSequence[PartialUser], bool]
] = undefined.UNDEFINED,
role_mentions: UndefinedOr[
Union[SnowflakeishSequence[PartialRole], bool]
] = undefined.UNDEFINED
) -> Message
Edit a message sent by a webhook.
Note
Mentioning everyone, roles, or users in message edits currently will not send a push notification showing a new mention to people on Discord. It will still highlight in their chat as if they were mentioned, however.
Warning
If you specify a text content
, mentions_everyone
,
mentions_reply
, user_mentions
, and role_mentions
will default
to False
as the message will be re-parsed for mentions. This will
also occur if only one of the four are specified
This is a limitation of Discord's design. If in doubt, specify all four of them each time.
PARAMETER | DESCRIPTION |
---|---|
message |
The message to delete. This may be the object or the ID of an existing message.
TYPE:
|
content |
If provided, the message contents. If
If this is a Likewise, if this is a
TYPE:
|
PARAMETER | DESCRIPTION |
---|---|
attachment |
If provided, the attachment to set on the message. If
TYPE:
|
attachments |
If provided, the attachments to set on the message. If
TYPE:
|
component |
If provided, builder object of the component to set for this message.
This component will replace any previously set components and passing
TYPE:
|
components |
If provided, a sequence of the component builder objects set for
this message. These components will replace any previously set
components and passing
TYPE:
|
embed |
If provided, the embed to set on the message. If
TYPE:
|
embeds |
If provided, the embeds to set on the message. If
TYPE:
|
mentions_everyone |
If provided, sanitation for
TYPE:
|
user_mentions |
If provided, and
TYPE:
|
role_mentions |
If provided, and
TYPE:
|
RETURNS | DESCRIPTION |
---|---|
Message
|
The edited message. |
RAISES | DESCRIPTION |
---|---|
ValueError
|
If more than 100 unique objects/entities are passed for
|
TypeError
|
If both |
BadRequestError
|
This may be raised in several discrete situations, such as messages being empty with no attachments or embeds; messages with more than 2000 characters in them, embeds that exceed one of the many embed limits; too many attachments; attachments that are too large; too many components. |
UnauthorizedError
|
If you are unauthorized to make the request (invalid/missing token). |
NotFoundError
|
If the webhook or the message are not found. |
RateLimitTooLongError
|
Raised in the event that a rate limit occurs that is
longer than |
InternalServerError
|
If an internal error occurs on Discord while handling the request. |
execute
async
#
execute(
content: UndefinedOr[Any] = undefined.UNDEFINED,
*,
username: UndefinedOr[str] = undefined.UNDEFINED,
avatar_url: Union[UndefinedType, str, URL] = undefined.UNDEFINED,
tts: UndefinedOr[bool] = undefined.UNDEFINED,
attachment: UndefinedOr[Resourceish] = undefined.UNDEFINED,
attachments: UndefinedOr[Sequence[Resourceish]] = undefined.UNDEFINED,
component: UndefinedOr[ComponentBuilder] = undefined.UNDEFINED,
components: UndefinedOr[Sequence[ComponentBuilder]] = undefined.UNDEFINED,
embed: UndefinedOr[Embed] = undefined.UNDEFINED,
embeds: UndefinedOr[Sequence[Embed]] = undefined.UNDEFINED,
mentions_everyone: UndefinedOr[bool] = undefined.UNDEFINED,
user_mentions: UndefinedOr[
Union[SnowflakeishSequence[PartialUser], bool]
] = undefined.UNDEFINED,
role_mentions: UndefinedOr[
Union[SnowflakeishSequence[PartialRole], bool]
] = undefined.UNDEFINED,
flags: Union[UndefinedType, int, MessageFlag] = undefined.UNDEFINED
) -> Message
Execute the webhook to create a message.
Warning
At the time of writing, username
and avatar_url
are ignored for
interaction webhooks.
Additionally, hikari.messages.MessageFlag.SUPPRESS_EMBEDS
, hikari.messages.MessageFlag.SUPPRESS_NOTIFICATIONS
and hikari.messages.MessageFlag.EPHEMERAL
are the only flags that can be set, with hikari.messages.MessageFlag.EPHEMERAL
being limited to
interaction webhooks.
PARAMETER | DESCRIPTION |
---|---|
content |
If provided, the message contents. If
If this is a Likewise, if this is a
TYPE:
|
PARAMETER | DESCRIPTION |
---|---|
username |
If provided, the username to override the webhook's username for this request.
TYPE:
|
avatar_url |
If provided, the url of an image to override the webhook's avatar with for this request.
TYPE:
|
tts |
If provided, whether the message will be sent as a TTS message.
TYPE:
|
attachment |
If provided, the message attachment. This can be a resource, or string of a path on your computer or a URL.
TYPE:
|
attachments |
If provided, the message attachments. These can be resources, or strings consisting of paths on your computer or URLs.
TYPE:
|
component |
If provided, builder object of the component to include in this message.
TYPE:
|
components |
If provided, a sequence of the component builder objects to include in this message.
TYPE:
|
embed |
If provided, the message embed.
TYPE:
|
embeds |
If provided, the message embeds.
TYPE:
|
mentions_everyone |
If provided, whether the message should parse @everyone/@here mentions.
TYPE:
|
user_mentions |
If provided, and
TYPE:
|
role_mentions |
If provided, and
TYPE:
|
flags |
The flags to set for this webhook message.
TYPE:
|
RETURNS | DESCRIPTION |
---|---|
Message
|
The created message object. |
RAISES | DESCRIPTION |
---|---|
NotFoundError
|
If the current webhook is not found. |
BadRequestError
|
This can be raised if the file is too large; if the embed exceeds
the defined limits; if the message content is specified only and
empty or greater than |
UnauthorizedError
|
If you pass a token that's invalid for the target webhook. |
ValueError
|
If |
TypeError
|
If both |
fetch_channel
async
#
fetch_channel() -> TextableChannel
Fetch the guild channel this interaction was triggered in.
RETURNS | DESCRIPTION |
---|---|
TextableChannel
|
The requested partial channel derived object of the channel this interaction was triggered in. |
RAISES | DESCRIPTION |
---|---|
UnauthorizedError
|
If you are unauthorized to make the request (invalid/missing token). |
ForbiddenError
|
If you are missing the |
NotFoundError
|
If the channel is not found. |
RateLimitTooLongError
|
Raised in the event that a rate limit occurs that is
longer than |
RateLimitTooLongError
|
Raised in the event that a rate limit occurs that is
longer than |
InternalServerError
|
If an internal error occurs on Discord while handling the request. |
fetch_guild
async
#
Fetch the guild this interaction happened in.
RETURNS | DESCRIPTION |
---|---|
Optional[RESTGuild]
|
Object of the guild this interaction happened in or |
RAISES | DESCRIPTION |
---|---|
ForbiddenError
|
If you are not part of the guild. |
NotFoundError
|
If the guild is not found. |
UnauthorizedError
|
If you are unauthorized to make the request (invalid/missing token). |
RateLimitTooLongError
|
Raised in the event that a rate limit occurs that is
longer than |
InternalServerError
|
If an internal error occurs on Discord while handling the request. |
fetch_initial_response
async
#
fetch_initial_response() -> Message
Fetch the initial response of this interaction.
RETURNS | DESCRIPTION |
---|---|
Message
|
Message object of the initial response. |
RAISES | DESCRIPTION |
---|---|
ForbiddenError
|
If you cannot access the target interaction. |
NotFoundError
|
If the initial response isn't found. |
UnauthorizedError
|
If you are unauthorized to make the request (invalid/missing token). |
RateLimitTooLongError
|
Raised in the event that a rate limit occurs that is
longer than |
InternalServerError
|
If an internal error occurs on Discord while handling the request. |
fetch_message
async
#
fetch_message(message: SnowflakeishOr[Message]) -> Message
Fetch an old message sent by the webhook.
PARAMETER | DESCRIPTION |
---|---|
message |
The message to fetch. This may be the object or the ID of an existing channel.
TYPE:
|
RETURNS | DESCRIPTION |
---|---|
Message
|
The requested message. |
RAISES | DESCRIPTION |
---|---|
ValueError
|
If |
UnauthorizedError
|
If you are unauthorized to make the request (invalid/missing token). |
NotFoundError
|
If the webhook is not found or the webhook's message wasn't found. |
RateLimitTooLongError
|
Raised in the event that a rate limit occurs that is
longer than |
InternalServerError
|
If an internal error occurs on Discord while handling the request. |
get_channel
#
get_channel() -> Optional[TextableGuildChannel]
Get the guild channel this interaction was triggered in from the cache.
Note
This will always return None
for interactions triggered
in a DM channel.
RETURNS | DESCRIPTION |
---|---|
Optional[TextableGuildChannel]
|
The object of the guild channel that was found in the cache or
|
get_guild
#
get_guild() -> Optional[GatewayGuild]
Get the object of the guild this interaction was triggered in from the cache.
RETURNS | DESCRIPTION |
---|---|
Optional[GatewayGuild]
|
The object of the guild if found, else |