Ë
    'Pbjí  ã                   óX   — d dl mZ d dlmZmZ d dlmZ d dl mZ d dlm	Z	  G d„ d«      Z
y)	é    )ÚState)ÚCallbackQueryÚMessage)ÚAsyncTeleBot)Úresolve_context)ÚUnionc                   ó€   — e Zd ZdZdeeef   deddfd„Zdee	e
f   defd„Zde
fd	„Zdefd
„Zdefd„Zdefd„Zdd„Zy)ÚStateContexta  
    Class representing a state context.

    Passed through a middleware to provide easy way to set states.

    .. code-block:: python3

        @bot.message_handler(commands=['start'])
        async def start_ex(message: types.Message, state_context: StateContext):
            await state_context.set(MyStates.name)
            await bot.send_message(message.chat.id, 'Hi, write me a name', reply_to_message_id=message.message_id)
            # also, state_context.data(), .add_data(), .reset_data(), .delete() methods available.
    ÚmessageÚbotÚreturnNc                 óV   — || _         || _        | j                  j                  | _        y )N)r   r   Úbot_id)Úselfr   r   s      úQ/var/www/html/venv/lib/python3.12/site-packages/telebot/states/asyncio/context.pyÚ__init__zStateContext.__init__   s   € Ø6=ˆŒØ!$ˆŒØ—h‘h—o‘oˆ�ó    Ústatec              ƒ   óø   K  — t        | j                  | j                  j                  «      \  }}}}}t	        |t
        «      r|j                  }| j                  j                  ||||||¬«      ƒ d{  –—† S 7 Œ­w)aá  
        Set state for current user.

        :param state: State object or state name.
        :type state: Union[State, str]

        .. code-block:: python3

            @bot.message_handler(commands=['start'])
            async def start_ex(message: types.Message, state_context: StateContext):
                await state_context.set(MyStates.name)
                await bot.send_message(message.chat.id, 'Hi, write me a name', reply_to_message_id=message.message_id)
        )Úchat_idÚuser_idr   Úbusiness_connection_idr   Úmessage_thread_idN)r   r   r   r   Ú
isinstancer   ÚnameÚ	set_state)r   r   r   r   r   r   r   s          r   ÚsetzStateContext.set   s}   è ø€ ô  ˜DŸL™L¨$¯(©(¯/©/Ó:ñ 	Lˆ�Ð0°&Ð:Kô �eœUÔ#Ø—J‘JˆEØ—X‘X×'Ñ'ØØØØ#9ØØ/ð (ó 
÷ 
ð 	
ð 
ús   ‚A1A:Á3A8Á4A:c              ƒ   ó¾   K  — t        | j                  | j                  j                  «      \  }}}}}| j                  j	                  |||||¬«      ƒ d{  –—† S 7 Œ­w)zo
        Get current state for current user.

        :return: Current state name.
        :rtype: str
        ©r   r   r   r   r   N)r   r   r   r   Ú	get_state©r   r   r   r   r   r   s         r   ÚgetzStateContext.get:   sg   è ø€ ô ˜DŸL™L¨$¯(©(¯/©/Ó:ñ 	Lˆ�Ð0°&Ð:Kð —X‘X×'Ñ'ØØØ#9ØØ/ð (ó 
÷ 
ð 	
ð 
úó   ‚AAÁAÁAc              ƒ   ó¾   K  — t        | j                  | j                  j                  «      \  }}}}}| j                  j	                  |||||¬«      ƒ d{  –—† S 7 Œ­w)z¡
        Deletes state and data for current user.

        .. warning::

                This method deletes state and associated data for current user.
        r   N)r   r   r   r   Údelete_stater!   s         r   ÚdeletezStateContext.deleteM   sg   è ø€ ô ˜DŸL™L¨$¯(©(¯/©/Ó:ñ 	Lˆ�Ð0°&Ð:Kð —X‘X×*Ñ*ØØØ#9ØØ/ð +ó 
÷ 
ð 	
ð 
úr#   c              ƒ   ó¾   K  — t        | j                  | j                  j                  «      \  }}}}}| j                  j	                  |||||¬«      ƒ d{  –—† S 7 Œ­w)zQ
        Reset data for current user.
        State will not be changed.
        r   N)r   r   r   r   Ú
reset_datar!   s         r   r(   zStateContext.reset_data`   sg   è ø€ ô ˜DŸL™L¨$¯(©(¯/©/Ó:ñ 	Lˆ�Ð0°&Ð:Kð —X‘X×(Ñ(ØØØ#9ØØ/ð )ó 
÷ 
ð 	
ð 
úr#   c                 ó¢   — t        | j                  | j                  j                  «      \  }}}}}| j                  j	                  |||||¬«      S )z¿
        Get data for current user.

        .. code-block:: python3

            with state_context.data() as data:
                print(data)
                data['name'] = 'John'
        r   )r   r   r   r   Úretrieve_datar!   s         r   ÚdatazStateContext.dataq   sY   € ô ˜DŸL™L¨$¯(©(¯/©/Ó:ñ 	Lˆ�Ð0°&Ð:Kð �x‰x×%Ñ%ØØØ#9ØØ/ð &ó 
ð 	
r   c           	   ‹   óÂ   K  — t        | j                  | j                  j                  «      \  }}}}} | j                  j                  d|||||dœ|¤Žƒ d{  –—† S 7 Œ­w)zl
        Add data for current user.

        :param kwargs: Data to add.
        :type kwargs: dict
        r   N© )r   r   r   r   Úadd_data)r   Úkwargsr   r   r   r   r   s          r   r.   zStateContext.add_data‡   ss   è ø€ ô ˜DŸL™L¨$¯(©(¯/©/Ó:ñ 	Lˆ�Ð0°&Ð:Kð '�T—X‘X×&Ñ&ð 
ØØØ#9ØØ/ñ
ð ñ
÷ 
ð 	
ð 
ús   ‚AAÁAÁA)r   N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r   r   r   r   ÚstrÚboolr   r"   r&   r(   Údictr+   r.   r-   r   r   r
   r
   	   s}   „ ñð&  g¨}Ð&<Ñ =ð &ÀLð &ÐUYó &ð

˜u U¨C ZÑ0ð 
°Tó 
ð:
˜3ó 
ð&
˜dó 
ð&
 $ó 
ð"
�dó 
ô,
r   r
   N)Útelebot.statesr   Útelebot.typesr   r   Útelebot.async_telebotr   r   Útypingr   r
   r-   r   r   ú<module>r;      s    ðÝ  ß 0Ý .Ý *å ÷P
ò P
r   