
    iJ                   *   d Z ddlmZ ddlmZ ddlmZ ddlmZm	Z	m
Z
mZmZmZmZmZmZmZmZmZmZmZ ddlmZ er(ddlmZmZ  G d	 d
ed          Z G d ded          ZdZ edd          Z G d d          Z G d de          Z dddBdZ! G d d          Z" e!d           G d d e"                      Z# e!             G d! d"e"                      Z$ e!             G d# d$e"                      Z% e!             G d% d&e"                      Z& e!             G d' d(e"                      Z' e!             G d) d*e"                      Z( e!             G d+ d,e"                      Z) G d- d.e"          Z* e!             G d/ d0e*                      Z+ e!             G d1 d2e*                      Z, e!             G d3 d4e*                      Z- e!             G d5 d6e"                      Z. e!             G d7 d8e"                      Z/ e!             G d9 d:e"                      Z0 e!             G d; d<e"                      Z1 e!             G d= d>e"                      Z2 e!             G d? d@e"                      Z3dAS )Ca:  
The MIT License (MIT)

Copyright (c) 2015-present Rapptz

Permission is hereby granted, free of charge, to any person obtaining a
copy of this software and associated documentation files (the "Software"),
to deal in the Software without restriction, including without limitation
the rights to use, copy, modify, merge, publish, distribute, sublicense,
and/or sell copies of the Software, and to permit persons to whom the
Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
DEALINGS IN THE SOFTWARE.
    )annotations)reduce)or_)TYPE_CHECKINGAnyCallableClassVarDictIteratorListOptionalSequenceTupleTypeTypeVaroverload	TypedDict   	UserFlags)SelfUnpackc                  2   e Zd ZU ded<   ded<   ded<   ded<   ded<   ded<   ded<   ded	<   ded
<   ded<   ded<   ded<   ded<   ded<   ded<   ded<   ded<   ded<   ded<   ded<   ded<   ded<   ded<   ded<   ded<   ded<   ded<   ded<   ded<   dS ) _IntentsFlagsKwargsboolguildsmembers
moderationbansemojisemojis_and_stickersexpressionsintegrationswebhooksinvitesvoice_states	presencesmessagesguild_messagesdm_messages	reactionsguild_reactionsdm_reactionstypingguild_typing	dm_typingmessage_contentguild_scheduled_eventsauto_moderationauto_moderation_configurationauto_moderation_executionpollsguild_pollsdm_pollsN__name__
__module____qualname____annotations__     T/home/ubuntu/.hermes/hermes-agent/venv/lib/python3.11/site-packages/discord/flags.pyr   r   3   sE        


