# 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"" @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 `. """ 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 `. """ 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 `. """ 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