
    x'hT                     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      V/var/www/flask-api/venv/lib/python3.12/site-packages/telebot/states/asyncio/context.py__init__zStateContext.__init__   s    6=!$hhoo    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}       DLL$((//: 	L0&:K eU#JJEXX''#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      DLL$((//: 	L0&:K XX''#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      DLL$((//: 	L0&:K XX**#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      DLL$((//: 	L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.dataq   sY     DLL$((//: 	L0&:K xx%%#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      DLL$((//: 	L0&:K 'TXX&& 
#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 &

uUCZ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   