!!!!$$$$++++''''r?   r   F)totalc                  $    e Zd ZU ded<   ded<   dS )_MemberCacheFlagsKwargsr   voicejoinedNr9   r>   r?   r@   rC   rC   R   s"         r?   rC   )SystemChannelFlagsMessageFlagsPublicUserFlagsIntentsMemberCacheFlagsApplicationFlagsChannelFlagsAutoModPresetsMemberFlagsAppCommandContextAttachmentFlags	RoleFlagsAppInstallationTypeSKUFlags
EmbedFlagsInviteFlagsBF	BaseFlags)boundc                  ^    e Zd ZddZedd
            Zedd            ZddZddZddZdS )
flag_valuefuncCallable[[Any], int]c                >     |d           | _         |j        | _        d S N)flag__doc__)selfr[   s     r@   __init__zflag_value.__init__n   s    d	&*lr?   instanceNoneownerType[BF]returnr   c                    d S r^   r>   ra   rc   re   s      r@   __get__zflag_value.__get__r   s    @Cr?   rV   r   c                    d S r^   r>   ri   s      r@   rj   zflag_value.__get__u   s    >Acr?   Optional[BF]r   c                >    || S |                     | j                  S r^   )	_has_flagr_   ri   s      r@   rj   zflag_value.__get__x   s#    K!!$),,,r?   rW   valuec                <    |                     | j        |           d S r^   )	_set_flagr_   )ra   rc   ro   s      r@   __set__zflag_value.__set__}   s     49e,,,,,r?   strc                    d| j         dS )Nz<flag_value flag=>)r_   ra   s    r@   __repr__zflag_value.__repr__   s    1491111r?   N)r[   r\   )rc   rd   re   rf   rg   r   )rc   rV   re   rf   rg   r   )rc   rl   re   rf   rg   r   )rc   rW   ro   r   rg   rd   rg   rs   )r:   r;   r<   rb   r   rj   rr   rw   r>   r?   r@   rZ   rZ   m   s        3 3 3 3 CCC XCAAA XA- - - -
- - - -2 2 2 2 2 2r?   rZ   c                      e Zd ZdS )alias_flag_valueN)r:   r;   r<   r>   r?   r@   rz   rz      s        Dr?   rz   )invertedr{   r   rg   Callable[[Type[BF]], Type[BF]]c                     d fd}|S )Nclsrf   rg   c                    d | j                                         D             | _        rFt          | j                                                                                  }dd|z  z   | _        nd| _        | S )Nc                N    i | ]"\  }}t          |t                    ||j        #S r>   )
isinstancerZ   r_   ).0namero   s      r@   
<dictcomp>z6fill_with_flags.<locals>.decorator.<locals>.<dictcomp>   s@     
 
 
e%,,
%*
 
 
r?      r   )__dict__itemsVALID_FLAGSmaxvalues
bit_lengthDEFAULT_VALUE)r~   max_bitsr{   s     r@   	decoratorz"fill_with_flags.<locals>.decorator   s    
 
"|1133
 
 
  	"3?113344??AAH "ak 2C !C
r?   )r~   rf   rg   rf   r>   )r{   r   s   ` r@   fill_with_flagsr      s)         " r?   c                      e Zd ZU ded<   ded<   ded<   dZd%d
Zed&d            Zd'dZd'dZ	d'dZ
d'dZd'dZd'dZd(dZd)dZd*dZd*dZd+dZd,dZd-dZd.d Zd/d#Zd$S )0rW   zClassVar[Dict[str, int]]r   zClassVar[int]r   intro   ro   kwargsr   c                    | j         | _        |                                D ]1\  }}|| j        vrt	          |d          t          | ||           2d S N is not a valid flag name.)r   ro   r   r   	TypeErrorsetattr)ra   r   keyro   s       r@   rb   zBaseFlags.__init__   sk    '
 ,,.. 	& 	&JC$***3 D D DEEED#u%%%%	& 	&r?   rg   r   c                >    |                      |           }||_        |S r^   )__new__ro   r~   ro   ra   s      r@   _from_valuezBaseFlags._from_value   s    {{3
r?   otherc                F    |                      | j        |j        z            S r^   r   ro   ra   r   s     r@   __or__zBaseFlags.__or__       
U[ 8999r?   c                F    |                      | j        |j        z            S r^   r   r   s     r@   __and__zBaseFlags.__and__   r   r?   c                F    |                      | j        |j        z            S r^   r   r   s     r@   __xor__zBaseFlags.__xor__   r   r?   c                0    | xj         |j         z  c_         | S r^   r   r   s     r@   __ior__zBaseFlags.__ior__       

ek!

r?   c                0    | xj         |j         z  c_         | S r^   r   r   s     r@   __iand__zBaseFlags.__iand__   r   r?   c                0    | xj         |j         z  c_         | S r^   r   r   s     r@   __ixor__zBaseFlags.__ixor__   r   r?   c                    t          | j                                                                                  }dd|z  z   }|                     | j        |z            S )Nr   r   )r   r   r   r   r   ro   )ra   r   	max_values      r@   
__invert__zBaseFlags.__invert__   sS    t'..0011<<>>!X+&	
Y 6777r?   c                "    | j         | j        k    S r^   ro   r   rv   s    r@   __bool__zBaseFlags.__bool__   s    zT///r?   objectc                L    t          || j                  o| j        |j        k    S r^   )r   	__class__ro   r   s     r@   __eq__zBaseFlags.__eq__   s"    %00NTZ5;5NNr?   c                .    |                      |           S r^   )r   r   s     r@   __ne__zBaseFlags.__ne__   s    ;;u%%%%r?   c                *    t          | j                  S r^   )hashro   rv   s    r@   __hash__zBaseFlags.__hash__   s    DJr?   rs   c                2    d| j         j         d| j         dS )N<z value=ru   )r   r:   ro   rv   s    r@   rw   zBaseFlags.__repr__   s"    @4>*@@4:@@@@r?   Iterator[Tuple[str, bool]]c              #     K   | j         j                                        D ]N\  }}t          |t                    rt          |t
                    r||                     |j                  fV  Od S r^   )r   r   r   r   rz   rZ   rn   r_   )ra   r   ro   s      r@   __iter__zBaseFlags.__iter__   s|      >288:: 	9 	9KD%%!122 %,, 9T^^EJ778888	9 	9r?   oc                    | j         |z  |k    S r^   r   ra   r   s     r@   rn   zBaseFlags._has_flag       
Q1$$r?   togglerd   c                    |du r| xj         |z  c_         d S |du r| xj         | z  c_         d S t          d| j        j         d          )NTFzValue to set for z must be a bool.)ro   r   r   r:   ra   r   r   s      r@   rq   zBaseFlags._set_flag   s\    T>>JJ!OJJJJu__JJ1"JJJJY0GYYYZZZr?   N)r   r   )ro   r   rg   r   )r   r   rg   r   )rg   r   )rg   r   )r   r   rg   r   )rg   r   rx   )rg   r   r   r   rg   r   r   r   r   r   rg   rd   )r:   r;   r<   r=   	__slots__rb   classmethodr   r   r   r   r   r   r   r   r   r   r   r   rw   r   rn   rq   r>   r?   r@   rW   rW      s        ))))    JJJI& & & &    [
: : : :: : : :: : : :         8 8 8 8
0 0 0 0O O O O& & & &       A A A A9 9 9 9% % % %[ [ [ [ [ [r?   Tc                      e Zd ZdZdZddZdd
Zed             Zed             Z	ed             Z
ed             Zed             Zed             Zed             ZdS )rF   ap  Wraps up a Discord system channel flag value.

    Similar to :class:`Permissions`\, the properties provided are two way.
    You can set and retrieve individual bits using the properties as if they
    were regular bools. This allows you to edit the system flags easily.

    To construct an object you can pass keyword arguments denoting the flags
    to enable or disable.

    .. container:: operations

        .. describe:: x == y

            Checks if two flags are equal.

        .. describe:: x != y

            Checks if two flags are not equal.

        .. describe:: x | y, x |= y

            Returns a SystemChannelFlags instance with all enabled flags from
            both x and y.

            .. versionadded:: 2.0

        .. describe:: x & y, x &= y

            Returns a SystemChannelFlags instance with only flags enabled on
            both x and y.

            .. versionadded:: 2.0

        .. describe:: x ^ y, x ^= y

            Returns a SystemChannelFlags instance with only flags enabled on
            only one of x or y, not on both.

            .. versionadded:: 2.0

        .. describe:: ~x

            Returns a SystemChannelFlags instance with all flags inverted from x.

            .. versionadded:: 2.0

        .. describe:: hash(x)

               Return the flag's hash.

        .. describe:: iter(x)

               Returns an iterator of ``(name, value)`` pairs. This allows it
               to be, for example, constructed as a dict or a list of pairs.

        .. describe:: bool(b)

            Returns whether any flag is set to ``True``.

            .. versionadded:: 2.0

    Attributes
    -----------
    value: :class:`int`
        The raw value. This value is a bit array field of a 53-bit integer
        representing the currently available flags. You should query
        flags via the properties rather than using this raw value.
    r>   r   r   rg   r   c                    | j         |z  |k    S r^   r   r   s     r@   rn   zSystemChannelFlags._has_flag>  r   r?   r   rd   c                z    |du r| xj         | z  c_         d S |du r| xj         |z  c_         d S t          d          )NTFz3Value to set for SystemChannelFlags must be a bool.)ro   r   r   s      r@   rq   zSystemChannelFlags._set_flagA  sL    T>>JJ1"JJJJu__JJ!OJJJJQRRRr?   c                    dS )z\:class:`bool`: Returns ``True`` if the system channel is used for member join notifications.r   r>   rv   s    r@   join_notificationsz%SystemChannelFlags.join_notificationsI  	     qr?   c                    dS )za:class:`bool`: Returns ``True`` if the system channel is used for "Nitro boosting" notifications.r   r>   rv   s    r@   premium_subscriptionsz(SystemChannelFlags.premium_subscriptionsN  r   r?   c                    dS )z:class:`bool`: Returns ``True`` if the system channel is used for server setup helpful tips notifications.

        .. versionadded:: 2.0
           r>   rv   s    r@   guild_reminder_notificationsz/SystemChannelFlags.guild_reminder_notificationsS  s	     qr?   c                    dS )z:class:`bool`: Returns ``True`` if sticker reply button ("Wave to say hi!") is
        shown for member join notifications.

        .. versionadded:: 2.0
           r>   rv   s    r@   join_notification_repliesz,SystemChannelFlags.join_notification_replies[  s	     qr?   c                    dS )z:class:`bool`: Returns ``True`` if role subscription purchase and renewal
        notifications are enabled.

        .. versionadded:: 2.2
           r>   rv   s    r@   (role_subscription_purchase_notificationsz;SystemChannelFlags.role_subscription_purchase_notificationsd  	     rr?   c                    dS )z:class:`bool`: Returns ``True`` if the role subscription notifications
        have a sticker reply button.

        .. versionadded:: 2.2
            r>   rv   s    r@   /role_subscription_purchase_notification_replieszBSystemChannelFlags.role_subscription_purchase_notification_repliesm  r   r?   c                    dS )z:class:`bool`: Returns ``True`` if the system channel is used for
        emoji added notifications.

        .. versionadded:: 2.7
           r>   rv   s    r@   emoji_addedzSystemChannelFlags.emoji_addedv  	     sr?   Nr   r   )r:   r;   r<   r`   r   rn   rq   rZ   r   r   r   r   r   r   r   r>   r?   r@   rF   rF      s       C CJ I% % % %S S S S   Z   Z   Z   Z   Z   Z   Z  r?   rF   c                  J   e Zd ZdZdZed             Zed             Zed             Zed             Z	ed             Z
ed             Zed	             Zed
             Zed             Zed             Zed             Zed             Zed             Zed             ZdS )rG   aF  Wraps up a Discord Message flag value.

    See :class:`SystemChannelFlags`.

    .. container:: operations

        .. describe:: x == y

            Checks if two flags are equal.
        .. describe:: x != y

            Checks if two flags are not equal.

        .. describe:: x | y, x |= y

            Returns a MessageFlags instance with all enabled flags from
            both x and y.

            .. versionadded:: 2.0

        .. describe:: x & y, x &= y

            Returns a MessageFlags instance with only flags enabled on
            both x and y.

            .. versionadded:: 2.0

        .. describe:: x ^ y, x ^= y

            Returns a MessageFlags instance with only flags enabled on
            only one of x or y, not on both.

            .. versionadded:: 2.0

        .. describe:: ~x

            Returns a MessageFlags instance with all flags inverted from x.

            .. versionadded:: 2.0

        .. describe:: hash(x)

               Return the flag's hash.
        .. describe:: iter(x)

               Returns an iterator of ``(name, value)`` pairs. This allows it
               to be, for example, constructed as a dict or a list of pairs.

        .. describe:: bool(b)

            Returns whether any flag is set to ``True``.

            .. versionadded:: 2.0

    .. versionadded:: 1.3

    Attributes
    -----------
    value: :class:`int`
        The raw value. This value is a bit array field of a 53-bit integer
        representing the currently available flags. You should query
        flags via the properties rather than using this raw value.
    r>   c                    dS )zS:class:`bool`: Returns ``True`` if the message is the original crossposted message.r   r>   rv   s    r@   crosspostedzMessageFlags.crossposted  r   r?   c                    dS )zT:class:`bool`: Returns ``True`` if the message was crossposted from another channel.r   r>   rv   s    r@   is_crosspostedzMessageFlags.is_crossposted  r   r?   c                    dS )zM:class:`bool`: Returns ``True`` if the message's embeds have been suppressed.r   r>   rv   s    r@   suppress_embedszMessageFlags.suppress_embeds  r   r?   c                    dS )zZ:class:`bool`: Returns ``True`` if the source message for this crosspost has been deleted.r   r>   rv   s    r@   source_message_deletedz#MessageFlags.source_message_deleted  r   r?   c                    dS )z:class:`bool`: Returns ``True`` if the source message is an urgent message.

        An urgent message is one sent by Discord Trust and Safety.
        r   r>   rv   s    r@   urgentzMessageFlags.urgent  	     rr?   c                    dS )zz:class:`bool`: Returns ``True`` if the source message is associated with a thread.

        .. versionadded:: 2.0
        r   r>   rv   s    r@   
has_threadzMessageFlags.has_thread  r   r?   c                    dS )zk:class:`bool`: Returns ``True`` if the source message is ephemeral.

        .. versionadded:: 2.0
        @   r>   rv   s    r@   	ephemeralzMessageFlags.ephemeral  r   r?   c                    dS )z:class:`bool`: Returns ``True`` if the message is an interaction response and the bot
        is "thinking".

        .. versionadded:: 2.0
           r>   rv   s    r@   loadingzMessageFlags.loading  r   r?   c                    dS )z:class:`bool`: Returns ``True`` if the message failed to mention some roles in a thread
        and add their members to the thread.

        .. versionadded:: 2.0
        r   r>   rv   s    r@   &failed_to_mention_some_roles_in_threadz3MessageFlags.failed_to_mention_some_roles_in_thread  r   r?   c                    dS )z:class:`bool`: Returns ``True`` if the message will not trigger push and desktop notifications.

        .. versionadded:: 2.2
           r>   rv   s    r@   suppress_notificationsz#MessageFlags.suppress_notifications  	     tr?   c                    dS )z`:class:`bool`: Alias for :attr:`suppress_notifications`.

        .. versionadded:: 2.2
        r   r>   rv   s    r@   silentzMessageFlags.silent
  r  r?   c                    dS )zj:class:`bool`: Returns ``True`` if the message is a voice message.

        .. versionadded:: 2.3
            r>   rv   s    r@   rD   zMessageFlags.voice  r  r?   c                    dS )zn:class:`bool`: Returns ``True`` if the message is a forwarded message.

        .. versionadded:: 2.5
         @  r>   rv   s    r@   	forwardedzMessageFlags.forwarded  s	     ur?   c                    dS )z:class:`bool`: Returns ``True`` if the message has Discord's v2 components.

        Does not allow sending any ``content``, ``embed``, ``embeds``, ``stickers``, or ``poll``.

        .. versionadded:: 2.6
           r>   rv   s    r@   components_v2zMessageFlags.components_v2"  s	     ur?   N)r:   r;   r<   r`   r   rZ   r   r   r   r   r   r   r   r   r   r   rz   r  rD   r  r  r>   r?   r@   rG   rG     s       > >@ I  Z   Z   Z   Z   Z   Z   Z   Z   Z   Z      Z   Z   Z  r?   rG   c                     e Zd ZdZdZed             Zed             Zed             Zed             Z	ed             Z
ed             Zed	             Zed
             Zed             Zed             Zed             Zed             Zed             Zed             Zed             Zed             Zed             Zed             ZddZdS )rH   ae  Wraps up the Discord User Public flags.

    .. container:: operations

        .. describe:: x == y

            Checks if two PublicUserFlags are equal.
        .. describe:: x != y

            Checks if two PublicUserFlags are not equal.

        .. describe:: x | y, x |= y

            Returns a PublicUserFlags instance with all enabled flags from
            both x and y.

            .. versionadded:: 2.0

        .. describe:: x & y, x &= y

            Returns a PublicUserFlags instance with only flags enabled on
            both x and y.

            .. versionadded:: 2.0

        .. describe:: x ^ y, x ^= y

            Returns a PublicUserFlags instance with only flags enabled on
            only one of x or y, not on both.

            .. versionadded:: 2.0

        .. describe:: ~x

            Returns a PublicUserFlags instance with all flags inverted from x.

            .. versionadded:: 2.0

        .. describe:: hash(x)

            Return the flag's hash.
        .. describe:: iter(x)

            Returns an iterator of ``(name, value)`` pairs. This allows it
            to be, for example, constructed as a dict or a list of pairs.
            Note that aliases are not shown.

        .. describe:: bool(b)

            Returns whether any flag is set to ``True``.

            .. versionadded:: 2.0

    .. versionadded:: 1.4

    Attributes
    -----------
    value: :class:`int`
        The raw value. This value is a bit array field of a 53-bit integer
        representing the currently available flags. You should query
        flags via the properties rather than using this raw value.
    r>   c                $    t           j        j        S )zB:class:`bool`: Returns ``True`` if the user is a Discord Employee.)r   staffro   rv   s    r@   r  zPublicUserFlags.staffp  s     $$r?   c                $    t           j        j        S )zA:class:`bool`: Returns ``True`` if the user is a Discord Partner.)r   partnerro   rv   s    r@   r  zPublicUserFlags.partneru  s      &&r?   c                $    t           j        j        S )zI:class:`bool`: Returns ``True`` if the user is a HypeSquad Events member.)r   	hypesquadro   rv   s    r@   r  zPublicUserFlags.hypesquadz       "((r?   c                $    t           j        j        S )z;:class:`bool`: Returns ``True`` if the user is a Bug Hunter)r   
bug_hunterro   rv   s    r@   r  zPublicUserFlags.bug_hunter  s     #))r?   c                $    t           j        j        S )zJ:class:`bool`: Returns ``True`` if the user is a HypeSquad Bravery member.)r   hypesquad_braveryro   rv   s    r@   r  z!PublicUserFlags.hypesquad_bravery       *00r?   c                $    t           j        j        S )zM:class:`bool`: Returns ``True`` if the user is a HypeSquad Brilliance member.)r   hypesquad_brilliancero   rv   s    r@   r  z$PublicUserFlags.hypesquad_brilliance  s     -33r?   c                $    t           j        j        S )zJ:class:`bool`: Returns ``True`` if the user is a HypeSquad Balance member.)r   hypesquad_balancero   rv   s    r@   r  z!PublicUserFlags.hypesquad_balance  r  r?   c                $    t           j        j        S )zB:class:`bool`: Returns ``True`` if the user is an Early Supporter.)r   early_supporterro   rv   s    r@   r  zPublicUserFlags.early_supporter  s     (..r?   c                $    t           j        j        S )z;:class:`bool`: Returns ``True`` if the user is a Team User.)r   	team_userro   rv   s    r@   r   zPublicUserFlags.team_user  r  r?   c                $    t           j        j        S )zb:class:`bool`: Returns ``True`` if the user is a system user (i.e. represents Discord officially).)r   systemro   rv   s    r@   r"  zPublicUserFlags.system  s     %%r?   c                $    t           j        j        S )zC:class:`bool`: Returns ``True`` if the user is a Bug Hunter Level 2)r   bug_hunter_level_2ro   rv   s    r@   r$  z"PublicUserFlags.bug_hunter_level_2  s     +11r?   c                $    t           j        j        S )z>:class:`bool`: Returns ``True`` if the user is a Verified Bot.)r   verified_botro   rv   s    r@   r&  zPublicUserFlags.verified_bot  s     %++r?   c                $    t           j        j        S )zO:class:`bool`: Returns ``True`` if the user is an Early Verified Bot Developer.r   verified_bot_developerro   rv   s    r@   r)  z&PublicUserFlags.verified_bot_developer  s     /55r?   c                $    t           j        j        S )zc:class:`bool`: An alias for :attr:`verified_bot_developer`.

        .. versionadded:: 1.5
        r(  rv   s    r@   early_verified_bot_developerz,PublicUserFlags.early_verified_bot_developer  s     /55r?   c                $    t           j        j        S )zu:class:`bool`: Returns ``True`` if the user is a Discord Certified Moderator.

        .. versionadded:: 2.0
        )r   discord_certified_moderatorro   rv   s    r@   r-  z+PublicUserFlags.discord_certified_moderator  s     4::r?   c                $    t           j        j        S )z:class:`bool`: Returns ``True`` if the user is a bot that only uses HTTP interactions
        and is shown in the online member list.

        .. versionadded:: 2.0
        )r   bot_http_interactionsro   rv   s    r@   r/  z%PublicUserFlags.bot_http_interactions  s     .44r?   c                $    t           j        j        S )zw:class:`bool`: Returns ``True`` if the user is flagged as a spammer by Discord.

        .. versionadded:: 2.0
        )r   spammerro   rv   s    r@   r1  zPublicUserFlags.spammer  s      &&r?   c                $    t           j        j        S )zk:class:`bool`: Returns ``True`` if the user is an active developer.

        .. versionadded:: 2.1
        )r   active_developerro   rv   s    r@   r3  z PublicUserFlags.active_developer  s     )//r?   rg   List[UserFlags]c                *      fdt           D             S )z@List[:class:`UserFlags`]: Returns all public flags the user has.c                H    g | ]}                     |j                  |S r>   )rn   ro   )r   public_flagra   s     r@   
<listcomp>z'PublicUserFlags.all.<locals>.<listcomp>  s-    ^^^DNN;K\<]<]^^^^r?   r   rv   s   `r@   allzPublicUserFlags.all  s    ^^^^y^^^^r?   N)rg   r4  )r:   r;   r<   r`   r   rZ   r  r  r  r  r  r  r  r  r   r"  r$  r&  r)  rz   r+  r-  r/  r1  r3  r9  r>   r?   r@   rH   rH   -  s%       = =~ I% % Z% ' ' Z' ) ) Z) * * Z* 1 1 Z1 4 4 Z4 1 1 Z1 / / Z/ ) ) Z) & & Z& 2 2 Z2 , , Z, 6 6 Z6 6 6 6 ; ; Z; 5 5 Z5 ' ' Z' 0 0 Z0_ _ _ _ _ _r?   rH   c                     e Zd ZdZdZd.d/d
Zed0d            Zed0d            Zed0d            Z	e
d             Ze
d             Ze
d             Zed             Zed             Zed             Ze
d             Ze
d             Ze
d             Ze
d             Ze
d             Ze
d             Zed             Ze
d             Ze
d             Zed             Ze
d              Ze
d!             Zed"             Ze
d#             Ze
d$             Z e
d%             Z!e
d&             Z"ed'             Z#e
d(             Z$e
d)             Z%ed*             Z&e
d+             Z'e
d,             Z(d-S )1rI   az  Wraps up a Discord gateway intent flag.

    Similar to :class:`Permissions`\, the properties provided are two way.
    You can set and retrieve individual bits using the properties as if they
    were regular bools.

    To construct an object you can pass keyword arguments denoting the flags
    to enable or disable.

    This is used to disable certain gateway features that are unnecessary to
    run your bot. To make use of this, it is passed to the ``intents`` keyword
    argument of :class:`Client`.

    .. versionadded:: 1.5

    .. container:: operations

        .. describe:: x == y

            Checks if two flags are equal.
        .. describe:: x != y

            Checks if two flags are not equal.

        .. describe:: x | y, x |= y

            Returns an Intents instance with all enabled flags from
            both x and y.

            .. versionadded:: 2.0

        .. describe:: x & y, x &= y

            Returns an Intents instance with only flags enabled on
            both x and y.

            .. versionadded:: 2.0

        .. describe:: x ^ y, x ^= y

            Returns an Intents instance with only flags enabled on
            only one of x or y, not on both.

            .. versionadded:: 2.0

        .. describe:: ~x

            Returns an Intents instance with all flags inverted from x.

            .. versionadded:: 2.0

        .. describe:: hash(x)

               Return the flag's hash.
        .. describe:: iter(x)

               Returns an iterator of ``(name, value)`` pairs. This allows it
               to be, for example, constructed as a dict or a list of pairs.

        .. describe:: bool(b)

            Returns whether any intent is enabled.

            .. versionadded:: 2.0

    Attributes
    -----------
    value: :class:`int`
        The raw value. You should query flags via the properties
        rather than using this raw value.
    r>   r   ro   r   r   Unpack[_IntentsFlagsKwargs]rg   rd   c                    || _         |                                D ]1\  }}|| j        vrt          |d          t	          | ||           2d S r   )ro   r   r   r   r   )ra   ro   r   r   kwvalues        r@   rb   zIntents.__init__+  sh    
"LLNN 	( 	(LC$***3 D D DEEED#w''''	( 	(r?   r~   Type[Intents]c                    t          d | j                                                  }|                     |           }||_        |S )zIA factory method that creates a :class:`Intents` with everything enabled.c                    | |z  S r^   r>   )abs     r@   <lambda>zIntents.all.<locals>.<lambda>5  s
    AE r?   )r   r   r   r   ro   r   s      r@   r9  zIntents.all2  sB     ))3?+A+A+C+CDD{{3
r?   c                H    |                      |           }|j        |_        |S )zJA factory method that creates a :class:`Intents` with everything disabled.r   r   ro   r~   ra   s     r@   nonezIntents.none:  $     {{3'
r?   c                X    |                                  }d|_        d|_        d|_        |S )zA factory method that creates a :class:`Intents` with everything enabled
        except :attr:`presences`, :attr:`members`, and :attr:`message_content`.
        F)r9  r'   r   r1   rF  s     r@   defaultzIntents.defaultA  s,    
 wwyy$r?   c                    dS )a  :class:`bool`: Whether guild related events are enabled.

        This corresponds to the following events:

        - :func:`on_guild_join`
        - :func:`on_guild_remove`
        - :func:`on_guild_available`
        - :func:`on_guild_unavailable`
        - :func:`on_guild_channel_update`
        - :func:`on_guild_channel_create`
        - :func:`on_guild_channel_delete`
        - :func:`on_guild_channel_pins_update`
        - :func:`on_thread_create`
        - :func:`on_thread_join`
        - :func:`on_thread_update`
        - :func:`on_thread_delete`

        This also corresponds to the following attributes and classes in terms of cache:

        - :attr:`Client.guilds`
        - :class:`Guild` and all its attributes.
        - :meth:`Client.get_channel`
        - :meth:`Client.get_all_channels`

        It is highly advisable to leave this intent enabled for your bot to function.
        r   r>   rv   s    r@   r   zIntents.guildsL  s	    8 vr?   c                    dS )a  :class:`bool`: Whether guild member related events are enabled.

        This corresponds to the following events:

        - :func:`on_member_join`
        - :func:`on_member_remove`
        - :func:`on_member_update`
        - :func:`on_user_update`
        - :func:`on_thread_member_join`
        - :func:`on_thread_member_remove`

        This also corresponds to the following attributes and classes in terms of cache:

        - :meth:`Client.get_all_members`
        - :meth:`Client.get_user`
        - :meth:`Guild.chunk`
        - :meth:`Guild.fetch_members`
        - :meth:`Guild.get_member`
        - :attr:`Guild.members`
        - :attr:`Member.roles`
        - :attr:`Member.nick`
        - :attr:`Member.premium_since`
        - :attr:`User.name`
        - :attr:`User.avatar`
        - :attr:`User.discriminator`
        - :attr:`User.global_name`

        For more information go to the :ref:`member intent documentation <need_members_intent>`.

        .. note::

            Currently, this requires opting in explicitly via the developer portal as well.
            Bots in over 100 guilds will need to apply to Discord for verification.
        r   r>   rv   s    r@   r   zIntents.membersj  s
    H vr?   c                    dS )aO  :class:`bool`: Whether guild moderation related events are enabled.

        This corresponds to the following events:

        - :func:`on_member_ban`
        - :func:`on_member_unban`
        - :func:`on_audit_log_entry_create`

        This does not correspond to any attributes or classes in the library in terms of cache.
        r   r>   rv   s    r@   r   zIntents.moderation  s	     vr?   c                    dS )zy:class:`bool`: An alias of :attr:`moderation`.

        .. versionchanged:: 2.2
            Changed to an alias.
        r   r>   rv   s    r@   r   zIntents.bans  	     vr?   c                    dS )zx:class:`bool`: Alias of :attr:`.expressions`.

        .. versionchanged:: 2.0
            Changed to an alias.
        r   r>   rv   s    r@   r    zIntents.emojis  rO  r?   c                    dS )z:class:`bool`: Alias of :attr:`.expressions`.

        .. versionadded:: 2.0

        .. versionchanged:: 2.5
            Changed to an alias.
        r   r>   rv   s    r@   r!   zIntents.emojis_and_stickers  s	     vr?   c                    dS )a  :class:`bool`: Whether guild emoji, sticker, and soundboard sound related events are enabled.

        .. versionadded:: 2.5

        This corresponds to the following events:

        - :func:`on_guild_emojis_update`
        - :func:`on_guild_stickers_update`
        - :func:`on_soundboard_sound_create`
        - :func:`on_soundboard_sound_update`
        - :func:`on_soundboard_sound_delete`

        This also corresponds to the following attributes and classes in terms of cache:

        - :class:`Emoji`
        - :class:`GuildSticker`
        - :class:`SoundboardSound`
        - :meth:`Client.get_emoji`
        - :meth:`Client.get_sticker`
        - :meth:`Client.get_soundboard_sound`
        - :meth:`Client.emojis`
        - :meth:`Client.stickers`
        - :meth:`Client.soundboard_sounds`
        - :attr:`Guild.emojis`
        - :attr:`Guild.stickers`
        - :attr:`Guild.soundboard_sounds`
        r   r>   rv   s    r@   r"   zIntents.expressions  s	    : vr?   c                    dS )a  :class:`bool`: Whether guild integration related events are enabled.

        This corresponds to the following events:

        - :func:`on_guild_integrations_update`
        - :func:`on_integration_create`
        - :func:`on_integration_update`
        - :func:`on_raw_integration_delete`

        This does not correspond to any attributes or classes in the library in terms of cache.
        r   r>   rv   s    r@   r#   zIntents.integrations  s	     vr?   c                    dS )a  :class:`bool`: Whether guild webhook related events are enabled.

        This corresponds to the following events:

        - :func:`on_webhooks_update`

        This does not correspond to any attributes or classes in the library in terms of cache.
        r   r>   rv   s    r@   r$   zIntents.webhooks  s	     vr?   c                    dS )a#  :class:`bool`: Whether guild invite related events are enabled.

        This corresponds to the following events:

        - :func:`on_invite_create`
        - :func:`on_invite_delete`

        This does not correspond to any attributes or classes in the library in terms of cache.
        r   r>   rv   s    r@   r%   zIntents.invites  s	     vr?   c                    dS )a  :class:`bool`: Whether guild voice state related events are enabled.

        This corresponds to the following events:

        - :func:`on_voice_state_update`

        This also corresponds to the following attributes and classes in terms of cache:

        - :attr:`VoiceChannel.members`
        - :attr:`VoiceChannel.voice_states`
        - :attr:`Member.voice`

        .. note::

            This intent is required to connect to voice.
        r   r>   rv   s    r@   r&   zIntents.voice_states  s	    $ vr?   c                    dS )a  :class:`bool`: Whether guild presence related events are enabled.

        This corresponds to the following events:

        - :func:`on_presence_update`

        This also corresponds to the following attributes and classes in terms of cache:

        - :attr:`Member.activities`
        - :attr:`Member.status`
        - :attr:`Member.raw_status`

        For more information go to the :ref:`presence intent documentation <need_presence_intent>`.

        .. note::

            Currently, this requires opting in explicitly via the developer portal as well.
            Bots in over 100 guilds will need to apply to Discord for verification.
        r   r>   rv   s    r@   r'   zIntents.presences  s	    * vr?   c                    dS )a  :class:`bool`: Whether guild and direct message related events are enabled.

        This is a shortcut to set or get both :attr:`guild_messages` and :attr:`dm_messages`.

        This corresponds to the following events:

        - :func:`on_message` (both guilds and DMs)
        - :func:`on_message_edit` (both guilds and DMs)
        - :func:`on_message_delete` (both guilds and DMs)
        - :func:`on_raw_message_delete` (both guilds and DMs)
        - :func:`on_raw_message_edit` (both guilds and DMs)

        This also corresponds to the following attributes and classes in terms of cache:

        - :class:`Message`
        - :attr:`Client.cached_messages`

        Note that due to an implicit relationship this also corresponds to the following events:

        - :func:`on_reaction_add` (both guilds and DMs)
        - :func:`on_reaction_remove` (both guilds and DMs)
        - :func:`on_reaction_clear` (both guilds and DMs)
        i   r>   rv   s    r@   r(   zIntents.messages-  s
    2 $#r?   c                    dS )a  :class:`bool`: Whether guild message related events are enabled.

        See also :attr:`dm_messages` for DMs or :attr:`messages` for both.

        This corresponds to the following events:

        - :func:`on_message` (only for guilds)
        - :func:`on_message_edit` (only for guilds)
        - :func:`on_message_delete` (only for guilds)
        - :func:`on_raw_message_delete` (only for guilds)
        - :func:`on_raw_message_edit` (only for guilds)

        This also corresponds to the following attributes and classes in terms of cache:

        - :class:`Message`
        - :attr:`Client.cached_messages` (only for guilds)

        Note that due to an implicit relationship this also corresponds to the following events:

        - :func:`on_reaction_add` (only for guilds)
        - :func:`on_reaction_remove` (only for guilds)
        - :func:`on_reaction_clear` (only for guilds)
           r>   rv   s    r@   r)   zIntents.guild_messagesH  s	    2 vr?   c                    dS )au  :class:`bool`: Whether direct message related events are enabled.

        See also :attr:`guild_messages` for guilds or :attr:`messages` for both.

        This corresponds to the following events:

        - :func:`on_message` (only for DMs)
        - :func:`on_message_edit` (only for DMs)
        - :func:`on_message_delete` (only for DMs)
        - :func:`on_raw_message_delete` (only for DMs)
        - :func:`on_raw_message_edit` (only for DMs)

        This also corresponds to the following attributes and classes in terms of cache:

        - :class:`Message`
        - :attr:`Client.cached_messages` (only for DMs)

        Note that due to an implicit relationship this also corresponds to the following events:

        - :func:`on_reaction_add` (only for DMs)
        - :func:`on_reaction_remove` (only for DMs)
        - :func:`on_reaction_clear` (only for DMs)
        r   r>   rv   s    r@   r*   zIntents.dm_messagesc  	    2 wr?   c                    dS )a  :class:`bool`: Whether guild and direct message reaction related events are enabled.

        This is a shortcut to set or get both :attr:`guild_reactions` and :attr:`dm_reactions`.

        This corresponds to the following events:

        - :func:`on_reaction_add` (both guilds and DMs)
        - :func:`on_reaction_remove` (both guilds and DMs)
        - :func:`on_reaction_clear` (both guilds and DMs)
        - :func:`on_raw_reaction_add` (both guilds and DMs)
        - :func:`on_raw_reaction_remove` (both guilds and DMs)
        - :func:`on_raw_reaction_clear` (both guilds and DMs)

        This also corresponds to the following attributes and classes in terms of cache:

        - :attr:`Message.reactions` (both guild and DM messages)
        i $  r>   rv   s    r@   r+   zIntents.reactions~  s
    & %$r?   c                    dS )a  :class:`bool`: Whether guild message reaction related events are enabled.

        See also :attr:`dm_reactions` for DMs or :attr:`reactions` for both.

        This corresponds to the following events:

        - :func:`on_reaction_add` (only for guilds)
        - :func:`on_reaction_remove` (only for guilds)
        - :func:`on_reaction_clear` (only for guilds)
        - :func:`on_raw_reaction_add` (only for guilds)
        - :func:`on_raw_reaction_remove` (only for guilds)
        - :func:`on_raw_reaction_clear` (only for guilds)

        This also corresponds to the following attributes and classes in terms of cache:

        - :attr:`Message.reactions` (only for guild messages)
           r>   rv   s    r@   r,   zIntents.guild_reactions  	    & wr?   c                    dS )a  :class:`bool`: Whether direct message reaction related events are enabled.

        See also :attr:`guild_reactions` for guilds or :attr:`reactions` for both.

        This corresponds to the following events:

        - :func:`on_reaction_add` (only for DMs)
        - :func:`on_reaction_remove` (only for DMs)
        - :func:`on_reaction_clear` (only for DMs)
        - :func:`on_raw_reaction_add` (only for DMs)
        - :func:`on_raw_reaction_remove` (only for DMs)
        - :func:`on_raw_reaction_clear` (only for DMs)

        This also corresponds to the following attributes and classes in terms of cache:

        - :attr:`Message.reactions` (only for DM messages)
        r  r>   rv   s    r@   r-   zIntents.dm_reactions  r`  r?   c                    dS )a}  :class:`bool`: Whether guild and direct message typing related events are enabled.

        This is a shortcut to set or get both :attr:`guild_typing` and :attr:`dm_typing`.

        This corresponds to the following events:

        - :func:`on_typing` (both guilds and DMs)

        This does not correspond to any attributes or classes in the library in terms of cache.
        i H  r>   rv   s    r@   r.   zIntents.typing  s
     %$r?   c                    dS )af  :class:`bool`: Whether guild and direct message typing related events are enabled.

        See also :attr:`dm_typing` for DMs or :attr:`typing` for both.

        This corresponds to the following events:

        - :func:`on_typing` (only for guilds)

        This does not correspond to any attributes or classes in the library in terms of cache.
        i   r>   rv   s    r@   r/   zIntents.guild_typing  	     wr?   c                    dS )ai  :class:`bool`: Whether guild and direct message typing related events are enabled.

        See also :attr:`guild_typing` for guilds or :attr:`typing` for both.

        This corresponds to the following events:

        - :func:`on_typing` (only for DMs)

        This does not correspond to any attributes or classes in the library in terms of cache.
        r  r>   rv   s    r@   r0   zIntents.dm_typing  rd  r?   c                    dS )a<  :class:`bool`: Whether message content, attachments, embeds and components will be available in messages
        which do not meet the following criteria:

        - The message was sent by the client
        - The message was sent in direct messages
        - The message mentions the client

        This applies to the following events:

        - :func:`on_message`
        - :func:`on_message_edit`
        - :func:`on_message_delete`
        - :func:`on_raw_message_edit`

        For more information go to the :ref:`message content intent documentation <need_message_content_intent>`.

        .. note::

            Currently, this requires opting in explicitly via the developer portal as well.
            Bots in over 100 guilds will need to apply to Discord for verification.

        .. versionadded:: 2.0
        r
  r>   rv   s    r@   r1   zIntents.message_content  r\  r?   c                    dS )a  :class:`bool`: Whether guild scheduled event related events are enabled.

        This corresponds to the following events:

        - :func:`on_scheduled_event_create`
        - :func:`on_scheduled_event_update`
        - :func:`on_scheduled_event_delete`
        - :func:`on_scheduled_event_user_add`
        - :func:`on_scheduled_event_user_remove`

        .. versionadded:: 2.0
           r>   rv   s    r@   r2   zIntents.guild_scheduled_events  s	     wr?   c                    dS )a  :class:`bool`: Whether auto moderation related events are enabled.

        This is a shortcut to set or get both :attr:`auto_moderation_configuration`
        and :attr:`auto_moderation_execution`.

        This corresponds to the following events:

        - :func:`on_automod_rule_create`
        - :func:`on_automod_rule_update`
        - :func:`on_automod_rule_delete`
        - :func:`on_automod_action`

        .. versionadded:: 2.0
        i  0 r>   rv   s    r@   r3   zIntents.auto_moderation  s
      %$r?   c                    dS )a'  :class:`bool`: Whether auto moderation configuration related events are enabled.

        This corresponds to the following events:

        - :func:`on_automod_rule_create`
        - :func:`on_automod_rule_update`
        - :func:`on_automod_rule_delete`

        .. versionadded:: 2.0
        i   r>   rv   s    r@   r4   z%Intents.auto_moderation_configuration$  rd  r?   c                    dS )z:class:`bool`: Whether auto moderation execution related events are enabled.

        This corresponds to the following events:
        - :func:`on_automod_action`

        .. versionadded:: 2.0
        i    r>   rv   s    r@   r5   z!Intents.auto_moderation_execution2  s	     wr?   c                    dS )a  :class:`bool`: Whether guild and direct messages poll related events are enabled.

        This is a shortcut to set or get both :attr:`guild_polls` and :attr:`dm_polls`.

        This corresponds to the following events:

        - :func:`on_poll_vote_add` (both guilds and DMs)
        - :func:`on_poll_vote_remove` (both guilds and DMs)
        - :func:`on_raw_poll_vote_add` (both guilds and DMs)
        - :func:`on_raw_poll_vote_remove` (both guilds and DMs)

        .. versionadded:: 2.4
        i   r>   rv   s    r@   r6   zIntents.polls=  s
     %$r?   c                    dS )a  :class:`bool`: Whether guild poll related events are enabled.

        See also :attr:`dm_polls` and :attr:`polls`.

        This corresponds to the following events:

        - :func:`on_poll_vote_add` (only for guilds)
        - :func:`on_poll_vote_remove` (only for guilds)
        - :func:`on_raw_poll_vote_add` (only for guilds)
        - :func:`on_raw_poll_vote_remove` (only for guilds)

        .. versionadded:: 2.4
           r>   rv   s    r@   r7   zIntents.guild_pollsN  	     wr?   c                    dS )a  :class:`bool`: Whether direct messages poll related events are enabled.

        See also :attr:`guild_polls` and :attr:`polls`.

        This corresponds to the following events:

        - :func:`on_poll_vote_add` (only for DMs)
        - :func:`on_poll_vote_remove` (only for DMs)
        - :func:`on_raw_poll_vote_add` (only for DMs)
        - :func:`on_raw_poll_vote_remove` (only for DMs)

        .. versionadded:: 2.4
        i   r>   rv   s    r@   r8   zIntents.dm_polls_  ro  r?   N)r   )ro   r   r   r;  rg   rd   )r~   r>  rg   rI   ))r:   r;   r<   r`   r   rb   r   r9  rG  rJ  rZ   r   r   r   rz   r   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   r0   r1   r2   r3   r4   r5   r6   r7   r8   r>   r?   r@   rI   rI     s       F FP I( ( ( ( (    [    [    [   Z: # # Z#J   Z            Z<   Z 	 	 Z	 
 
 Z
   Z&   Z, $ $ $4   Z4   Z4 % % %(   Z(   Z( % % %   Z   Z   Z4   Z % % %"   Z   Z % % %    Z    Z  r?   rI   c                      e Zd ZdZdZddZedd
            Zedd            Ze	d             Z
ed             Zed             Zedd            ZddZe	d             ZdS )rJ   aX  Controls the library's cache policy when it comes to members.

    This allows for finer grained control over what members are cached.
    Note that the bot's own member is always cached. This class is passed
    to the ``member_cache_flags`` parameter in :class:`Client`.

    Due to a quirk in how Discord works, in order to ensure proper cleanup
    of cache resources it is recommended to have :attr:`Intents.members`
    enabled. Otherwise the library cannot know when a member leaves a guild and
    is thus unable to cleanup after itself.

    To construct an object you can pass keyword arguments denoting the flags
    to enable or disable.

    The default value is all flags enabled.

    .. versionadded:: 1.5

    .. container:: operations

        .. describe:: x == y

            Checks if two flags are equal.
        .. describe:: x != y

            Checks if two flags are not equal.

        .. describe:: x | y, x |= y

            Returns a MemberCacheFlags instance with all enabled flags from
            both x and y.

            .. versionadded:: 2.0

        .. describe:: x & y, x &= y

            Returns a MemberCacheFlags instance with only flags enabled on
            both x and y.

            .. versionadded:: 2.0

        .. describe:: x ^ y, x ^= y

            Returns a MemberCacheFlags instance with only flags enabled on
            only one of x or y, not on both.

            .. versionadded:: 2.0

        .. describe:: ~x

            Returns a MemberCacheFlags instance with all flags inverted from x.

            .. versionadded:: 2.0

        .. describe:: hash(x)

               Return the flag's hash.
        .. describe:: iter(x)

               Returns an iterator of ``(name, value)`` pairs. This allows it
               to be, for example, constructed as a dict or a list of pairs.

        .. describe:: bool(b)

            Returns whether any flag is set to ``True``.

            .. versionadded:: 2.0

    Attributes
    -----------
    value: :class:`int`
        The raw value. You should query flags via the properties
        rather than using this raw value.
    r>   r   Unpack[_MemberCacheFlagsKwargs]rg   rd   c                   t          | j                                                                                  }d|z  dz
  | _        |                                D ]1\  }}|| j        vrt          |d          t          | ||           2d S )Nr   r   )r   r   r   r   ro   r   r   r   )ra   r   bitsr   ro   s        r@   rb   zMemberCacheFlags.__init__  s    4#**,,--88::9/
 ,,.. 	& 	&JC$***3 D D DEEED#u%%%%	& 	&r?   r~   Type[MemberCacheFlags]c                    t          | j                                                                                  }d|z  dz
  }|                     |           }||_        |S )zRA factory method that creates a :class:`MemberCacheFlags` with everything enabled.r   r   r   r   r   r   ro   r~   rt  ro   ra   s       r@   r9  zMemberCacheFlags.all  U     3?))++,,7799da{{3
r?   c                H    |                      |           }|j        |_        |S )zSA factory method that creates a :class:`MemberCacheFlags` with everything disabled.rE  rF  s     r@   rG  zMemberCacheFlags.none  rH  r?   c                "    | j         | j        k    S r^   r   rv   s    r@   _emptyzMemberCacheFlags._empty  s    zT///r?   c                    dS )z:class:`bool`: Whether to cache members that are in voice.

        This requires :attr:`Intents.voice_states`.

        Members that leave voice are no longer cached.
        r   r>   rv   s    r@   rD   zMemberCacheFlags.voice  s	     qr?   c                    dS )z:class:`bool`: Whether to cache members that joined the guild
        or are chunked as part of the initial log in flow.

        This requires :attr:`Intents.members`.

        Members that leave the guild are no longer cached.
        r   r>   rv   s    r@   rE   zMemberCacheFlags.joined  s	     qr?   intentsrI   c                f    |                                  }|j        rd|_        |j        rd|_        |S )ab  A factory method that creates a :class:`MemberCacheFlags` based on
        the currently selected :class:`Intents`.

        Parameters
        ------------
        intents: :class:`Intents`
            The intents to select from.

        Returns
        ---------
        :class:`MemberCacheFlags`
            The resulting member cache flags.
        T)rG  r   rE   r&   rD   )r~   r  ra   s      r@   from_intentszMemberCacheFlags.from_intents  s9      xxzz? 	DK 	DJr?   c                ~    | j         r|j        st          d          | j        r|j        st          d          d S d S )Nz4MemberCacheFlags.voice requires Intents.voice_statesz0MemberCacheFlags.joined requires Intents.members)rD   r&   
