Ë
    'Pbj	  ã                   ó`   — d dl mZmZ d dlmZmZ d dlmZmZ d dl m	Z	 d dl
mZ  G d„ d«      Zy)	é    )ÚStateÚStatesGroup)ÚCallbackQueryÚMessage)ÚTeleBotÚtypes)Ú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'])
        def start_ex(message: types.Message, state_context: StateContext):
            state_context.set(MyStates.name)
            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      úN/var/www/html/venv/lib/python3.12/site-packages/telebot/states/sync/context.pyÚ__init__zStateContext.__init__   s   € Ø6=ˆŒØˆŒØ—h‘h—o‘oˆ�ó    Ústatec                 óÜ   — t        | j                  | j                  j                  «      \  }}}}}t	        |t
        «      r|j                  }| j                  j                  ||||||¬«      S )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'])
            def start_ex(message: types.Message, state_context: StateContext):
                state_context.set(MyStates.name)
                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_id)r	   r   r   r   Ú
isinstancer   ÚnameÚ	set_state)r   r   r   r   r   r   r   s          r   ÚsetzStateContext.set   st   € ô O^Ð^b×^jÑ^jÐlp×ltÑlt×l{Ñl{ÓN|ÑKˆ�Ð0°&Ð:KÜ�eœUÔ#Ø—J‘JˆEØ�x‰x×!Ñ!ØØØØ#9ØØ/ð "ó 
ð 	
r   c                 ó¢   — t        | j                  | j                  j                  «      \  }}}}}| j                  j	                  |||||¬«      S )zo
        Get current state for current user.

        :return: Current state name.
        :rtype: str
        ©r   r   r   r   r   )r	   r   r   r   Ú	get_state©r   r   r   r   r   r   s         r   ÚgetzStateContext.get9   s^   € ô O^Ð^b×^jÑ^jÐlp×ltÑlt×l{Ñl{ÓN|ÑKˆ�Ð0°&Ð:KØ�x‰x×!Ñ!ØØØ#9ØØ/ð "ó 
ð 	
r   c                 ó¢   — t        | j                  | j                  j                  «      \  }}}}}| j                  j	                  |||||¬«      S )z­
        Deletes state and data for current user.

        .. warning::
            
                This method deletes state and associated data for current user.
        r!   )r	   r   r   r   Údelete_stater#   s         r   ÚdeletezStateContext.deleteJ   s^   € ô O^Ð^b×^jÑ^jÐlp×ltÑlt×l{Ñl{ÓN|ÑKˆ�Ð0°&Ð:KØ�x‰x×$Ñ$ØØØ#9ØØ/ð %ó 
ð 	
r   c                 ó¢   — t        | j                  | j                  j                  «      \  }}}}}| j                  j	                  |||||¬«      S )zR
        Reset data for current user. 
        State will not be changed.
        r!   )r	   r   r   r   Ú
reset_datar#   s         r   r)   zStateContext.reset_data[   s^   € ô O^Ð^b×^jÑ^jÐlp×ltÑlt×l{Ñl{ÓN|ÑKˆ�Ð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.dataj   s^   € ô O^Ð^b×^jÑ^jÐlp×ltÑlt×l{Ñl{ÓN|ÑKˆ�Ð0°&Ð:KØ�x‰x×%Ñ%ØØØ#9ØØ/ð &ó 
ð 	
r   c           	      ó¦   — t        | j                  | j                  j                  «      \  }}}}} | j                  j                  d|||||dœ|¤ŽS )zl
        Add data for current user.

        :param kwargs: Data to add.
        :type kwargs: dict
        r!   © )r	   r   r   r   Úadd_data)r   Úkwargsr   r   r   r   r   s          r   r/   zStateContext.add_data~   sj   € ô O^Ð^b×^jÑ^jÐlp×ltÑlt×l{Ñl{ÓN|ÑKˆ�Ð0°&Ð:KØ ˆt�x‰x× Ñ ð 
ØØØ#9ØØ/ñ
ð ñ
ð 	
r   )r   N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r
   r   r   Ústrr   r   Úboolr   r$   r'   r)   Údictr,   r/   r.   r   r   r   r   
   s|   „ ñð&  g¨}Ð&<Ñ =ð &ÀCð &ÈDó &ð

˜˜u c˜zÑ*ð 
¨tó 
ð6
�Só 
ð"
˜ó 
ð"
˜Dó 
ð
�dó 
ô(
r   r   N)Útelebot.statesr   r   Útelebot.typesr   r   Útelebotr   r   r	   Útypingr
   r   r.   r   r   ú<module>r<      s    ðß -ß 0ß "Ý *å ÷D
ò D
r   