
    x'h{                     `    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      S/var/www/flask-api/venv/lib/python3.12/site-packages/telebot/states/sync/context.py__init__zStateContext.__init__   s    6=hhoo    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^jlpltltl{l{N|K0&:KeU#JJExx!!#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^jlpltltl{l{N|K0&:Kxx!!#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^jlpltltl{l{N|K0&:Kxx$$#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^jlpltltl{l{N|K0&:Kxx""#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^jlpltltl{l{N|K0&:Kxx%%#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^jlpltltl{l{N|K0&:K txx   
#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 &

ucz* 
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   