Files
2026-02-03 20:32:43 +02:00

2486 lines
80 KiB
Python

# SPDX-License-Identifier: MIT
from __future__ import annotations
import types
from functools import total_ordering
from typing import (
TYPE_CHECKING,
Any,
ClassVar,
Dict,
Iterator,
List,
NamedTuple,
NoReturn,
Optional,
Type,
TypeVar,
)
if TYPE_CHECKING:
from typing_extensions import Self
__all__ = (
"Enum",
"ChannelType",
"MessageType",
"SpeakingState",
"VerificationLevel",
"ContentFilter",
"Status",
"StatusDisplayType",
"DefaultAvatar",
"AuditLogAction",
"AuditLogActionCategory",
"UserFlags",
"ActivityType",
"NotificationLevel",
"TeamMembershipState",
"TeamMemberRole",
"WebhookType",
"ExpireBehaviour",
"ExpireBehavior",
"StickerType",
"StickerFormatType",
"InviteType",
"InviteTarget",
"VideoQualityMode",
"ComponentType",
"ButtonStyle",
"TextInputStyle",
"SelectDefaultValueType",
"StagePrivacyLevel",
"InteractionType",
"InteractionResponseType",
"NSFWLevel",
"OptionType",
"ApplicationCommandType",
"ApplicationCommandPermissionType",
"PartyType",
"GuildScheduledEventEntityType",
"GuildScheduledEventStatus",
"GuildScheduledEventPrivacyLevel",
"ThreadArchiveDuration",
"WidgetStyle",
"Locale",
"AutoModTriggerType",
"AutoModEventType",
"AutoModActionType",
"ThreadSortOrder",
"ThreadLayout",
"Event",
"ApplicationRoleConnectionMetadataType",
"ApplicationEventWebhookStatus",
"OnboardingPromptType",
"SKUType",
"EntitlementType",
"SubscriptionStatus",
"PollLayoutType",
"VoiceChannelEffectAnimationType",
"MessageReferenceType",
"SeparatorSpacing",
"NameplatePalette",
)
EnumMetaT = TypeVar("EnumMetaT", bound="Type[EnumMeta]")
class _EnumValueBase(NamedTuple):
if TYPE_CHECKING:
_cls_name: ClassVar[str]
name: str
value: Any
def __repr__(self) -> str:
return f"<{self._cls_name}.{self.name}: {self.value!r}>"
def __str__(self) -> str:
return f"{self._cls_name}.{self.name}"
@total_ordering
class _EnumValueComparable(_EnumValueBase):
def __eq__(self, other: object) -> bool:
return isinstance(other, self.__class__) and self.value == other.value
def __lt__(self, other: object) -> bool:
return isinstance(other, self.__class__) and self.value < other.value
def _create_value_cls(name: str, comparable: bool) -> Type[_EnumValueBase]:
parent = _EnumValueComparable if comparable else _EnumValueBase
return type(f"{parent.__name__}_{name}", (parent,), {"_cls_name": name}) # type: ignore
def _is_descriptor(obj) -> bool:
return hasattr(obj, "__get__") or hasattr(obj, "__set__") or hasattr(obj, "__delete__")
class EnumMeta(type):
if TYPE_CHECKING:
__name__: ClassVar[str]
_enum_member_names_: ClassVar[List[str]]
_enum_member_map_: ClassVar[Dict[str, Any]]
_enum_value_map_: ClassVar[Dict[Any, Any]]
_enum_value_cls_: ClassVar[Type[_EnumValueBase]]
def __new__(cls: EnumMetaT, name: str, bases, attrs, *, comparable: bool = False) -> EnumMetaT:
value_mapping = {}
member_mapping = {}
member_names = []
value_cls = _create_value_cls(name, comparable)
for key, value in list(attrs.items()):
is_descriptor = _is_descriptor(value)
if key[0] == "_" and not is_descriptor:
continue
# Special case classmethod to just pass through
if isinstance(value, classmethod):
continue
if is_descriptor:
setattr(value_cls, key, value)
del attrs[key]
continue
try:
new_value = value_mapping[value]
except KeyError:
new_value = value_cls(name=key, value=value)
value_mapping[value] = new_value
member_names.append(key)
member_mapping[key] = new_value
attrs[key] = new_value
attrs["_enum_value_map_"] = value_mapping
attrs["_enum_member_map_"] = member_mapping
attrs["_enum_member_names_"] = member_names
attrs["_enum_value_cls_"] = value_cls
actual_cls = super().__new__(cls, name, bases, attrs)
value_cls._actual_enum_cls_ = actual_cls # type: ignore
return actual_cls
def __iter__(cls) -> Iterator[Self]:
return (cls._enum_member_map_[name] for name in cls._enum_member_names_)
def __reversed__(cls) -> Iterator[Self]:
return (cls._enum_member_map_[name] for name in reversed(cls._enum_member_names_))
def __len__(cls) -> int:
return len(cls._enum_member_names_)
def __repr__(cls) -> str:
return f"<enum {cls.__name__}>"
@property
def __members__(cls):
return types.MappingProxyType(cls._enum_member_map_)
def __call__(cls, value: Any) -> Any:
try:
return cls._enum_value_map_[value]
except (KeyError, TypeError):
raise ValueError(f"{value!r} is not a valid {cls.__name__}") from None
def __getitem__(cls, key: str) -> Any:
return cls._enum_member_map_[key]
def __setattr__(cls, name: str, value: Any) -> NoReturn:
raise TypeError("Enums are immutable.")
def __delattr__(cls, attr) -> NoReturn:
raise TypeError("Enums are immutable")
def __instancecheck__(self, instance) -> bool:
# isinstance(x, Y)
# -> __instancecheck__(Y, x)
try:
return instance._actual_enum_cls_ is self
except AttributeError:
return False
if TYPE_CHECKING:
from enum import Enum
else:
class Enum(metaclass=EnumMeta):
@classmethod
def try_value(cls, value: Any) -> Self:
try:
return cls._enum_value_map_[value]
except (KeyError, TypeError):
return value
class ChannelType(Enum):
"""Specifies the type of channel."""
text = 0
"""A text channel."""
private = 1
"""A private text channel. Also called a direct message."""
voice = 2
"""A voice channel."""
group = 3
"""A private group text channel."""
category = 4
"""A category channel."""
news = 5
"""A guild news channel."""
news_thread = 10
"""A news thread.
.. versionadded:: 2.0
"""
public_thread = 11
"""A public thread.
.. versionadded:: 2.0
"""
private_thread = 12
"""A private thread.
.. versionadded:: 2.0
"""
stage_voice = 13
"""A guild stage voice channel.
.. versionadded:: 1.7
"""
guild_directory = 14
"""A student hub channel.
.. versionadded:: 2.1
"""
forum = 15
"""A channel of only threads.
.. versionadded:: 2.5
"""
media = 16
"""A channel of only threads but with a focus on media, similar to forum channels.
.. versionadded:: 2.10
"""
def __str__(self) -> str:
return self.name
class MessageType(Enum):
"""Specifies the type of :class:`Message`. This is used to denote if a message
is to be interpreted as a system message or a regular message.
"""
default = 0
"""The default message type. This is the same as regular messages."""
recipient_add = 1
"""The system message when a user is added to a group private message or a thread."""
recipient_remove = 2
"""The system message when a user is removed from a group private message or a thread."""
call = 3
"""The system message denoting call state, e.g. missed call, started call, etc."""
channel_name_change = 4
"""The system message denoting that a channel's name has been changed."""
channel_icon_change = 5
"""The system message denoting that a channel's icon has been changed."""
pins_add = 6
"""The system message denoting that a pinned message has been added to a channel."""
new_member = 7
"""The system message denoting that a new member has joined a Guild."""
premium_guild_subscription = 8
"""The system message denoting that a member has "nitro boosted" a guild."""
premium_guild_tier_1 = 9
"""The system message denoting that a member has "nitro boosted" a guild and it achieved level 1."""
premium_guild_tier_2 = 10
"""The system message denoting that a member has "nitro boosted" a guild and it achieved level 2."""
premium_guild_tier_3 = 11
"""The system message denoting that a member has "nitro boosted" a guild and it achieved level 3."""
channel_follow_add = 12
"""The system message denoting that an announcement channel has been followed.
.. versionadded:: 1.3
"""
guild_stream = 13
"""The system message denoting that a member is streaming in the guild.
.. versionadded:: 1.7
"""
guild_discovery_disqualified = 14
"""The system message denoting that the guild is no longer eligible for Server Discovery.
.. versionadded:: 1.7
"""
guild_discovery_requalified = 15
"""The system message denoting that the guild has become eligible again for Server Discovery.
.. versionadded:: 1.7
"""
guild_discovery_grace_period_initial_warning = 16
"""The system message denoting that the guild has failed to meet the Server
Discovery requirements for one week.
.. versionadded:: 1.7
"""
guild_discovery_grace_period_final_warning = 17
"""The system message denoting that the guild has failed to meet the Server
Discovery requirements for 3 weeks in a row.
.. versionadded:: 1.7
"""
thread_created = 18
"""The system message denoting that a thread has been created. This is only
sent if the thread has been created from an older message. The period of time
required for a message to be considered old cannot be relied upon and is up to
Discord.
.. versionadded:: 2.0
"""
reply = 19
"""The system message denoting that the author is replying to a message.
.. versionadded:: 2.0
"""
application_command = 20
"""The system message denoting that an application (or "slash") command was executed.
.. versionadded:: 2.0
"""
thread_starter_message = 21
"""The system message denoting the message in the thread that is the one that started the
thread's conversation topic.
.. versionadded:: 2.0
"""
guild_invite_reminder = 22
"""The system message sent as a reminder to invite people to the guild.
.. versionadded:: 2.0
"""
context_menu_command = 23
"""The system message denoting that a context menu command was executed.
.. versionadded:: 2.3
"""
auto_moderation_action = 24
"""The system message denoting that an auto moderation action was executed.
.. versionadded:: 2.5
"""
role_subscription_purchase = 25
"""The system message denoting that a role subscription was purchased.
.. versionadded:: 2.9
"""
interaction_premium_upsell = 26
"""The system message for an application premium subscription upsell.
.. versionadded:: 2.8
"""
stage_start = 27
"""The system message denoting the stage has been started.
.. versionadded:: 2.9
"""
stage_end = 28
"""The system message denoting the stage has ended.
.. versionadded:: 2.9
"""
stage_speaker = 29
"""The system message denoting a user has become a speaker.
.. versionadded:: 2.9
"""
stage_topic = 31
"""The system message denoting the stage topic has been changed.
.. versionadded:: 2.9
"""
guild_application_premium_subscription = 32
"""The system message denoting that a guild member has subscribed to an application.
.. versionadded:: 2.8
"""
guild_incident_alert_mode_enabled = 36
"""The system message denoting that an admin enabled security actions.
.. versionadded:: 2.10
"""
guild_incident_alert_mode_disabled = 37
"""The system message denoting that an admin disabled security actions.
.. versionadded:: 2.10
"""
guild_incident_report_raid = 38
"""The system message denoting that an admin reported a raid.
.. versionadded:: 2.10
"""
guild_incident_report_false_alarm = 39
"""The system message denoting that a raid report was a false alarm.
.. versionadded:: 2.10
"""
poll_result = 46
"""The system message denoting that a poll expired, announcing the most voted answer.
.. versionadded:: 2.10
"""
emoji_added = 63
"""The system message denoting that an emoji was added to the server.
.. versionadded: 2.11
"""
class PartyType(Enum):
"""Represents the type of a voice channel activity/application.
.. deprecated:: 2.9
"""
poker = 755827207812677713
"""The "Poker Night" activity."""
betrayal = 773336526917861400
"""The "Betrayal.io" activity."""
fishing = 814288819477020702
"""The "Fishington.io" activity."""
chess = 832012774040141894
"""The "Chess In The Park" activity."""
letter_tile = 879863686565621790
"""The "Letter Tile" activity."""
word_snack = 879863976006127627
"""The "Word Snacks" activity."""
doodle_crew = 878067389634314250
"""The "Doodle Crew" activity."""
checkers = 832013003968348200
"""The "Checkers In The Park" activity.
.. versionadded:: 2.3
"""
spellcast = 852509694341283871
"""The "SpellCast" activity.
.. versionadded:: 2.3
"""
watch_together = 880218394199220334
"""The "Watch Together" activity, a Youtube application.
.. versionadded:: 2.3
"""
sketch_heads = 902271654783242291
"""The "Sketch Heads" activity.
.. versionadded:: 2.4
"""
ocho = 832025144389533716
"""The "Ocho" activity.
.. versionadded:: 2.4
"""
gartic_phone = 1007373802981822582
"""The "Gartic Phone" activity.
.. versionadded:: 2.9
"""
# undocumented/internal
class SpeakingState(Enum):
none = 0
voice = 1 << 0
soundshare = 1 << 1
priority = 1 << 2
def __str__(self) -> str:
return self.name
def __int__(self) -> int:
return self.value
class VerificationLevel(Enum, comparable=True):
"""Specifies a :class:`Guild`\\'s verification level, which is the criteria in
which a member must meet before being able to send messages to the guild.
.. collapse:: operations
.. versionadded:: 2.0
.. describe:: x == y
Checks if two verification levels are equal.
.. describe:: x != y
Checks if two verification levels are not equal.
.. describe:: x > y
Checks if a verification level is higher than another.
.. describe:: x < y
Checks if a verification level is lower than another.
.. describe:: x >= y
Checks if a verification level is higher or equal to another.
.. describe:: x <= y
Checks if a verification level is lower or equal to another.
"""
none = 0
"""No criteria set."""
low = 1
"""Member must have a verified email on their Discord account."""
medium = 2
"""Member must have a verified email and be registered on Discord for more than five minutes."""
high = 3
"""Member must have a verified email, be registered on Discord for more
than five minutes, and be a member of the guild itself for more than ten minutes.
"""
highest = 4
"""Member must have a verified phone on their Discord account."""
def __str__(self) -> str:
return self.name
class ContentFilter(Enum, comparable=True):
"""Specifies a :class:`Guild`\\'s explicit content filter, which is the machine
learning algorithms that Discord uses to detect if an image contains NSFW content.
.. collapse:: operations
.. describe:: x == y
Checks if two content filter levels are equal.
.. describe:: x != y
Checks if two content filter levels are not equal.
.. describe:: x > y
Checks if a content filter level is higher than another.
.. describe:: x < y
Checks if a content filter level is lower than another.
.. describe:: x >= y
Checks if a content filter level is higher or equal to another.
.. describe:: x <= y
Checks if a content filter level is lower or equal to another.
"""
disabled = 0
"""The guild does not have the content filter enabled."""
no_role = 1
"""The guild has the content filter enabled for members without a role."""
all_members = 2
"""The guild has the content filter enabled for every member."""
def __str__(self) -> str:
return self.name
class Status(Enum):
"""Specifies a :class:`Member`\\'s status."""
online = "online"
"""The member is online."""
offline = "offline"
"""The member is offline."""
idle = "idle"
"""The member is idle."""
dnd = "dnd"
"""The member is "Do Not Disturb"."""
do_not_disturb = "dnd"
"""An alias for :attr:`dnd`."""
invisible = "invisible"
"""The member is "invisible". In reality, this is only used in sending
a presence a la :meth:`Client.change_presence`. When you receive a
user's presence this will be :attr:`offline` instead.
"""
streaming = "streaming"
"""The member is live streaming to Twitch or YouTube.
.. versionadded:: 2.3
"""
def __str__(self) -> str:
return self.value
class StatusDisplayType(Enum):
"""Specifies an :class:`Activity` display status.
.. versionadded:: 2.11
"""
name = 0 # type: ignore[reportAssignmentType]
"""The name of the activity is displayed, e.g: ``Listening to Spotify``."""
state = 1
"""The state of the activity is displayed, e.g: ``Listening to Rick Astley``."""
details = 2
"""The details of the activity are displayed, e.g: ``Listening to Never Gonna Give You Up``."""
def __int__(self) -> int:
return self.value
class DefaultAvatar(Enum):
"""Represents the default avatar of a Discord :class:`User`."""
blurple = 0
"""Represents the default avatar with the color blurple. See also :attr:`Colour.blurple`."""
grey = 1
"""Represents the default avatar with the color grey. See also :attr:`Colour.greyple`."""
gray = 1
"""An alias for :attr:`grey`."""
green = 2
"""Represents the default avatar with the color green. See also :attr:`Colour.green`."""
orange = 3
"""Represents the default avatar with the color orange. See also :attr:`Colour.orange`."""
red = 4
"""Represents the default avatar with the color red. See also :attr:`Colour.red`."""
fuchsia = 5
"""Represents the default avatar with the color fuchsia. See also :attr:`Colour.fuchsia`.
.. versionadded:: 2.9
"""
def __str__(self) -> str:
return self.name
class NotificationLevel(Enum, comparable=True):
"""Specifies whether a :class:`Guild` has notifications on for all messages or mentions only by default.
.. collapse:: operations
.. describe:: x == y
Checks if two notification levels are equal.
.. describe:: x != y
Checks if two notification levels are not equal.
.. describe:: x > y
Checks if a notification level is higher than another.
.. describe:: x < y
Checks if a notification level is lower than another.
.. describe:: x >= y
Checks if a notification level is higher or equal to another.
.. describe:: x <= y
Checks if a notification level is lower or equal to another.
"""
all_messages = 0
"""Members receive notifications for every message regardless of them being mentioned."""
only_mentions = 1
"""Members receive notifications for messages they are mentioned in."""
class AuditLogActionCategory(Enum):
"""Represents the category that the :class:`AuditLogAction` belongs to.
This can be retrieved via :attr:`AuditLogEntry.category`.
"""
create = 1
"""The action is the creation of something."""
delete = 2
"""The action is the deletion of something."""
update = 3
"""The action is the update of something."""
# NOTE: these fields are only fully documented in audit_logs.rst,
# as the docstrings alone would be ~1000-1500 additional lines
class AuditLogAction(Enum):
"""Represents the type of action being done for a :class:`AuditLogEntry`\\,
which is retrievable via :meth:`Guild.audit_logs` or via the :func:`on_audit_log_entry_create` event.
"""
# fmt: off
guild_update = 1
channel_create = 10
channel_update = 11
channel_delete = 12
overwrite_create = 13
overwrite_update = 14
overwrite_delete = 15
kick = 20
member_prune = 21
ban = 22
unban = 23
member_update = 24
member_role_update = 25
member_move = 26
member_disconnect = 27
bot_add = 28
role_create = 30
role_update = 31
role_delete = 32
invite_create = 40
invite_update = 41
invite_delete = 42
webhook_create = 50
webhook_update = 51
webhook_delete = 52
emoji_create = 60
emoji_update = 61
emoji_delete = 62
message_delete = 72
message_bulk_delete = 73
message_pin = 74
message_unpin = 75
integration_create = 80
integration_update = 81
integration_delete = 82
stage_instance_create = 83
stage_instance_update = 84
stage_instance_delete = 85
sticker_create = 90
sticker_update = 91
sticker_delete = 92
guild_scheduled_event_create = 100
guild_scheduled_event_update = 101
guild_scheduled_event_delete = 102
thread_create = 110
thread_update = 111
thread_delete = 112
application_command_permission_update = 121
soundboard_sound_create = 130
soundboard_sound_update = 131
soundboard_sound_delete = 132
automod_rule_create = 140
automod_rule_update = 141
automod_rule_delete = 142
automod_block_message = 143
automod_send_alert_message = 144
automod_timeout = 145
automod_quarantine_user = 146
creator_monetization_request_created = 150
creator_monetization_terms_accepted = 151
# fmt: on
@property
def category(self) -> Optional[AuditLogActionCategory]:
# fmt: off
lookup: Dict[AuditLogAction, Optional[AuditLogActionCategory]] = {
AuditLogAction.guild_update: AuditLogActionCategory.update,
AuditLogAction.channel_create: AuditLogActionCategory.create,
AuditLogAction.channel_update: AuditLogActionCategory.update,
AuditLogAction.channel_delete: AuditLogActionCategory.delete,
AuditLogAction.overwrite_create: AuditLogActionCategory.create,
AuditLogAction.overwrite_update: AuditLogActionCategory.update,
AuditLogAction.overwrite_delete: AuditLogActionCategory.delete,
AuditLogAction.kick: None,
AuditLogAction.member_prune: None,
AuditLogAction.ban: None,
AuditLogAction.unban: None,
AuditLogAction.member_update: AuditLogActionCategory.update,
AuditLogAction.member_role_update: AuditLogActionCategory.update,
AuditLogAction.member_move: None,
AuditLogAction.member_disconnect: None,
AuditLogAction.bot_add: None,
AuditLogAction.role_create: AuditLogActionCategory.create,
AuditLogAction.role_update: AuditLogActionCategory.update,
AuditLogAction.role_delete: AuditLogActionCategory.delete,
AuditLogAction.invite_create: AuditLogActionCategory.create,
AuditLogAction.invite_update: AuditLogActionCategory.update,
AuditLogAction.invite_delete: AuditLogActionCategory.delete,
AuditLogAction.webhook_create: AuditLogActionCategory.create,
AuditLogAction.webhook_update: AuditLogActionCategory.update,
AuditLogAction.webhook_delete: AuditLogActionCategory.delete,
AuditLogAction.emoji_create: AuditLogActionCategory.create,
AuditLogAction.emoji_update: AuditLogActionCategory.update,
AuditLogAction.emoji_delete: AuditLogActionCategory.delete,
AuditLogAction.message_delete: AuditLogActionCategory.delete,
AuditLogAction.message_bulk_delete: AuditLogActionCategory.delete,
AuditLogAction.message_pin: None,
AuditLogAction.message_unpin: None,
AuditLogAction.integration_create: AuditLogActionCategory.create,
AuditLogAction.integration_update: AuditLogActionCategory.update,
AuditLogAction.integration_delete: AuditLogActionCategory.delete,
AuditLogAction.stage_instance_create: AuditLogActionCategory.create,
AuditLogAction.stage_instance_update: AuditLogActionCategory.update,
AuditLogAction.stage_instance_delete: AuditLogActionCategory.delete,
AuditLogAction.sticker_create: AuditLogActionCategory.create,
AuditLogAction.sticker_update: AuditLogActionCategory.update,
AuditLogAction.sticker_delete: AuditLogActionCategory.delete,
AuditLogAction.thread_create: AuditLogActionCategory.create,
AuditLogAction.thread_update: AuditLogActionCategory.update,
AuditLogAction.thread_delete: AuditLogActionCategory.delete,
AuditLogAction.guild_scheduled_event_create: AuditLogActionCategory.create,
AuditLogAction.guild_scheduled_event_update: AuditLogActionCategory.update,
AuditLogAction.guild_scheduled_event_delete: AuditLogActionCategory.delete,
AuditLogAction.application_command_permission_update: AuditLogActionCategory.update,
AuditLogAction.soundboard_sound_create: AuditLogActionCategory.create,
AuditLogAction.soundboard_sound_update: AuditLogActionCategory.update,
AuditLogAction.soundboard_sound_delete: AuditLogActionCategory.delete,
AuditLogAction.automod_rule_create: AuditLogActionCategory.create,
AuditLogAction.automod_rule_update: AuditLogActionCategory.update,
AuditLogAction.automod_rule_delete: AuditLogActionCategory.delete,
AuditLogAction.automod_block_message: None,
AuditLogAction.automod_send_alert_message: None,
AuditLogAction.automod_timeout: None,
AuditLogAction.automod_quarantine_user: None,
AuditLogAction.creator_monetization_request_created: None,
AuditLogAction.creator_monetization_terms_accepted: None,
}
# fmt: on
return lookup[self]
@property
def target_type(self) -> Optional[str]:
v = self.value
if v == -1: # pyright: ignore[reportUnnecessaryComparison]
return "all"
elif v < 10:
return "guild"
elif v < 20:
return "channel"
elif v < 30:
return "user"
elif v < 40:
return "role"
elif v < 50:
return "invite"
elif v < 60:
return "webhook"
elif v < 70:
return "emoji"
elif v == 73:
return "channel"
elif v < 80:
return "message"
elif v < 83:
return "integration"
elif v < 90:
return "stage_instance"
elif v < 93:
return "sticker"
elif v < 103:
return "guild_scheduled_event"
elif v < 113:
return "thread"
elif v < 122:
return "application_command_or_integration"
elif v < 140:
return None
elif v < 143:
return "automod_rule"
elif v < 147:
return "user"
elif v < 152:
return None
else:
return None
class UserFlags(Enum):
"""Represents Discord user flags."""
staff = 1 << 0
"""The user is a Discord Employee."""
partner = 1 << 1
"""The user is a Discord Partner."""
hypesquad = 1 << 2
"""The user is a HypeSquad Events member."""
bug_hunter = 1 << 3
"""The user is a Bug Hunter."""
mfa_sms = 1 << 4
"""The user has SMS recovery for Multi Factor Authentication enabled."""
premium_promo_dismissed = 1 << 5
"""The user has dismissed the Discord Nitro promotion."""
hypesquad_bravery = 1 << 6
"""The user is a HypeSquad Bravery member."""
hypesquad_brilliance = 1 << 7
"""The user is a HypeSquad Brilliance member."""
hypesquad_balance = 1 << 8
"""The user is a HypeSquad Balance member."""
early_supporter = 1 << 9
"""The user is an Early Supporter."""
team_user = 1 << 10
"""The user is a Team User."""
system = 1 << 12
"""The user is a system user (i.e. represents Discord officially)."""
has_unread_urgent_messages = 1 << 13
"""The user has an unread system message."""
bug_hunter_level_2 = 1 << 14
"""The user is a Bug Hunter Level 2."""
verified_bot = 1 << 16
"""The user is a Verified Bot."""
verified_bot_developer = 1 << 17
"""The user is an Early Verified Bot Developer."""
discord_certified_moderator = 1 << 18
"""The user is a Discord Certified Moderator."""
http_interactions_bot = 1 << 19
"""The user is a bot that only uses HTTP interactions.
.. versionadded:: 2.3
"""
spammer = 1 << 20
"""The user is marked as a spammer.
.. versionadded:: 2.3
"""
active_developer = 1 << 22
"""The user is an Active Developer.
.. versionadded:: 2.8
"""
class ActivityType(Enum):
"""Specifies the type of :class:`Activity`. This is used to check how to
interpret the activity itself.
"""
unknown = -1
"""An unknown activity type. This should generally not happen."""
playing = 0
"""A "Playing" activity type."""
streaming = 1
"""A "Streaming" activity type."""
listening = 2
"""A "Listening" activity type."""
watching = 3
"""A "Watching" activity type."""
custom = 4
"""A custom activity type."""
competing = 5
"""A competing activity type.
.. versionadded:: 1.5
"""
def __int__(self) -> int:
return self.value
class TeamMembershipState(Enum):
"""Represents the membership state of a team member retrieved through :func:`Client.application_info`.
.. versionadded:: 1.3
"""
invited = 1
"""Represents an invited member."""
accepted = 2
"""Represents a member currently in the team."""
class TeamMemberRole(Enum):
"""Represents the role of a team member retrieved through :func:`Client.application_info`.
.. versionadded:: 2.10
"""
admin = "admin"
"""Admins have the most permissions. An admin can only take destructive actions
on the team or team-owned apps if they are the team owner.
"""
developer = "developer"
"""Developers can access information about a team and team-owned applications,
and take limited actions on them, like configuring interaction
endpoints or resetting the bot token.
"""
read_only = "read_only"
"""Read-only members can access information about a team and team-owned applications."""
def __str__(self) -> str:
return self.name
class WebhookType(Enum):
"""Represents the type of webhook that can be received.
.. versionadded:: 1.3
"""
incoming = 1
"""Represents a webhook that can post messages to channels with a token."""
channel_follower = 2
"""Represents a webhook that is internally managed by Discord, used for following channels."""
application = 3
"""Represents a webhook that is used for interactions or applications.
.. versionadded:: 2.0
"""
class ExpireBehaviour(Enum):
"""Represents the behaviour the :class:`Integration` should perform
when a user's subscription has finished.
There is an alias for this called ``ExpireBehavior``.
.. versionadded:: 1.4
"""
remove_role = 0
"""This will remove the :attr:`StreamIntegration.role` from the user
when their subscription is finished.
"""
kick = 1
"""This will kick the user when their subscription is finished."""
ExpireBehavior = ExpireBehaviour
class StickerType(Enum):
"""Represents the type of sticker.
.. versionadded:: 2.0
"""
standard = 1
"""Represents a standard sticker that all users can use."""
guild = 2
"""Represents a custom sticker created in a guild."""
class StickerFormatType(Enum):
"""Represents the type of sticker images.
.. versionadded:: 1.6
"""
png = 1
"""Represents a sticker with a png image."""
apng = 2
"""Represents a sticker with an apng image."""
lottie = 3
"""Represents a sticker with a lottie image."""
gif = 4
"""Represents a sticker with a gif image.
.. versionadded:: 2.8
"""
@property
def file_extension(self) -> str:
return STICKER_FORMAT_LOOKUP[self]
STICKER_FORMAT_LOOKUP: Dict[StickerFormatType, str] = {
StickerFormatType.png: "png",
StickerFormatType.apng: "png",
StickerFormatType.lottie: "json",
StickerFormatType.gif: "gif",
}
class InviteType(Enum):
"""Represents the type of an invite.
.. versionadded:: 2.10
"""
guild = 0
"""Represents an invite to a guild."""
group_dm = 1
"""Represents an invite to a group channel."""
friend = 2
"""Represents a friend invite."""
class InviteTarget(Enum):
"""Represents the invite type for voice channel invites.
.. versionadded:: 2.0
"""
unknown = 0
"""The invite doesn't target anyone or anything."""
stream = 1
"""A stream invite that targets a user."""
embedded_application = 2
"""A stream invite that targets an embedded application."""
class InteractionType(Enum):
"""Specifies the type of :class:`Interaction`.
.. versionadded:: 2.0
"""
ping = 1
"""Represents Discord pinging to see if the interaction response server is alive."""
application_command = 2
"""Represents an application command interaction."""
component = 3
"""Represents a component based interaction, i.e. using the Discord Bot UI Kit."""
application_command_autocomplete = 4
"""Represents an application command autocomplete interaction."""
modal_submit = 5
"""Represents a modal submit interaction."""
class InteractionResponseType(Enum):
"""Specifies the response type for the interaction.
.. versionadded:: 2.0
"""
pong = 1
"""Pongs the interaction when given a ping.
See also :meth:`InteractionResponse.pong`.
"""
channel_message = 4
"""Responds to the interaction with a message.
See also :meth:`InteractionResponse.send_message`.
"""
deferred_channel_message = 5
"""Responds to the interaction with a message at a later time.
See also :meth:`InteractionResponse.defer`.
"""
deferred_message_update = 6
"""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`.
"""
message_update = 7
"""Responds to the interaction by editing the message.
See also :meth:`InteractionResponse.edit_message`.
"""
application_command_autocomplete_result = 8
"""Responds to the autocomplete interaction with suggested choices.
See also :meth:`InteractionResponse.autocomplete`.
"""
modal = 9
"""Responds to the interaction by displaying a modal.
See also :meth:`InteractionResponse.send_modal`.
.. versionadded:: 2.4
"""
premium_required = 10
"""Responds to the interaction with a message containing an upgrade button.
Only available for applications with monetization enabled.
See also :meth:`InteractionResponse.require_premium`.
.. versionadded:: 2.10
.. deprecated:: 2.11
Use premium buttons (:class:`ui.Button` with :attr:`~ui.Button.sku_id`) instead.
"""
class VideoQualityMode(Enum):
"""Represents the camera video quality mode for voice channel participants.
.. versionadded:: 2.0
"""
auto = 1
"""Represents auto camera video quality."""
full = 2
"""Represents full camera video quality."""
def __int__(self) -> int:
return self.value
class ComponentType(Enum):
"""Represents the type of component.
.. versionadded:: 2.0
"""
action_row = 1
"""Represents the group component which holds different components in a row."""
button = 2
"""Represents a button component."""
string_select = 3
"""Represents a string select component.
.. versionadded:: 2.7
"""
select = 3 # backwards compatibility
"""An alias of :attr:`string_select`."""
text_input = 4
"""Represents a text input component."""
user_select = 5
"""Represents a user select component.
.. versionadded:: 2.7
"""
role_select = 6
"""Represents a role select component.
.. versionadded:: 2.7
"""
mentionable_select = 7
"""Represents a mentionable (user/member/role) select component.
.. versionadded:: 2.7
"""
channel_select = 8
"""Represents a channel select component.
.. versionadded:: 2.7
"""
section = 9
"""Represents a Components V2 section component.
.. versionadded:: 2.11
"""
text_display = 10
"""Represents a Components V2 text display component.
.. versionadded:: 2.11
"""
thumbnail = 11
"""Represents a Components V2 thumbnail component.
.. versionadded:: 2.11
"""
media_gallery = 12
"""Represents a Components V2 media gallery component.
.. versionadded:: 2.11
"""
file = 13
"""Represents a Components V2 file component.
.. versionadded:: 2.11
"""
separator = 14
"""Represents a Components V2 separator component.
.. versionadded:: 2.11
"""
container = 17
"""Represents a Components V2 container component.
.. versionadded:: 2.11
"""
label = 18
"""Represents a label component.
.. versionadded:: 2.11
"""
def __int__(self) -> int:
return self.value
class ButtonStyle(Enum):
"""Represents the style of the button component.
.. versionadded:: 2.0
"""
primary = 1
"""Represents a blurple button for the primary action."""
secondary = 2
"""Represents a grey button for the secondary action."""
success = 3
"""Represents a green button for a successful action."""
danger = 4
"""Represents a red button for a dangerous action."""
link = 5
"""Represents a link button."""
premium = 6
"""Represents a premium/SKU button.
.. versionadded:: 2.11
"""
# Aliases
blurple = 1
"""An alias for :attr:`primary`."""
grey = 2
"""An alias for :attr:`secondary`."""
gray = 2
"""An alias for :attr:`secondary`."""
green = 3
"""An alias for :attr:`success`."""
red = 4
"""An alias for :attr:`danger`."""
url = 5
"""An alias for :attr:`link`."""
sku = 6
"""An alias for :attr:`premium`.
.. versionadded:: 2.11
"""
def __int__(self) -> int:
return self.value
class TextInputStyle(Enum):
"""Represents a style of the text input component.
.. versionadded:: 2.4
"""
short = 1
"""Represents a single-line text input component."""
paragraph = 2
"""Represents a multi-line text input component."""
# Aliases
single_line = 1
"""An alias for :attr:`short`."""
multi_line = 2
"""An alias for :attr:`paragraph`."""
long = 2
"""An alias for :attr:`paragraph`."""
def __int__(self) -> int:
return self.value
class SelectDefaultValueType(Enum):
"""Represents the type of a :class:`SelectDefaultValue`.
.. versionadded:: 2.10
"""
user = "user"
"""Represents a user/member."""
role = "role"
"""Represents a role."""
channel = "channel"
"""Represents a channel."""
def __str__(self) -> str:
return self.value
class ApplicationCommandType(Enum):
"""Represents the type of an application command.
.. versionadded:: 2.1
"""
chat_input = 1
"""Represents a slash command."""
user = 2
"""Represents a user command from the context menu."""
message = 3
"""Represents a message command from the context menu."""
class ApplicationCommandPermissionType(Enum):
"""Represents the type of a permission of an application command.
.. versionadded:: 2.5
"""
role = 1
"""Represents a permission that affects roles."""
user = 2
"""Represents a permission that affects users."""
channel = 3
"""Represents a permission that affects channels."""
def __int__(self) -> int:
return self.value
class OptionType(Enum):
"""Represents the type of an option.
.. versionadded:: 2.1
"""
sub_command = 1
"""Represents a sub command of the main command or group."""
sub_command_group = 2
"""Represents a sub command group of the main command."""
string = 3
"""Represents a string option."""
integer = 4
"""Represents an integer option."""
boolean = 5
"""Represents a boolean option."""
user = 6
"""Represents a user option."""
channel = 7
"""Represents a channel option."""
role = 8
"""Represents a role option."""
mentionable = 9
"""Represents a role + user option."""
number = 10
"""Represents a float option."""
attachment = 11
"""Represents an attachment option.
.. versionadded:: 2.4
"""
class StagePrivacyLevel(Enum):
"""Represents a stage instance's privacy level.
.. versionadded:: 2.0
"""
public = 1
"""The stage instance can be joined by external users.
.. deprecated:: 2.5
Public stages are no longer supported by discord.
"""
closed = 2
"""The stage instance can only be joined by members of the guild."""
guild_only = 2
"""Alias for :attr:`.closed`"""
class NSFWLevel(Enum, comparable=True):
"""Represents the NSFW level of a guild.
.. versionadded:: 2.0
.. collapse:: operations
.. describe:: x == y
Checks if two NSFW levels are equal.
.. describe:: x != y
Checks if two NSFW levels are not equal.
.. describe:: x > y
Checks if an NSFW level is higher than another.
.. describe:: x < y
Checks if an NSFW level is lower than another.
.. describe:: x >= y
Checks if an NSFW level is higher or equal to another.
.. describe:: x <= y
Checks if an NSFW level is lower or equal to another.
"""
default = 0
"""The guild has not been categorised yet."""
explicit = 1
"""The guild contains NSFW content."""
safe = 2
"""The guild does not contain any NSFW content."""
age_restricted = 3
"""The guild may contain NSFW content."""
class GuildScheduledEventEntityType(Enum):
"""Represents the type of a guild scheduled event entity.
.. versionadded:: 2.3
"""
stage_instance = 1
"""The guild scheduled event will take place in a stage channel."""
voice = 2
"""The guild scheduled event will take place in a voice channel."""
external = 3
"""The guild scheduled event will take place in a custom location."""
class GuildScheduledEventStatus(Enum):
"""Represents the status of a guild scheduled event.
.. versionadded:: 2.3
"""
scheduled = 1
"""Represents a scheduled event."""
active = 2
"""Represents an active event."""
completed = 3
"""Represents a completed event."""
canceled = 4
"""Represents a canceled event."""
cancelled = 4
"""An alias for :attr:`canceled`.
.. versionadded:: 2.6
"""
class GuildScheduledEventPrivacyLevel(Enum):
"""Represents the privacy level of a guild scheduled event.
.. versionadded:: 2.3
"""
guild_only = 2
"""The guild scheduled event is only for a specific guild."""
class ThreadArchiveDuration(Enum):
"""Represents the automatic archive duration of a thread in minutes.
.. versionadded:: 2.3
"""
hour = 60
"""The thread will archive after an hour of inactivity."""
day = 1440
"""The thread will archive after a day of inactivity."""
three_days = 4320
"""The thread will archive after three days of inactivity."""
week = 10080
"""The thread will archive after a week of inactivity."""
def __int__(self) -> int:
return self.value
class WidgetStyle(Enum):
"""Represents the supported widget image styles.
.. versionadded:: 2.5
"""
shield = "shield"
"""A shield style image with a Discord icon and the online member count."""
banner1 = "banner1"
"""A large image with guild icon, name and online member count and a footer."""
banner2 = "banner2"
"""A small image with guild icon, name and online member count."""
banner3 = "banner3"
"""A large image with guild icon, name and online member count and a footer,
with a "Chat Now" label on the right.
"""
banner4 = "banner4"
"""A large image with a large Discord logo, guild icon, name and online member count,
with a "Join My Server" label at the bottom.
"""
def __str__(self) -> str:
return self.value
# reference: https://discord.com/developers/docs/reference#locales
class Locale(Enum):
"""Represents supported locales by Discord.
.. versionadded:: 2.5
"""
bg = "bg"
"""The ``bg`` (Bulgarian) locale."""
cs = "cs"
"""The ``cs`` (Czech) locale."""
da = "da"
"""The ``da`` (Danish) locale."""
de = "de"
"""The ``de`` (German) locale."""
el = "el"
"""The ``el`` (Greek) locale."""
en_GB = "en-GB"
"""The ``en-GB`` (English, UK) locale."""
en_US = "en-US"
"""The ``en-US`` (English, US) locale."""
es_ES = "es-ES"
"""The ``es-ES`` (Spanish) locale."""
es_LATAM = "es-419"
"""The ``es-419`` (Spanish, LATAM) locale.
.. versionadded:: 2.10
"""
fi = "fi"
"""The ``fi`` (Finnish) locale."""
fr = "fr"
"""The ``fr`` (French) locale."""
hi = "hi"
"""The ``hi`` (Hindi) locale."""
hr = "hr"
"""The ``hr`` (Croatian) locale."""
hu = "hu"
"""The ``hu`` (Hungarian) locale."""
id = "id"
"""The ``id`` (Indonesian) locale.
.. versionadded:: 2.8
"""
it = "it"
"""The ``it`` (Italian) locale."""
ja = "ja"
"""The ``ja`` (Japanese) locale."""
ko = "ko"
"""The ``ko`` (Korean) locale."""
lt = "lt"
"""The ``lt`` (Lithuanian) locale."""
nl = "nl"
"""The ``nl`` (Dutch) locale."""
no = "no"
"""The ``no`` (Norwegian) locale."""
pl = "pl"
"""The ``pl`` (Polish) locale."""
pt_BR = "pt-BR"
"""The ``pt-BR`` (Portuguese) locale."""
ro = "ro"
"""The ``ro`` (Romanian) locale."""
ru = "ru"
"""The ``ru`` (Russian) locale."""
sv_SE = "sv-SE"
"""The ``sv-SE`` (Swedish) locale."""
th = "th"
"""The ``th`` (Thai) locale."""
tr = "tr"
"""The ``tr`` (Turkish) locale."""
uk = "uk"
"""The ``uk`` (Ukrainian) locale."""
vi = "vi"
"""The ``vi`` (Vietnamese) locale."""
zh_CN = "zh-CN"
"""The ``zh-CN`` (Chinese, China) locale."""
zh_TW = "zh-TW"
"""The ``zh-TW`` (Chinese, Taiwan) locale."""
def __str__(self) -> str:
return self.value
class AutoModActionType(Enum):
"""Represents the type of action an auto moderation rule will take upon execution.
.. versionadded:: 2.6
"""
block_message = 1
"""The rule will prevent matching messages from being posted."""
send_alert_message = 2
"""The rule will send an alert to a specified channel."""
timeout = 3
"""The rule will timeout the user that sent the message.
.. note::
This action type is only available for rules with trigger type
:attr:`~AutoModTriggerType.keyword` or :attr:`~AutoModTriggerType.mention_spam`,
and :attr:`~Permissions.moderate_members` permissions are required to use it.
"""
class AutoModEventType(Enum):
"""Represents the type of event/context an auto moderation rule will be checked in.
.. versionadded:: 2.6
"""
message_send = 1
"""The rule will apply when a member sends or edits a message in the guild."""
class AutoModTriggerType(Enum):
"""Represents the type of content that can trigger an auto moderation rule.
.. versionadded:: 2.6
.. versionchanged:: 2.9
Removed obsolete ``harmful_link`` type.
"""
keyword = 1
"""The rule will filter messages based on a custom keyword list.
This trigger type requires additional :class:`metadata <AutoModTriggerMetadata>`.
"""
if not TYPE_CHECKING:
harmful_link = 2 # obsolete/deprecated
spam = 3
"""The rule will filter messages suspected of being spam."""
keyword_preset = 4
"""The rule will filter messages based on predefined lists containing commonly flagged words.
This trigger type requires additional :class:`metadata <AutoModTriggerMetadata>`.
"""
mention_spam = 5
"""The rule will filter messages based on the number of member/role mentions they contain.
This trigger type requires additional :class:`metadata <AutoModTriggerMetadata>`.
"""
class ThreadSortOrder(Enum):
"""Represents the sort order of threads in a :class:`ForumChannel` or :class:`MediaChannel`.
.. versionadded:: 2.6
"""
latest_activity = 0
"""Sort forum threads by activity."""
creation_date = 1
"""Sort forum threads by creation date/time (from newest to oldest)."""
class ThreadLayout(Enum):
"""Represents the layout of threads in :class:`ForumChannel`\\s.
.. versionadded:: 2.8
"""
not_set = 0
"""No preferred layout has been set."""
list_view = 1
"""Display forum threads in a text-focused list."""
gallery_view = 2
"""Display forum threads in a media-focused collection of tiles."""
class Event(Enum):
"""
Represents all the events of the library.
These offer to register listeners/events in a more pythonic way; additionally autocompletion and documentation are both supported.
.. versionadded:: 2.8
"""
connect = "connect"
"""Called when the client has successfully connected to Discord.
Represents the :func:`on_connect` event.
"""
disconnect = "disconnect"
"""Called when the client has disconnected from Discord, or a connection attempt to Discord has failed.
Represents the :func:`on_disconnect` event.
"""
error = "error"
"""Called when an uncaught exception occurred.
Represents the :func:`on_error` event.
"""
gateway_error = "gateway_error"
"""Called when a known gateway event cannot be parsed.
Represents the :func:`on_gateway_error` event.
"""
ready = "ready"
"""Called when the client is done preparing the data received from Discord.
Represents the :func:`on_ready` event.
"""
resumed = "resumed"
"""Called when the client has resumed a session.
Represents the :func:`on_resumed` event.
"""
shard_connect = "shard_connect"
"""Called when a shard has successfully connected to Discord.
Represents the :func:`on_shard_connect` event.
"""
shard_disconnect = "shard_disconnect"
"""Called when a shard has disconnected from Discord.
Represents the :func:`on_shard_disconnect` event.
"""
shard_ready = "shard_ready"
"""Called when a shard has become ready.
Represents the :func:`on_shard_ready` event.
"""
shard_resumed = "shard_resumed"
"""Called when a shard has resumed a session.
Represents the :func:`on_shard_resumed` event.
"""
socket_event_type = "socket_event_type"
"""Called whenever a websocket event is received from the WebSocket.
Represents the :func:`on_socket_event_type` event.
"""
socket_raw_receive = "socket_raw_receive"
"""Called whenever a message is completely received from the WebSocket, before it's processed and parsed.
Represents the :func:`on_socket_raw_receive` event.
"""
socket_raw_send = "socket_raw_send"
"""Called whenever a send operation is done on the WebSocket before the message is sent.
Represents the :func:`on_socket_raw_send` event.
"""
guild_channel_create = "guild_channel_create"
"""Called whenever a guild channel is created.
Represents the :func:`on_guild_channel_create` event.
"""
guild_channel_update = "guild_channel_update"
"""Called whenever a guild channel is updated.
Represents the :func:`on_guild_channel_update` event.
"""
guild_channel_delete = "guild_channel_delete"
"""Called whenever a guild channel is deleted.
Represents the :func:`on_guild_channel_delete` event.
"""
guild_channel_pins_update = "guild_channel_pins_update"
"""Called whenever a message is pinned or unpinned from a guild channel.
Represents the :func:`on_guild_channel_pins_update` event.
"""
invite_create = "invite_create"
"""Called when an :class:`Invite` is created.
Represents the :func:`.on_invite_create` event.
"""
invite_delete = "invite_delete"
"""Called when an Invite is deleted.
Represents the :func:`.on_invite_delete` event.
"""
private_channel_update = "private_channel_update"
"""Called whenever a private group DM is updated.
Represents the :func:`on_private_channel_update` event.
"""
private_channel_pins_update = "private_channel_pins_update"
"""Called whenever a message is pinned or unpinned from a private channel.
Represents the :func:`on_private_channel_pins_update` event.
"""
webhooks_update = "webhooks_update"
"""Called whenever a webhook is created, modified, or removed from a guild channel.
Represents the :func:`on_webhooks_update` event.
"""
thread_create = "thread_create"
"""Called whenever a thread is created.
Represents the :func:`on_thread_create` event.
"""
thread_update = "thread_update"
"""Called when a thread is updated.
Represents the :func:`on_thread_update` event.
"""
thread_delete = "thread_delete"
"""Called when a thread is deleted.
Represents the :func:`on_thread_delete` event.
"""
thread_join = "thread_join"
"""Called whenever the bot joins a thread or gets access to a thread.
Represents the :func:`on_thread_join` event.
"""
thread_remove = "thread_remove"
"""Called whenever a thread is removed. This is different from a thread being deleted.
Represents the :func:`on_thread_remove` event.
"""
thread_member_join = "thread_member_join"
"""Called when a `ThreadMember` joins a `Thread`.
Represents the :func:`on_thread_member_join` event.
"""
thread_member_remove = "thread_member_remove"
"""Called when a `ThreadMember` leaves a `Thread`.
Represents the :func:`on_thread_member_remove` event.
"""
raw_thread_member_remove = "raw_thread_member_remove"
"""Called when a `ThreadMember` leaves `Thread` regardless of the thread member cache.
Represents the :func:`on_raw_thread_member_remove` event.
"""
raw_thread_update = "raw_thread_update"
"""Called whenever a thread is updated regardless of the state of the internal thread cache.
Represents the :func:`on_raw_thread_update` event.
"""
raw_thread_delete = "raw_thread_delete"
"""Called whenever a thread is deleted regardless of the state of the internal thread cache.
Represents the :func:`on_raw_thread_delete` event.
"""
guild_join = "guild_join"
"""Called when a `Guild` is either created by the `Client` or when the Client joins a guild.
Represents the :func:`on_guild_join` event.
"""
guild_remove = "guild_remove"
"""Called when a `Guild` is removed from the :class:`Client`.
Represents the :func:`on_guild_remove` event.
"""
guild_update = "guild_update"
"""Called when a `Guild` updates.
Represents the :func:`on_guild_update` event.
"""
guild_available = "guild_available"
"""Called when a guild becomes available.
Represents the :func:`on_guild_available` event.
"""
guild_unavailable = "guild_unavailable"
"""Called when a guild becomes unavailable.
Represents the :func:`on_guild_unavailable` event.
"""
guild_role_create = "guild_role_create"
"""Called when a `Guild` creates a new `Role`.
Represents the :func:`on_guild_role_create` event.
"""
guild_role_delete = "guild_role_delete"
"""Called when a `Guild` deletes a `Role`.
Represents the :func:`on_guild_role_delete` event.
"""
guild_role_update = "guild_role_update"
"""Called when a `Guild` updates a `Role`.
Represents the :func:`on_guild_role_update` event.
"""
guild_emojis_update = "guild_emojis_update"
"""Called when a `Guild` adds or removes `Emoji`.
Represents the :func:`on_guild_emojis_update` event.
"""
guild_stickers_update = "guild_stickers_update"
"""Called when a `Guild` updates its stickers.
Represents the :func:`on_guild_stickers_update` event.
"""
guild_soundboard_sounds_update = "guild_soundboard_sounds_update"
"""Called when a `Guild` updates its soundboard sounds.
Represents the :func:`on_guild_soundboard_sounds_update` event.
.. versionadded:: 2.10
"""
guild_integrations_update = "guild_integrations_update"
"""Called whenever an integration is created, modified, or removed from a guild.
Represents the :func:`on_guild_integrations_update` event.
"""
guild_scheduled_event_create = "guild_scheduled_event_create"
"""Called when a guild scheduled event is created.
Represents the :func:`on_guild_scheduled_event_create` event.
"""
guild_scheduled_event_update = "guild_scheduled_event_update"
"""Called when a guild scheduled event is updated.
Represents the :func:`on_guild_scheduled_event_update` event.
"""
guild_scheduled_event_delete = "guild_scheduled_event_delete"
"""Called when a guild scheduled event is deleted.
Represents the :func:`on_guild_scheduled_event_delete` event.
"""
guild_scheduled_event_subscribe = "guild_scheduled_event_subscribe"
"""Called when a user subscribes from a guild scheduled event.
Represents the :func:`on_guild_scheduled_event_subscribe` event.
"""
guild_scheduled_event_unsubscribe = "guild_scheduled_event_unsubscribe"
"""Called when a user unsubscribes from a guild scheduled event.
Represents the :func:`on_guild_scheduled_event_unsubscribe` event.
"""
raw_guild_scheduled_event_subscribe = "raw_guild_scheduled_event_subscribe"
"""Called when a user subscribes from a guild scheduled event regardless of the guild scheduled event cache.
Represents the :func:`on_raw_guild_scheduled_event_subscribe` event.
"""
raw_guild_scheduled_event_unsubscribe = "raw_guild_scheduled_event_unsubscribe"
"""Called when a user subscribes to or unsubscribes from a guild scheduled event regardless of the guild scheduled event cache.
Represents the :func:`on_raw_guild_scheduled_event_unsubscribe` event.
"""
application_command_permissions_update = "application_command_permissions_update"
"""Called when the permissions of an application command or the application-wide command permissions are updated.
Represents the :func:`on_application_command_permissions_update` event.
"""
automod_action_execution = "automod_action_execution"
"""Called when an auto moderation action is executed due to a rule triggering for a particular event.
Represents the :func:`on_automod_action_execution` event.
"""
automod_rule_create = "automod_rule_create"
"""Called when an `AutoModRule` is created.
Represents the :func:`on_automod_rule_create` event.
"""
automod_rule_update = "automod_rule_update"
"""Called when an `AutoModRule` is updated.
Represents the :func:`on_automod_rule_update` event.
"""
automod_rule_delete = "automod_rule_delete"
"""Called when an `AutoModRule` is deleted.
Represents the :func:`on_automod_rule_delete` event.
"""
audit_log_entry_create = "audit_log_entry_create"
"""Called when an audit log entry is created.
Represents the :func:`on_audit_log_entry_create` event.
"""
integration_create = "integration_create"
"""Called when an integration is created.
Represents the :func:`on_integration_create` event.
"""
integration_update = "integration_update"
"""Called when an integration is updated.
Represents the :func:`on_integration_update` event.
"""
raw_integration_delete = "raw_integration_delete"
"""Called when an integration is deleted.
Represents the :func:`on_raw_integration_delete` event.
"""
member_join = "member_join"
"""Called when a `Member` joins a `Guild`.
Represents the :func:`on_member_join` event.
"""
member_remove = "member_remove"
"""Called when a `Member` leaves a `Guild`.
Represents the :func:`on_member_remove` event.
"""
member_update = "member_update"
"""Called when a `Member` is updated in a `Guild`.
Represents the :func:`on_member_update` event.
"""
raw_member_remove = "raw_member_remove"
"""Called when a member leaves a `Guild` regardless of the member cache.
Represents the :func:`on_raw_member_remove` event.
"""
raw_member_update = "raw_member_update"
"""Called when a `Member` is updated in a `Guild` regardless of the member cache.
Represents the :func:`on_raw_member_update` event.
"""
member_ban = "member_ban"
"""Called when user gets banned from a `Guild`.
Represents the :func:`on_member_ban` event.
"""
member_unban = "member_unban"
"""Called when a `User` gets unbanned from a `Guild`.
Represents the :func:`on_member_unban` event.
"""
presence_update = "presence_update"
"""Called when a `Member` updates their presence.
Represents the :func:`on_presence_update` event.
"""
user_update = "user_update"
"""Called when a `User` is updated.
Represents the :func:`on_user_update` event.
"""
voice_state_update = "voice_state_update"
"""Called when a `Member` changes their `VoiceState`.
Represents the :func:`on_voice_state_update` event.
"""
voice_channel_effect = "voice_channel_effect"
"""Called when a `Member` sends an effect in a voice channel the bot is connected to.
Represents the :func:`on_voice_channel_effect` event.
.. versionadded:: 2.10
"""
raw_voice_channel_effect = "raw_voice_channel_effect"
"""Called when a `Member` sends an effect in a voice channel the bot is connected to,
regardless of the member cache.
Represents the :func:`on_raw_voice_channel_effect` event.
.. versionadded:: 2.10
"""
stage_instance_create = "stage_instance_create"
"""Called when a `StageInstance` is created for a `StageChannel`.
Represents the :func:`on_stage_instance_create` event.
"""
stage_instance_delete = "stage_instance_delete"
"""Called when a `StageInstance` is deleted for a `StageChannel`.
Represents the :func:`on_stage_instance_delete` event.
"""
stage_instance_update = "stage_instance_update"
"""Called when a `StageInstance` is updated.
Represents the :func:`on_stage_instance_update` event.
"""
application_command = "application_command"
"""Called when an application command is invoked.
Represents the :func:`on_application_command` event.
"""
application_command_autocomplete = "application_command_autocomplete"
"""Called when an application command autocomplete is called.
Represents the :func:`on_application_command_autocomplete` event.
"""
button_click = "button_click"
"""Called when a button is clicked.
Represents the :func:`on_button_click` event.
"""
dropdown = "dropdown"
"""Called when a select menu is clicked.
Represents the :func:`on_dropdown` event.
"""
interaction = "interaction"
"""Called when an interaction happened.
Represents the :func:`on_interaction` event.
"""
message_interaction = "message_interaction"
"""Called when a message interaction happened.
Represents the :func:`on_message_interaction` event.
"""
modal_submit = "modal_submit"
"""Called when a modal is submitted.
Represents the :func:`on_modal_submit` event.
"""
message = "message"
"""Called when a `Message` is created and sent.
Represents the :func:`on_message` event.
"""
message_edit = "message_edit"
"""Called when a `Message` receives an update event.
Represents the :func:`on_message_edit` event.
"""
message_delete = "message_delete"
"""Called when a message is deleted.
Represents the :func:`on_message_delete` event.
"""
bulk_message_delete = "bulk_message_delete"
"""Called when messages are bulk deleted.
Represents the :func:`on_bulk_message_delete` event.
"""
poll_vote_add = "poll_vote_add"
"""Called when a vote is added on a `Poll`.
Represents the :func:`on_poll_vote_add` event.
"""
poll_vote_remove = "poll_vote_remove"
"""Called when a vote is removed from a `Poll`.
Represents the :func:`on_poll_vote_remove` event.
"""
raw_message_edit = "raw_message_edit"
"""Called when a message is edited regardless of the state of the internal message cache.
Represents the :func:`on_raw_message_edit` event.
"""
raw_message_delete = "raw_message_delete"
"""Called when a message is deleted regardless of the message being in the internal message cache or not.
Represents the :func:`on_raw_message_delete` event.
"""
raw_bulk_message_delete = "raw_bulk_message_delete"
"""Called when a bulk delete is triggered regardless of the messages being in the internal message cache or not.
Represents the :func:`on_raw_bulk_message_delete` event.
"""
raw_poll_vote_add = "raw_poll_vote_add"
"""Called when a vote is added on a `Poll` regardless of the internal message cache.
Represents the :func:`on_raw_poll_vote_add` event.
"""
raw_poll_vote_remove = "raw_poll_vote_remove"
"""Called when a vote is removed from a `Poll` regardless of the internal message cache.
Represents the :func:`on_raw_poll_vote_remove` event.
"""
reaction_add = "reaction_add"
"""Called when a message has a reaction added to it.
Represents the :func:`on_reaction_add` event.
"""
reaction_remove = "reaction_remove"
"""Called when a message has a reaction removed from it.
Represents the :func:`on_reaction_remove` event.
"""
reaction_clear = "reaction_clear"
"""Called when a message has all its reactions removed from it.
Represents the :func:`on_reaction_clear` event.
"""
reaction_clear_emoji = "reaction_clear_emoji"
"""Called when a message has a specific reaction removed from it.
Represents the :func:`on_reaction_clear_emoji` event.
"""
raw_presence_update = "raw_presence_update"
"""Called when a user's presence changes regardless of the state of the internal member cache.
Represents the :func:`on_raw_presence_update` event.
"""
raw_reaction_add = "raw_reaction_add"
"""Called when a message has a reaction added regardless of the state of the internal message cache.
Represents the :func:`on_raw_reaction_add` event.
"""
raw_reaction_remove = "raw_reaction_remove"
"""Called when a message has a reaction removed regardless of the state of the internal message cache.
Represents the :func:`on_raw_reaction_remove` event.
"""
raw_reaction_clear = "raw_reaction_clear"
"""Called when a message has all its reactions removed regardless of the state of the internal message cache.
Represents the :func:`on_raw_reaction_clear` event.
"""
raw_reaction_clear_emoji = "raw_reaction_clear_emoji"
"""Called when a message has a specific reaction removed from it regardless of the state of the internal message cache.
Represents the :func:`on_raw_reaction_clear_emoji` event.
"""
typing = "typing"
"""Called when someone begins typing a message.
Represents the :func:`on_typing` event.
"""
raw_typing = "raw_typing"
"""Called when someone begins typing a message regardless of whether `Intents.members` and `Intents.guilds` are enabled.
Represents the :func:`on_raw_typing` event.
"""
entitlement_create = "entitlement_create"
"""Called when a user subscribes to an SKU, creating a new :class:`Entitlement`.
Represents the :func:`on_entitlement_create` event.
.. versionadded:: 2.10
"""
entitlement_update = "entitlement_update"
"""Called when a user's subscription renews.
Represents the :func:`on_entitlement_update` event.
.. versionadded:: 2.10
"""
entitlement_delete = "entitlement_delete"
"""Called when a user's entitlement is deleted.
Represents the :func:`on_entitlement_delete` event."""
subscription_create = "subscription_create"
"""Called when a subscription for a premium app is created.
Represents the :func:`on_subscription_create` event.
.. versionadded:: 2.10
"""
subscription_update = "subscription_update"
"""Called when a subscription for a premium app is updated.
Represents the :func:`on_subscription_update` event.
.. versionadded:: 2.10
"""
subscription_delete = "subscription_delete"
"""Called when a subscription for a premium app is deleted.
Represents the :func:`on_subscription_delete` event.
.. versionadded:: 2.10
"""
# ext.commands events
command = "command"
"""Called when a command is found and is about to be invoked.
Represents the :func:`.on_command` event.
"""
command_completion = "command_completion"
"""Called when a command has completed its invocation.
Represents the :func:`.on_command_completion` event.
"""
command_error = "command_error"
"""Called when an error is raised inside a command either through user input error, check failure, or an error in your own code.
Represents the :func:`.on_command_error` event.
"""
slash_command = "slash_command"
"""Called when a slash command is found and is about to be invoked.
Represents the :func:`.on_slash_command` event.
"""
slash_command_completion = "slash_command_completion"
"""Called when a slash command has completed its invocation.
Represents the :func:`.on_slash_command_completion` event.
"""
slash_command_error = "slash_command_error"
"""Called when an error is raised inside a slash command either through user input error, check failure, or an error in your own code.
Represents the :func:`.on_slash_command_error` event.
"""
user_command = "user_command"
"""Called when a user command is found and is about to be invoked.
Represents the :func:`.on_user_command` event.
"""
user_command_completion = "user_command_completion"
"""Called when a user command has completed its invocation.
Represents the :func:`.on_user_command_completion` event.
"""
user_command_error = "user_command_error"
"""Called when an error is raised inside a user command either through check failure, or an error in your own code.
Represents the :func:`.on_user_command_error` event.
"""
message_command = "message_command"
"""Called when a message command is found and is about to be invoked.
Represents the :func:`.on_message_command` event.
"""
message_command_completion = "message_command_completion"
"""Called when a message command has completed its invocation.
Represents the :func:`.on_message_command_completion` event.
"""
message_command_error = "message_command_error"
"""Called when an error is raised inside a message command either through check failure, or an error in your own code.
Represents the :func:`.on_message_command_error` event.
"""
class ApplicationRoleConnectionMetadataType(Enum):
"""Represents the type of a role connection metadata value.
These offer comparison operations, which allow guilds to configure role requirements
based on the metadata value for each user and a guild-specified configured value.
.. versionadded:: 2.8
"""
integer_less_than_or_equal = 1
"""The metadata value (``integer``) is less than or equal to the guild's configured value."""
integer_greater_than_or_equal = 2
"""The metadata value (``integer``) is greater than or equal to the guild's configured value."""
integer_equal = 3
"""The metadata value (``integer``) is equal to the guild's configured value."""
integer_not_equal = 4
"""The metadata value (``integer``) is not equal to the guild's configured value."""
datetime_less_than_or_equal = 5
"""The metadata value (``ISO8601 string``) is less than or equal to the guild's configured value (``integer``; days before current date)."""
datetime_greater_than_or_equal = 6
"""The metadata value (``ISO8601 string``) is greater than or equal to the guild's configured value (``integer``; days before current date)."""
boolean_equal = 7
"""The metadata value (``integer``) is equal to the guild's configured value."""
boolean_not_equal = 8
"""The metadata value (``integer``) is not equal to the guild's configured value."""
class ApplicationEventWebhookStatus(Enum):
"""Represents the status of an application event webhook.
.. versionadded:: 2.11
"""
disabled = 1
"""Webhook events are disabled by developer."""
enabled = 2
"""Webhook events are enabled by developer."""
disabled_by_discord = 3
"""Webhook events are disabled by Discord, usually due to inactivity."""
class OnboardingPromptType(Enum):
"""Represents the type of onboarding prompt.
.. versionadded:: 2.9
"""
multiple_choice = 0
"""The prompt is a multiple choice prompt."""
dropdown = 1
"""The prompt is a dropdown prompt."""
class SKUType(Enum):
"""Represents the type of an SKU.
.. versionadded:: 2.10
"""
durable = 2
"""Represents a durable one-time purchase."""
consumable = 3
"""Represents a consumable one-time purchase."""
subscription = 5
"""Represents a recurring subscription."""
subscription_group = 6
"""Represents a system-generated group for each :attr:`subscription` SKU."""
class EntitlementType(Enum):
"""Represents the type of an entitlement.
.. versionadded:: 2.10
"""
purchase = 1
"""Represents an entitlement purchased by a user."""
premium_subscription = 2
"""Represents an entitlement for a Discord Nitro subscription."""
developer_gift = 3
"""Represents an entitlement gifted by the application developer."""
test_mode_purchase = 4
"""Represents an entitlement purchased by a developer in application test mode."""
free_purchase = 5
"""Represents an entitlement granted when the SKU was free."""
user_gift = 6
"""Represents an entitlement gifted by another user."""
premium_purchase = 7
"""Represents an entitlement claimed by a user for free as a Discord Nitro subscriber."""
application_subscription = 8
"""Represents an entitlement for an application subscription."""
class SubscriptionStatus(Enum):
"""Represents the status of a subscription.
.. versionadded:: 2.10
"""
active = 0
"""Represents an active Subscription which is scheduled to renew."""
ending = 1
"""Represents an active Subscription which will not renew."""
inactive = 2
"""Represents an inactive Subscription which is not being charged."""
class PollLayoutType(Enum):
"""Specifies the layout of a :class:`Poll`.
.. versionadded:: 2.10
"""
default = 1
"""The default poll layout type."""
class VoiceChannelEffectAnimationType(Enum):
"""The type of an emoji reaction effect animation in a voice channel.
.. versionadded:: 2.10
"""
premium = 0
"""A fun animation, sent by a Nitro subscriber."""
basic = 1
"""A standard animation."""
class MessageReferenceType(Enum):
"""Specifies the type of :class:`MessageReference`. This can be used to determine
if a message is e.g. a reply or a forwarded message.
.. versionadded:: 2.10
"""
default = 0
"""A standard message reference used in message replies."""
forward = 1
"""Reference used to point to a message at a point in time (forward)."""
class SeparatorSpacing(Enum):
"""Specifies the size of a :class:`Separator` component's padding.
.. versionadded:: 2.11
"""
small = 1
"""Small spacing."""
large = 2
"""Large spacing."""
class NameplatePalette(Enum):
"""Specifies the palette of a :class:`Nameplate`.
.. versionadded:: 2.11
"""
crimson = "crimson"
"""Crimson color palette."""
berry = "berry"
"""Berry color palette."""
sky = "sky"
"""Sky color palette."""
teal = "teal"
"""Teal color palette."""
forest = "forest"
"""Forest color palette."""
bubble_gum = "bubble_gum"
"""Bubble gum color palette."""
violet = "violet"
"""Violet color palette."""
cobalt = "cobalt"
"""Cobalt color palette."""
clover = "clover"
"""Clover color palette."""
lemon = "lemon"
"""Lemon color palette."""
white = "white"
"""White color palette."""
T = TypeVar("T")
def create_unknown_value(cls: Type[T], val: Any) -> T:
value_cls = cls._enum_value_cls_ # type: ignore
name = f"unknown_{val}"
return value_cls(name=name, value=val)
def try_enum(cls: Type[T], val: Any) -> T:
"""A function that tries to turn the value into enum ``cls``.
If it fails it returns a proxy invalid value instead.
"""
try:
return cls._enum_value_map_[val] # type: ignore
except (KeyError, TypeError, AttributeError):
return create_unknown_value(cls, val)
def enum_if_int(cls: Type[T], val: Any) -> T:
"""A function that tries to turn the value into enum ``cls``.
If it fails it returns a proxy invalid value instead.
"""
if not isinstance(val, int):
return val
return try_enum(cls, val)
def try_enum_to_int(val: Any) -> Any:
if isinstance(val, int):
return val
try:
return val.value
except Exception:
return val