ValueErrorrE   r   )ra   r  s     r@   _verify_intentsz MemberCacheFlags._verify_intents	  sc    : 	Ug2 	USTTT; 	Qw 	QOPPP	Q 	Q 	Q 	Qr?   c                    | j         dk    S )Nr   r   rv   s    r@   _voice_onlyzMemberCacheFlags._voice_only  s    zQr?   N)r   rr  rg   rd   )r~   ru  rg   rJ   )r~   ru  r  rI   rg   rJ   )r  rI   )r:   r;   r<   r`   r   rb   r   r9  rG  propertyr|  rZ   rD   rE   r  r  r  r>   r?   r@   rJ   rJ   q  s        I IV I& & & &    [    [ 0 0 X0   Z   Z    [.Q Q Q Q   X  r?   rJ   c                     e Zd ZdZed             Zed             Zed             Zed             Zed             Z	ed             Z
ed             Zed	             Zed
             Zed             Zed             ZdS )rK   a  Wraps up the Discord Application flags.

    .. container:: operations

        .. describe:: x == y

            Checks if two ApplicationFlags are equal.
        .. describe:: x != y

            Checks if two ApplicationFlags are not equal.

        .. describe:: x | y, x |= y

            Returns an ApplicationFlags instance with all enabled flags from
            both x and y.

            .. versionadded:: 2.0

        .. describe:: x & y, x &= y

            Returns an ApplicationFlags instance with only flags enabled on
            both x and y.

            .. versionadded:: 2.0

        .. describe:: x ^ y, x ^= y

            Returns an ApplicationFlags instance with only flags enabled on
            only one of x or y, not on both.

            .. versionadded:: 2.0

        .. describe:: ~x

            Returns an ApplicationFlags instance with all flags inverted from x.

            .. versionadded:: 2.0

        .. describe:: hash(x)

            Return the flag's hash.
        .. describe:: iter(x)

            Returns an iterator of ``(name, value)`` pairs. This allows it
            to be, for example, constructed as a dict or a list of pairs.
            Note that aliases are not shown.

        .. describe:: bool(b)

            Returns whether any flag is set to ``True``.

    .. versionadded:: 2.0

    Attributes
    -----------
    value: :class:`int`
        The raw value. You should query flags via the properties
        rather than using this raw value.
    c                    dS )z:class:`bool`: Returns ``True`` if the application uses at least 100 automod rules across all guilds.
        This shows up as a badge in the official client.

        .. versionadded:: 2.3
        r   r>   rv   s    r@   auto_mod_badgezApplicationFlags.auto_mod_badgeS  rO  r?   c                    dS )z:class:`bool`: Returns ``True`` if the application is verified and is allowed to
        receive presence information over the gateway.
        r   r>   rv   s    r@   gateway_presencez!ApplicationFlags.gateway_presence\  	    
 wr?   c                    dS )z:class:`bool`: Returns ``True`` if the application is allowed to receive limited
        presence information over the gateway.
        r  r>   rv   s    r@   gateway_presence_limitedz)ApplicationFlags.gateway_presence_limitedc  r  r?   c                    dS )z:class:`bool`: Returns ``True`` if the application is verified and is allowed to
        receive guild members information over the gateway.
        r  r>   rv   s    r@   gateway_guild_membersz&ApplicationFlags.gateway_guild_membersj  r  r?   c                    dS )z:class:`bool`: Returns ``True`` if the application is allowed to receive limited
        guild members information over the gateway.
        r
  r>   rv   s    r@   gateway_guild_members_limitedz.ApplicationFlags.gateway_guild_members_limitedq  r  r?   c                    dS )z:class:`bool`: Returns ``True`` if the application is currently pending verification
        and has hit the guild limit.
        rh  r>   rv   s    r@    verification_pending_guild_limitz1ApplicationFlags.verification_pending_guild_limitx  r  r?   c                    dS )zY:class:`bool`: Returns ``True`` if the application is embedded within the Discord client.i   r>   rv   s    r@   embeddedzApplicationFlags.embedded  s	     wr?   c                    dS )zx:class:`bool`: Returns ``True`` if the application is verified and is allowed to
        read message content in guilds.i   r>   rv   s    r@   gateway_message_contentz(ApplicationFlags.gateway_message_content  	     wr?   c                    dS )zz:class:`bool`: Returns ``True`` if the application is unverified and is allowed to
        read message content in guilds.i   r>   rv   s    r@   gateway_message_content_limitedz0ApplicationFlags.gateway_message_content_limited  r  r?   c                    dS )z:class:`bool`: Returns ``True`` if the application has registered a global application
        command. This shows up as a badge in the official client.i   r>   rv   s    r@   app_commands_badgez#ApplicationFlags.app_commands_badge  r  r?   c                    dS )z:class:`bool`: Returns ``True`` if the application has had at least one global application
        command used in the last 30 days.

        .. versionadded:: 2.1
        rn  r>   rv   s    r@   activezApplicationFlags.active  	     wr?   N)r:   r;   r<   r`   rZ   r  r  r  r  r  r  r  r  r  r  r  r>   r?   r@   rK   rK     sH       : :x   Z   Z   Z   Z   Z   Z   Z   Z
   Z
   Z
   Z  r?   rK   c                  T    e Zd ZdZed             Zed             Zed             ZdS )rL   a  Wraps up the Discord :class:`~discord.abc.GuildChannel` or :class:`Thread` flags.

    .. container:: operations

        .. describe:: x == y

            Checks if two channel flags are equal.
        .. describe:: x != y

            Checks if two channel flags are not equal.

        .. describe:: x | y, x |= y

            Returns a ChannelFlags instance with all enabled flags from
            both x and y.

            .. versionadded:: 2.0

        .. describe:: x & y, x &= y

            Returns a ChannelFlags instance with only flags enabled on
            both x and y.

            .. versionadded:: 2.0

        .. describe:: x ^ y, x ^= y

            Returns a ChannelFlags instance with only flags enabled on
            only one of x or y, not on both.

            .. versionadded:: 2.0

        .. describe:: ~x

            Returns a ChannelFlags instance with all flags inverted from x.

            .. versionadded:: 2.0

        .. describe:: hash(x)

            Return the flag's hash.
        .. describe:: iter(x)

            Returns an iterator of ``(name, value)`` pairs. This allows it
            to be, for example, constructed as a dict or a list of pairs.
            Note that aliases are not shown.

        .. describe:: bool(b)

            Returns whether any flag is set to ``True``.

    .. versionadded:: 2.0

    Attributes
    -----------
    value: :class:`int`
        The raw value. You should query flags via the properties
        rather than using this raw value.
    c                    dS )zM:class:`bool`: Returns ``True`` if the thread is pinned to the forum channel.r   r>   rv   s    r@   pinnedzChannelFlags.pinned  	     vr?   c                    dS )z:class:`bool`: Returns ``True`` if a tag is required to be specified when creating a thread
        in a :class:`ForumChannel`.

        .. versionadded:: 2.1
        r   r>   rv   s    r@   require_tagzChannelFlags.require_tag  rO  r?   c                    dS )z:class:`bool`: Returns ``True`` if the client hides embedded media download options in a :class:`ForumChannel`.
        Only available in media channels.

        .. versionadded:: 2.4
        r
  r>   rv   s    r@   hide_media_download_optionsz(ChannelFlags.hide_media_download_options  r  r?   N)r:   r;   r<   r`   rZ   r  r  r  r>   r?   r@   rL   rL     sp        : :x   Z   Z   Z  r?   rL   c                  d    e Zd Zedd            Zdd	ddZedd            Zedd            ZdS )
ArrayFlagsr~   
Type[Self]ro   Sequence[int]rg   r   c                    |                      |           }t          t          t          dj        |          d          dz	  |_        |S )Nr   r   )r   r   r   map
__lshift__ro   r   s      r@   r   zArrayFlags._from_value  s>    {{3 Ca^U!;!;Q??1D
r?   r   offsetr  r   	List[int]c               l      fdt           j                                                  D             S )Nc                4    g | ]}j         d |z  z  |z   S )r   r   )r   ir  ra   s     r@   r8  z'ArrayFlags.to_array.<locals>.<listcomp>  s0    \\\qdjTUYZTZF[\F
\\\r?   )rangero   r   )ra   r  s   ``r@   to_arrayzArrayFlags.to_array  s7    \\\\\E$**?*?*A*A$B$B\\\\r?   c                    t          | j                                                                                  }d|z  dz
  }|                     |           }||_        |S )zPA factory method that creates an instance of ArrayFlags with everything enabled.r   rw  rx  s       r@   r9  zArrayFlags.all  ry  r?   c                H    |                      |           }|j        |_        |S )zQA factory method that creates an instance of ArrayFlags with everything disabled.rE  rF  s     r@   rG  zArrayFlags.none  rH  r?   N)r~   r  ro   r  rg   r   )r  r   rg   r  )r~   r  rg   r   )r:   r;   r<   r   r   r  r9  rG  r>   r?   r@   r  r    s           [ )* ] ] ] ] ] ]    [    [  r?   r  c                  f     e Zd ZdZd fdZed             Zed             Zed             Z xZ	S )	rM   a  Wraps up the Discord :class:`AutoModRule` presets.

    .. versionadded:: 2.0


    .. container:: operations

        .. describe:: x == y

            Checks if two AutoMod preset flags are equal.

        .. describe:: x != y

            Checks if two AutoMod preset flags are not equal.

        .. describe:: x | y, x |= y

            Returns an AutoModPresets instance with all enabled flags from
            both x and y.

            .. versionadded:: 2.0

        .. describe:: x & y, x &= y

            Returns an AutoModPresets instance with only flags enabled on
            both x and y.

            .. versionadded:: 2.0

        .. describe:: x ^ y, x ^= y

            Returns an AutoModPresets instance with only flags enabled on
            only one of x or y, not on both.

            .. versionadded:: 2.0

        .. describe:: ~x

            Returns an AutoModPresets instance with all flags inverted from x.

            .. versionadded:: 2.0

        .. describe:: hash(x)

            Return the flag's hash.
        .. describe:: iter(x)

            Returns an iterator of ``(name, value)`` pairs. This allows it
            to be, for example, constructed as a dict or a list of pairs.
            Note that aliases are not shown.

        .. describe:: bool(b)

            Returns whether any flag is set to ``True``.

    Attributes
    -----------
    value: :class:`int`
        The raw value. You should query flags via the properties
        rather than using this raw value.
    rg   r  c                H    t                                          d          S )Nr   r  )superr  )ra   r   s    r@   r  zAutoModPresets.to_arrayY  s    wwq)))r?   c                    dS )z::class:`bool`: Whether to use the preset profanity filter.r   r>   rv   s    r@   	profanityzAutoModPresets.profanity\  r  r?   c                    dS )z?:class:`bool`: Whether to use the preset sexual content filter.r   r>   rv   s    r@   sexual_contentzAutoModPresets.sexual_contenta  r  r?   c                    dS )z6:class:`bool`: Whether to use the preset slurs filter.r   r>   rv   s    r@   slurszAutoModPresets.slursf  r  r?   )rg   r  )
r:   r;   r<   r`   r  rZ   r  r  r  __classcell__)r   s   @r@   rM   rM     s        < <|* * * * * *   Z   Z   Z    r?   rM   c                  X    e Zd ZdZdZed             Zed             Zed             ZdS )rO   a  Wraps up the Discord :class:`~discord.app_commands.Command` execution context.

    .. versionadded:: 2.4

    .. container:: operations

        .. describe:: x == y

            Checks if two AppCommandContext flags are equal.

        .. describe:: x != y

            Checks if two AppCommandContext flags are not equal.

        .. describe:: x | y, x |= y

            Returns an AppCommandContext instance with all enabled flags from
            both x and y.

        .. describe:: x & y, x &= y

            Returns an AppCommandContext instance with only flags enabled on
            both x and y.

        .. describe:: x ^ y, x ^= y

            Returns an AppCommandContext instance with only flags enabled on
            only one of x or y, not on both.

        .. describe:: ~x

            Returns an AppCommandContext instance with all flags inverted from x

        .. describe:: hash(x)

            Return the flag's hash.
        .. describe:: iter(x)

            Returns an iterator of ``(name, value)`` pairs. This allows it
            to be, for example, constructed as a dict or a list of pairs.
            Note that aliases are not shown.

        .. describe:: bool(b)

            Returns whether any flag is set to ``True``.

    Attributes
    -----------
    value: :class:`int`
        The raw value. You should query flags via the properties
        rather than using this raw value.
       c                    dS )z;:class:`bool`: Whether the context allows usage in a guild.r   r>   rv   s    r@   guildzAppCommandContext.guild  r  r?   c                    dS )z@:class:`bool`: Whether the context allows usage in a DM channel.r   r>   rv   s    r@   
