o
    4˜Žj­  ã                   @  sà   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
 d dlmZmZ er.d dlmZ edd�G d	d
„ d
ƒƒZedd�G dd„ dƒƒZerPG dd„ deƒZG dd„ dƒZd'dd„Zd(dd„Zddœd)d!d"„Zd*d%d&„ZdS )+é    )Úannotations)ÚCallable)Ú	dataclass)ÚTYPE_CHECKINGÚAnyÚcastÚoverload)ÚAttrDictÚMagicFilter)ÚHandlerObjectT)Úfrozenc                   @  s   e Zd ZU ded< ded< dS )ÚFlagÚstrÚnamer   ÚvalueN)Ú__name__Ú
__module__Ú__qualname__Ú__annotations__© r   r   úU/var/www/kodo/Anonymous/send/lib/python3.10/site-packages/aiogram/dispatcher/flags.pyr      s   
 r   c                   @  sf   e Zd ZU ded< eddd„ƒZddd	„Zeddd„ƒZeddd„ƒZeddd„ƒZ	dddd„ZdS )ÚFlagDecoratorr   ÚflagÚreturnc                 C  s   | |ƒS ©Nr   )Úclsr   r   r   r   Ú
_with_flag   s   zFlagDecorator._with_flagr   r   c                 C  s   t | jj|ƒ}|  |¡S r   )r   r   r   r   )Úselfr   Únew_flagr   r   r   Ú_with_value   s   
zFlagDecorator._with_valueúCallable[..., Any]c                C  ó   d S r   r   ©r   r   r   r   r   Ú__call__   ó   zFlagDecorator.__call__c                C  r!   r   r   r"   r   r   r   r#   #   r$   Úkwargsc                 K  r!   r   r   )r   r%   r   r   r   r#   '   r$   Nú
Any | Noneú"Callable[..., Any] | FlagDecoratorc                 K  sp   |r
|r
d}t |ƒ‚|d ur*t|ƒr*i t|ƒ¥| jj| jji¥|_ttdt	f |ƒS |  
|d u r5t|ƒ¡S |¡S )Nz;The arguments `value` and **kwargs can not be used together.)Ú
ValueErrorÚcallableÚextract_flags_from_objectr   r   r   Úaiogram_flagr   r   r   r   r	   )r   r   r%   Úmsgr   r   r   r#   +   s   ÿþ)r   r   r   r   )r   r   r   r   )r   r    r   r    )r%   r   r   r   r   )r   r&   r%   r   r   r'   )	r   r   r   r   Úclassmethodr   r   r   r#   r   r   r   r   r      s   
 
þr   c                   @  s   e Zd Z			dddd„ZdS )Ú_ChatActionFlagProtocol.Úactionr   ÚintervalÚfloatÚinitial_sleepr%   r   r   r   c                 K  r!   r   r   )r   r/   r0   r2   r%   r   r   r   r#   @   s   z _ChatActionFlagProtocol.__call__N)...)
r/   r   r0   r1   r2   r1   r%   r   r   r   )r   r   r   r#   r   r   r   r   r.   ?   s
    ür.   c                   @  s(   e Zd ZU d
dd„Zerded< d	S d	S )ÚFlagGeneratorr   r   r   r   c                 C  s&   |d dkrd}t |ƒ‚tt|dƒƒS )Nr   Ú_z(Flag name must NOT start with underscoreT)ÚAttributeErrorr   r   )r   r   r,   r   r   r   Ú__getattr__K   s   zFlagGenerator.__getattr__r.   Úchat_actionN)r   r   r   r   )r   r   r   r6   r   r   r   r   r   r   r3   J   s
   
 
ÿr3   Úobjr   r   údict[str, Any]c                 C  s"   t | dƒsi S ttttf | jƒS )Nr+   )Úhasattrr   Údictr   r   r+   )r8   r   r   r   r*   U   s   
r*   ÚhandlerúHandlerObject | dict[str, Any]c                 C  s.   t | tƒrd| v r| d } t| dƒr| jS i S )zš
    Extract flags from handler or middleware context data

    :param handler: handler object or data
    :return: dictionary with all handler flags
    r<   Úflags)Ú
isinstancer;   r:   r>   )r<   r   r   r   Úextract_flags[   s
   
r@   N)Údefaultr   r   rA   r&   c                C  s   t | ƒ}| ||¡S )z»
    Get flag by name

    :param handler: handler object or data
    :param name: name of the flag
    :param default: default value (None)
    :return: value of the flag or default
    )r@   Úget)r<   r   rA   r>   r   r   r   Úget_flagi   s   rC   Úmagicr
   c                 C  s   t | ƒ}| t|ƒ¡S )z¨
    Check flags via magic filter

    :param handler: handler object or data
    :param magic: instance of the magic
    :return: the result of magic filter check
    )r@   Úresolver	   )r<   rD   r>   r   r   r   Úcheck_flags{   s   rF   )r8   r   r   r9   )r<   r=   r   r9   )r<   r=   r   r   rA   r&   r   r   )r<   r=   rD   r
   r   r   )Ú
__future__r   Úcollections.abcr   Údataclassesr   Útypingr   r   r   r   Úmagic_filterr	   r
   Ú aiogram.dispatcher.event.handlerr   r   r   r.   r3   r*   r@   rC   rF   r   r   r   r   Ú<module>   s&    )

ü