# 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", "DefaultAvatar", "AuditLogAction", "AuditLogActionCategory", "UserFlags", "ActivityType", "NotificationLevel", "TeamMembershipState", "WebhookType", "ExpireBehaviour", "ExpireBehavior", "StickerType", "StickerFormatType", "InviteTarget", "VideoQualityMode", "ComponentType", "ButtonStyle", "TextInputStyle", "StagePrivacyLevel", "InteractionType", "InteractionResponseType", "NSFWLevel", "OptionType", "ApplicationCommandType", "ApplicationCommandPermissionType", "PartyType", "GuildScheduledEventEntityType", "GuildScheduledEventStatus", "GuildScheduledEventPrivacyLevel", "ThreadArchiveDuration", "WidgetStyle", "Locale", "AutoModTriggerType", "AutoModEventType", "AutoModActionType", "ThreadSortOrder", "ThreadLayout", "Event", "ApplicationRoleConnectionMetadataType", "OnboardingPromptType", ) 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): 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]] def __new__(cls, name: str, bases, attrs, *, comparable: bool = False): 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): 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): return cls._enum_member_map_[key] def __setattr__(cls, name: str, value) -> 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): try: return cls._enum_value_map_[value] except (KeyError, TypeError): return value class ChannelType(Enum): text = 0 private = 1 voice = 2 group = 3 category = 4 news = 5 news_thread = 10 public_thread = 11 private_thread = 12 stage_voice = 13 guild_directory = 14 forum = 15 def __str__(self) -> str: return self.name class MessageType(Enum): default = 0 recipient_add = 1 recipient_remove = 2 call = 3 channel_name_change = 4 channel_icon_change = 5 pins_add = 6 new_member = 7 premium_guild_subscription = 8 premium_guild_tier_1 = 9 premium_guild_tier_2 = 10 premium_guild_tier_3 = 11 channel_follow_add = 12 guild_stream = 13 guild_discovery_disqualified = 14 guild_discovery_requalified = 15 guild_discovery_grace_period_initial_warning = 16 guild_discovery_grace_period_final_warning = 17 thread_created = 18 reply = 19 application_command = 20 thread_starter_message = 21 guild_invite_reminder = 22 context_menu_command = 23 auto_moderation_action = 24 role_subscription_purchase = 25 interaction_premium_upsell = 26 stage_start = 27 stage_end = 28 stage_speaker = 29 stage_topic = 31 guild_application_premium_subscription = 32 class PartyType(Enum): poker = 755827207812677713 betrayal = 773336526917861400 fishing = 814288819477020702 chess = 832012774040141894 letter_tile = 879863686565621790 word_snack = 879863976006127627 doodle_crew = 878067389634314250 checkers = 832013003968348200 spellcast = 852509694341283871 watch_together = 880218394199220334 sketch_heads = 902271654783242291 ocho = 832025144389533716 gartic_phone = 1007373802981822582 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): none = 0 low = 1 medium = 2 high = 3 highest = 4 def __str__(self) -> str: return self.name class ContentFilter(Enum, comparable=True): disabled = 0 no_role = 1 all_members = 2 def __str__(self) -> str: return self.name class Status(Enum): online = "online" offline = "offline" idle = "idle" dnd = "dnd" do_not_disturb = "dnd" invisible = "invisible" streaming = "streaming" def __str__(self) -> str: return self.value class DefaultAvatar(Enum): blurple = 0 grey = 1 gray = 1 green = 2 orange = 3 red = 4 fuchsia = 5 def __str__(self) -> str: return self.name class NotificationLevel(Enum, comparable=True): all_messages = 0 only_mentions = 1 class AuditLogActionCategory(Enum): create = 1 delete = 2 update = 3 class AuditLogAction(Enum): # 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 automod_rule_create = 140 automod_rule_update = 141 automod_rule_delete = 142 automod_block_message = 143 automod_send_alert_message = 144 automod_timeout = 145 # 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.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, } # fmt: on return lookup[self] @property def target_type(self) -> Optional[str]: v = self.value if v == -1: 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 < 146: return "user" else: return None class UserFlags(Enum): staff = 1 << 0 partner = 1 << 1 hypesquad = 1 << 2 bug_hunter = 1 << 3 mfa_sms = 1 << 4 premium_promo_dismissed = 1 << 5 hypesquad_bravery = 1 << 6 hypesquad_brilliance = 1 << 7 hypesquad_balance = 1 << 8 early_supporter = 1 << 9 team_user = 1 << 10 system = 1 << 12 has_unread_urgent_messages = 1 << 13 bug_hunter_level_2 = 1 << 14 verified_bot = 1 << 16 verified_bot_developer = 1 << 17 discord_certified_moderator = 1 << 18 http_interactions_bot = 1 << 19 spammer = 1 << 20 active_developer = 1 << 22 class ActivityType(Enum): unknown = -1 playing = 0 streaming = 1 listening = 2 watching = 3 custom = 4 competing = 5 def __int__(self) -> int: return self.value class TeamMembershipState(Enum): invited = 1 accepted = 2 class WebhookType(Enum): incoming = 1 channel_follower = 2 application = 3 class ExpireBehaviour(Enum): remove_role = 0 kick = 1 ExpireBehavior = ExpireBehaviour class StickerType(Enum): standard = 1 guild = 2 class StickerFormatType(Enum): png = 1 apng = 2 lottie = 3 gif = 4 @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 InviteTarget(Enum): unknown = 0 stream = 1 embedded_application = 2 class InteractionType(Enum): ping = 1 application_command = 2 component = 3 application_command_autocomplete = 4 modal_submit = 5 class InteractionResponseType(Enum): pong = 1 # ack = 2 (deprecated) # channel_message = 3 (deprecated) channel_message = 4 # (with source) deferred_channel_message = 5 # (with source) deferred_message_update = 6 # for components message_update = 7 # for components application_command_autocomplete_result = 8 # for autocomplete modal = 9 # for modals class VideoQualityMode(Enum): auto = 1 full = 2 def __int__(self) -> int: return self.value class ComponentType(Enum): action_row = 1 button = 2 string_select = 3 select = string_select # backwards compatibility text_input = 4 user_select = 5 role_select = 6 mentionable_select = 7 channel_select = 8 def __int__(self) -> int: return self.value class ButtonStyle(Enum): primary = 1 secondary = 2 success = 3 danger = 4 link = 5 # Aliases blurple = 1 grey = 2 gray = 2 green = 3 red = 4 url = 5 def __int__(self) -> int: return self.value class TextInputStyle(Enum): short = 1 paragraph = 2 # Aliases single_line = 1 multi_line = 2 long = 2 def __int__(self) -> int: return self.value class ApplicationCommandType(Enum): chat_input = 1 user = 2 message = 3 class ApplicationCommandPermissionType(Enum): role = 1 user = 2 channel = 3 def __int__(self) -> int: return self.value class OptionType(Enum): sub_command = 1 sub_command_group = 2 string = 3 integer = 4 boolean = 5 user = 6 channel = 7 role = 8 mentionable = 9 number = 10 attachment = 11 class StagePrivacyLevel(Enum): public = 1 closed = 2 guild_only = 2 class NSFWLevel(Enum, comparable=True): default = 0 explicit = 1 safe = 2 age_restricted = 3 class GuildScheduledEventEntityType(Enum): stage_instance = 1 voice = 2 external = 3 class GuildScheduledEventStatus(Enum): scheduled = 1 active = 2 completed = 3 canceled = 4 cancelled = 4 class GuildScheduledEventPrivacyLevel(Enum): guild_only = 2 class ThreadArchiveDuration(Enum): hour = 60 day = 1440 three_days = 4320 week = 10080 def __int__(self) -> int: return self.value class WidgetStyle(Enum): shield = "shield" banner1 = "banner1" banner2 = "banner2" banner3 = "banner3" banner4 = "banner4" def __str__(self) -> str: return self.value # reference: https://discord.com/developers/docs/reference#locales class Locale(Enum): bg = "bg" "Bulgarian | български" # noqa: RUF001 cs = "cs" "Czech | Čeština" da = "da" "Danish | Dansk" de = "de" "German | Deutsch" el = "el" "Greek | Ελληνικά" # noqa: RUF001 en_GB = "en-GB" "English, UK | English, UK" en_US = "en-US" "English, US | English, US" es_ES = "es-ES" "Spanish | Español" fi = "fi" "Finnish | Suomi" fr = "fr" "French | Français" hi = "hi" "Hindi | हिन्दी" hr = "hr" "Croatian | Hrvatski" hu = "hu" "Hungarian | Magyar" id = "id" "Indonesian | Bahasa Indonesia" it = "it" "Italian | Italiano" ja = "ja" "Japanese | 日本語" ko = "ko" "Korean | 한국어" lt = "lt" "Lithuanian | Lietuviškai" nl = "nl" "Dutch | Nederlands" no = "no" "Norwegian | Norsk" pl = "pl" "Polish | Polski" pt_BR = "pt-BR" "Portuguese, Brazilian | Português do Brasil" ro = "ro" "Romanian, Romania | Română" ru = "ru" "Russian | Pусский" # noqa: RUF001 sv_SE = "sv-SE" "Swedish | Svenska" th = "th" "Thai | ไทย" tr = "tr" "Turkish | Türkçe" uk = "uk" "Ukrainian | Українська" # noqa: RUF001 vi = "vi" "Vietnamese | Tiếng Việt" zh_CN = "zh-CN" "Chinese, China | 中文" zh_TW = "zh-TW" "Chinese, Taiwan | 繁體中文" def __str__(self) -> str: return self.value class AutoModActionType(Enum): block_message = 1 send_alert_message = 2 timeout = 3 class AutoModEventType(Enum): message_send = 1 class AutoModTriggerType(Enum): keyword = 1 if not TYPE_CHECKING: harmful_link = 2 # obsolete/deprecated spam = 3 keyword_preset = 4 mention_spam = 5 class ThreadSortOrder(Enum): latest_activity = 0 creation_date = 1 class ThreadLayout(Enum): not_set = 0 list_view = 1 gallery_view = 2 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_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. """ 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. """ 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. """ 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_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. """ # 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): integer_less_than_or_equal = 1 integer_greater_than_or_equal = 2 integer_equal = 3 integer_not_equal = 4 datetime_less_than_or_equal = 5 datetime_greater_than_or_equal = 6 boolean_equal = 7 boolean_not_equal = 8 class OnboardingPromptType(Enum): multiple_choice = 0 dropdown = 1 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