dm_channelzAppCommandContext.dm_channel  r  r?   c                    dS )zI:class:`bool`: Whether the context allows usage in a DM or a GDM channel.r   r>   rv   s    r@   private_channelz!AppCommandContext.private_channel  r  r?   N)	r:   r;   r<   r`   r   rZ   r  r  r  r>   r?   r@   rO   rO   l  su        3 3j M  Z   Z   Z  r?   rO   c                  >    e Zd ZdZed             Zed             ZdS )rR   a  Represents the installation location of an application command.

    .. versionadded:: 2.4

    .. container:: operations

        .. describe:: x == y

            Checks if two AppInstallationType flags are equal.

        .. describe:: x != y

            Checks if two AppInstallationType flags are not equal.

        .. describe:: x | y, x |= y

            Returns an AppInstallationType instance with all enabled flags from
            both x and y.

        .. describe:: x & y, x &= y

            Returns an AppInstallationType instance with only flags enabled on
            both x and y.

        .. describe:: x ^ y, x ^= y

            Returns an AppInstallationType instance with only flags enabled on
            only one of x or y, not on both.

        .. describe:: ~x

            Returns an AppInstallationType instance with all flags inverted from x

        .. describe:: hash(x)

            Return the flag's hash.
        .. describe:: iter(x)

            Returns an iterator of ``(name, value)`` pairs. This allows it
            to be, for example, constructed as a dict or a list of pairs.
            Note that aliases are not shown.

        .. describe:: bool(b)

            Returns whether any flag is set to ``True``.

    Attributes
    -----------
    value: :class:`int`
        The raw value. You should query flags via the properties
        rather than using this raw value.
    c                    dS )z::class:`bool`: Whether the integration is a guild install.r   r>   rv   s    r@   r  zAppInstallationType.guild  r  r?   c                    dS )z9:class:`bool`: Whether the integration is a user install.r   r>   rv   s    r@   userzAppInstallationType.user  r  r?   N)r:   r;   r<   r`   rZ   r  r  r>   r?   r@   rR   rR     sU        3 3j   Z   Z  r?   rR   c                      e Zd ZdZed             Zed             Zed             Zed             Zed             Z	ed             Z
ed             Zed	             Zed
             Zed             ZdS )rN   a9  Wraps up the Discord Guild Member flags

    .. versionadded:: 2.2

    .. container:: operations

        .. describe:: x == y

            Checks if two MemberFlags are equal.

        .. describe:: x != y

            Checks if two MemberFlags are not equal.

        .. describe:: x | y, x |= y

            Returns a MemberFlags instance with all enabled flags from
            both x and y.

        .. describe:: x & y, x &= y

            Returns a MemberFlags instance with only flags enabled on
            both x and y.

        .. describe:: x ^ y, x ^= y

            Returns a MemberFlags instance with only flags enabled on
            only one of x or y, not on both.

        .. describe:: ~x

            Returns a MemberFlags instance with all flags inverted from x.

        .. describe:: hash(x)

            Return the flag's hash.

        .. describe:: iter(x)

            Returns an iterator of ``(name, value)`` pairs. This allows it
            to be, for example, constructed as a dict or a list of pairs.
            Note that aliases are not shown.

        .. describe:: bool(b)

            Returns whether any flag is set to ``True``.


    Attributes
    -----------
    value: :class:`int`
        The raw value. You should query flags via the properties
        rather than using this raw value.
    c                    dS )zb:class:`bool`: Returns ``True`` if the member left and rejoined the :attr:`~discord.Member.guild`.r   r>   rv   s    r@   
did_rejoinzMemberFlags.did_rejoin0  r  r?   c                    dS )zG:class:`bool`: Returns ``True`` if the member has completed onboarding.r   r>   rv   s    r@   completed_onboardingz MemberFlags.completed_onboarding5  r  r?   c                    dS )z]:class:`bool`: Returns ``True`` if the member can bypass the guild verification requirements.r   r>   rv   s    r@   bypasses_verificationz!MemberFlags.bypasses_verification:  r  r?   c                    dS )zE:class:`bool`: Returns ``True`` if the member has started onboarding.r   r>   rv   s    r@   started_onboardingzMemberFlags.started_onboarding?  r  r?   c                    dS )z:class:`bool`: Returns ``True`` if the member is a guest and can only access
        the voice channel they were invited to.

        .. versionadded:: 2.5
        r   r>   rv   s    r@   guestzMemberFlags.guestD  rO  r?   c                    dS )z:class:`bool`: Returns ``True`` if the member has started Server Guide new member actions.

        .. versionadded:: 2.5
        r   r>   rv   s    r@   started_home_actionsz MemberFlags.started_home_actionsM  	     vr?   c                    dS )z:class:`bool`: Returns ``True`` if the member has completed Server Guide new member actions.

        .. versionadded:: 2.5
        r   r>   rv   s    r@   completed_home_actionsz"MemberFlags.completed_home_actionsU  r  r?   c                    dS )z:class:`bool`: Returns ``True`` if the member's username, nickname, or global name has been
        blocked by AutoMod.

        .. versionadded:: 2.5
        r   r>   rv   s    r@   automod_quarantined_usernamez(MemberFlags.automod_quarantined_username]  rO  r?   c                    dS )z:class:`bool`: Returns ``True`` if the member's guild tag has been
        blocked by AutoMod.

        .. versionadded:: 2.6
        r_  r>   rv   s    r@   automod_quarantined_guild_tagz)MemberFlags.automod_quarantined_guild_tagf  r  r?   c                    dS )z{:class:`bool`: Returns ``True`` if the member has dismissed the DM settings upsell.

        .. versionadded:: 2.5
        rZ  r>   rv   s    r@   dm_settings_upsell_acknowledgedz+MemberFlags.dm_settings_upsell_acknowledgedo  r  r?   N)r:   r;   r<   r`   rZ   r  r  r  r  r  r  r  r  r  r  r>   r?   r@   rN   rN     s-       5 5n   Z   Z   Z   Z   Z   Z   Z   Z   Z   Z  r?   rN   c                      e Zd ZdZed             Zed             Zed             Zed             Zed             Z	ed             Z
dS )	rP   aO  Wraps up the Discord Attachment flags

    .. versionadded:: 2.4

    .. container:: operations

        .. describe:: x == y

            Checks if two AttachmentFlags are equal.

        .. describe:: x != y

            Checks if two AttachmentFlags are not equal.

        .. describe:: x | y, x |= y

            Returns a AttachmentFlags instance with all enabled flags from
            both x and y.

        .. describe:: x & y, x &= y

            Returns a AttachmentFlags instance with only flags enabled on
            both x and y.

        .. describe:: x ^ y, x ^= y

            Returns a AttachmentFlags instance with only flags enabled on
            only one of x or y, not on both.

        .. describe:: ~x

            Returns a AttachmentFlags instance with all flags inverted from x.

        .. describe:: hash(x)

            Return the flag's hash.

        .. describe:: iter(x)

            Returns an iterator of ``(name, value)`` pairs. This allows it
            to be, for example, constructed as a dict or a list of pairs.
            Note that aliases are not shown.

        .. describe:: bool(b)

            Returns whether any flag is set to ``True``.


    Attributes
    -----------
    value: :class:`int`
        The raw value. You should query flags via the properties
        rather than using this raw value.
    c                    dS )z<:class:`bool`: Returns ``True`` if the attachment is a clip.r   r>   rv   s    r@   clipzAttachmentFlags.clip  r  r?   c                    dS )zA:class:`bool`: Returns ``True`` if the attachment is a thumbnail.r   r>   rv   s    r@   	thumbnailzAttachmentFlags.thumbnail  r  r?   c                    dS )zZ:class:`bool`: Returns ``True`` if the attachment has been edited using the remix feature.r   r>   rv   s    r@   remixzAttachmentFlags.remix  r  r?   c                    dS )zr:class:`bool`: Returns ``True`` if the attachment was marked as a spoiler.

        .. versionadded:: 2.5
        r   r>   rv   s    r@   spoilerzAttachmentFlags.spoiler  r  r?   c                    dS )z{:class:`bool`: Returns ``True`` if the attachment was flagged as sensitive content.

        .. versionadded:: 2.5
        r   r>   rv   s    r@   contains_explicit_mediaz'AttachmentFlags.contains_explicit_media  r  r?   c                    dS )zo:class:`bool`: Returns ``True`` if the attachment is an animated image.

        .. versionadded:: 2.5
        r   r>   rv   s    r@   animatedzAttachmentFlags.animated  r  r?   N)r:   r;   r<   r`   rZ   r  r  r  r  r  r  r>   r?   r@   rP   rP   x  s        5 5n   Z   Z   Z   Z   Z   Z  r?   rP   c                  (    e Zd ZdZed             ZdS )rQ   a%  Wraps up the Discord Role flags

    .. versionadded:: 2.4

    .. container:: operations

        .. describe:: x == y

            Checks if two RoleFlags are equal.

        .. describe:: x != y

            Checks if two RoleFlags are not equal.

        .. describe:: x | y, x |= y

            Returns a RoleFlags instance with all enabled flags from
            both x and y.

        .. describe:: x & y, x &= y

            Returns a RoleFlags instance with only flags enabled on
            both x and y.

        .. describe:: x ^ y, x ^= y

            Returns a RoleFlags instance with only flags enabled on
            only one of x or y, not on both.

        .. describe:: ~x

            Returns a RoleFlags instance with all flags inverted from x.

        .. describe:: hash(x)

            Return the flag's hash.

        .. describe:: iter(x)

            Returns an iterator of ``(name, value)`` pairs. This allows it
            to be, for example, constructed as a dict or a list of pairs.
            Note that aliases are not shown.

        .. describe:: bool(b)

            Returns whether any flag is set to ``True``.


    Attributes
    -----------
    value: :class:`int`
        The raw value. You should query flags via the properties
        rather than using this raw value.
    c                    dS )z_:class:`bool`: Returns ``True`` if the role can be selected by members in an onboarding prompt.r   r>   rv   s    r@   	in_promptzRoleFlags.in_prompt	  r  r?   N)r:   r;   r<   r`   rZ   r  r>   r?   r@   rQ   rQ     s:        5 5n   Z  r?   rQ   c                  T    e Zd ZdZed             Zed             Zed             ZdS )rS   a  Wraps up the Discord SKU flags

    .. versionadded:: 2.4

    .. container:: operations

        .. describe:: x == y

            Checks if two SKUFlags are equal.

        .. describe:: x != y

            Checks if two SKUFlags are not equal.

        .. describe:: x | y, x |= y

            Returns a SKUFlags instance with all enabled flags from
            both x and y.

        .. describe:: x & y, x &= y

            Returns a SKUFlags instance with only flags enabled on
            both x and y.

        .. describe:: x ^ y, x ^= y

            Returns a SKUFlags instance with only flags enabled on
            only one of x or y, not on both.

        .. describe:: ~x

            Returns a SKUFlags instance with all flags inverted from x.

        .. describe:: hash(x)

            Return the flag's hash.

        .. describe:: iter(x)

            Returns an iterator of ``(name, value)`` pairs. This allows it
            to be, for example, constructed as a dict or a list of pairs.
            Note that aliases are not shown.

        .. describe:: bool(b)

            Returns whether any flag is set to ``True``.


    Attributes
    -----------
    value: :class:`int`
        The raw value. You should query flags via the properties
        rather than using this raw value.
    c                    dS )zE:class:`bool`: Returns ``True`` if the SKU is available for purchase.r   r>   rv   s    r@   	availablezSKUFlags.availableQ	  r  r?   c                    dS )zC:class:`bool`: Returns ``True`` if the SKU is a guild subscription.r   r>   rv   s    r@   guild_subscriptionzSKUFlags.guild_subscriptionV	  r  r?   c                    dS )zB:class:`bool`: Returns ``True`` if the SKU is a user subscription.r   r>   rv   s    r@   user_subscriptionzSKUFlags.user_subscription[	  r  r?   N)r:   r;   r<   r`   rZ   r  r  r  r>   r?   r@   rS   rS   	  sp        5 5n   Z   Z   Z  r?   rS   c                  >    e Zd ZdZed             Zed             ZdS )rT   a  Wraps up the Discord Embed flags

    .. versionadded:: 2.5

    .. container:: operations

        .. describe:: x == y

            Checks if two EmbedFlags are equal.

        .. describe:: x != y

            Checks if two EmbedFlags are not equal.

        .. describe:: x | y, x |= y

            Returns an EmbedFlags instance with all enabled flags from
            both x and y.

        .. describe:: x ^ y, x ^= y

            Returns an EmbedFlags instance with only flags enabled on
            only one of x or y, not on both.

        .. describe:: ~x

            Returns an EmbedFlags instance with all flags inverted from x.

        .. describe:: hash(x)

            Returns the flag's hash.

        .. describe:: iter(x)

            Returns an iterator of ``(name, value)`` pairs. This allows it
            to be, for example, constructed as a dict or a list of pairs.
            Note that aliases are not shown.

        .. describe:: bool(b)

            Returns whether any flag is set to ``True``.

    Attributes
    ----------
    value: :class:`int`
        The raw value. You should query flags via the properties
        rather than using this raw value.
    c                    dS )zN:class:`bool`: Returns ``True`` if the embed was flagged as sensitive content.r   r>   rv   s    r@   r  z"EmbedFlags.contains_explicit_media	  r  r?   c                    dS )zy:class:`bool`: Returns ``True`` if the embed is a reply to an activity card, and is no
        longer displayed.
        r   r>   rv   s    r@   content_inventory_entryz"EmbedFlags.content_inventory_entry	  s	    
 vr?   N)r:   r;   r<   r`   rZ   r  r  r>   r?   r@   rT   rT   a	  sU        / /b   Z   Z  r?   rT   c                  (    e Zd ZdZed             ZdS )rU   a  Wraps up the Discord Invite flags

    .. versionadded:: 2.6

    .. container:: operations

        .. describe:: x == y

            Checks if two InviteFlags are equal.

        .. describe:: x != y

            Checks if two InviteFlags are not equal.

        .. describe:: x | y, x |= y

            Returns a InviteFlags instance with all enabled flags from
            both x and y.

        .. describe:: x ^ y, x ^= y

            Returns a InviteFlags instance with only flags enabled on
            only one of x or y, not on both.

        .. describe:: ~x

            Returns a InviteFlags instance with all flags inverted from x.

        .. describe:: hash(x)

            Returns the flag's hash.

        .. describe:: iter(x)

            Returns an iterator of ``(name, value)`` pairs. This allows it
            to be, for example, constructed as a dict or a list of pairs.
            Note that aliases are not shown.

        .. describe:: bool(b)

            Returns whether any flag is set to ``True``.

    Attributes
    ----------
    value: :class:`int`
        The raw value. You should query flags via the properties
        rather than using this raw value.
    c                    dS )zN:class:`bool`: Returns ``True`` if this is a guest invite for a voice channel.r   r>   rv   s    r@   r  zInviteFlags.guest	  r  r?   N)r:   r;   r<   r`   rZ   r  r>   r?   r@   rU   rU   	  s:        / /b   Z  r?   rU   N)r{   r   rg   r|   )4r`   
__future__r   	functoolsr   operatorr   r.   r   r   r   r	   r
   r   r   r   r   r   r   r   r   r   enumsr   typing_extensionsr   r   r   rC   __all__rV   rZ   rz   r   rW   rF   rG   rH   rI   rJ   rK   rL   r  rM   rO   rR   rN   rP   rQ   rS   rT   rU   r>   r?   r@   <module>r
     s   0 # " " " " "                                           "       $........    iu    >    )5    
& WT%%%2 2 2 2 2 2 2 2.	 	 	 	 	z 	 	 	 ).      ,O[ O[ O[ O[ O[ O[ O[ O[d $L L L L L L L  L^ i i i i i9 i i iX n_ n_ n_ n_ n_i n_ n_ n_b N
 N
 N
 N
 N
i N
 N
 N
b ` ` ` ` `y ` ` `F G G G G Gy G G GT R R R R R9 R R Rj               F O O O O OZ O O Od E E E E E
 E E EP > > > > >* > > >B } } } } }) } } }@ ] ] ] ] ]i ] ] ]@ ; ; ; ; ;	 ; ; ;| E E E E Ey E E EP < < < < < < < <~ 5 5 5 5 5) 5 5 5 5 5r?   