Ë
    'Pbjü'  ã                   óÒ   — d Z 	 ddlZddlmZmZ ddlZddlmZm	Z	m
Z
mZ ddlZddlmZmZ de
def   d	e
def   fd
„Zde
def   d	e
def   fd„Z G d„ de«      Zy# e$ r dZ Y ŒUw xY w)Té    N)ÚRedisÚConnectionPoolF)ÚOptionalÚUnionÚCallableÚ	Coroutine)ÚStateStorageBaseÚStateDataContextÚfunc.Úreturnc                 ó   ‡ — ˆ fd„}|S )Nc              Ÿ   ó¶   •K  — | j                   4 ƒd {  –—†   ‰| g|¢­i |¤Žƒ d {  –—† cd d d «      ƒd {  –—†  S 7 Œ)7 Œ7 Œ	# 1 ƒd {  –—†7  sw Y   y xY w­w©N)Úlock)ÚselfÚargsÚkwargsr   s      €úX/var/www/html/venv/lib/python3.12/site-packages/telebot/asyncio_storage/redis_storage.pyÚwrapperz async_with_lock.<locals>.wrapper   sV   øè ø€ Ø—9‘9÷ 	5ñ 	5Ù˜dÐ4 TÒ4¨VÑ4×4÷	5÷ 	5ò 	5øØ4øð	5ø÷ 	5÷ 	5ñ 	5üsP   ƒA”>•A˜A¨A ©A¬A¸A¹AÁ AÁAÁAÁ
AÁAÁA© ©r   r   s   ` r   Úasync_with_lockr      s   ø€ ô5ð €Nó    c                 ó   ‡ — ˆ fd„}|S )Nc              Ÿ   ó,  •K  — | j                   j                  «       4 ƒd {  –—† }|j                  «         ‰| |g|¢­i |¤Žƒ d {  –—† }|j                  «       ƒ d {  –—†  |cd d d «      ƒd {  –—†  S 7 ŒT7 Œ17 Œ7 Œ# 1 ƒd {  –—†7  sw Y   y xY w­wr   )ÚredisÚpipelineÚmultiÚexecute)r   r   r   ÚpipeÚresultr   s        €r   r   z$async_with_pipeline.<locals>.wrapper   s„   øè ø€ Ø—:‘:×&Ñ&Ó(÷ 	ð 	¨DØ�J‰JŒLÙ  dÐ<¨TÒ<°VÑ<×<ˆFØ—,‘,“.× Ð Ø÷		÷ 	ò 	øà<øØ øð	ø÷ 	÷ 	ñ 	üsh   ƒB¢A7£B¦!A?ÁA9ÁA?ÁA;Á A?Á%BÁ1A=Á2BÁ9A?Á;A?Á=BÁ?BÂBÂBÂBr   r   s   ` r   Úasync_with_pipeliner"      s   ø€ ôð €Nr   c                   ó®  — e Zd ZdZ	 	 	 	 	 	 	 	 ddddee   ddfd„Zee	 	 	 dde	d	e	d
edee   dee	   dee	   de
fd„«       «       Z	 	 	 dde	d	e	dee   dee	   dee	   deedf   fd„Z	 	 	 dde	d	e	dee   dee	   dee	   de
fd„Zee	 	 	 dde	d	e	dedeee	eef   dee   dee	   dee	   de
fd„«       «       Z	 	 	 dde	d	e	dee   dee	   dee	   defd„Zee	 	 	 dde	d	e	dee   dee	   dee	   de
fd„«       «       Z	 	 	 dde	d	e	dee   dee	   dee	   dee   fd„Zee	 	 	 dde	d	e	dedee   dee	   dee	   de
fd„«       «       Zdde	dee   fd„Zdefd„Zy)ÚStateRedisStorageaP  
    State storage based on Redis.

    .. code-block:: python3

        storage = StateRedisStorage(...)
        bot = AsyncTeleBot(token, storage=storage)

    :param host: Redis host, default is "localhost".
    :type host: str

    :param port: Redis port, default is 6379.
    :type port: int

    :param db: Redis database, default is 0.
    :type db: int

    :param password: Redis password, default is None.
    :type password: Optional[str]

    :param prefix: Prefix for keys, default is "telebot".
    :type prefix: Optional[str]

    :param redis_url: Redis URL, default is None.
    :type redis_url: Optional[str]

    :param connection_pool: Redis connection pool, default is None.
    :type connection_pool: Optional[ConnectionPool]

    :param separator: Separator for keys, default is ":".
    :type separator: Optional[str]

    NÚconnection_poolr   Ú	separatorr   c	                 ó@  — t         st        d«      ‚|| _        || _        | j                  st	        d«      ‚|r%t
        j                  j                  |«      | _        n(|rt        |¬«      | _        nt        ||||¬«      | _        t        j                  «       | _
        y )Nz.Please install redis using `pip install redis`zPrefix cannot be empty)r%   )ÚhostÚportÚdbÚpassword)Úredis_installedÚImportErrorr&   ÚprefixÚ
ValueErrorr   ÚasyncioÚfrom_urlr   ÚLockr   )	r   r(   r)   r*   r+   r.   Ú	redis_urlr%   r&   s	            r   Ú__init__zStateRedisStorage.__init__E   s{   € õ ÜÐNÓOÐOà"ˆŒØˆŒØ�{Š{ÜÐ5Ó6Ð6áÜŸ™×/Ñ/°	Ó:ˆD�JÙÜ¨Ô?ˆD�Jä D¨t¸ÀXÔNˆDŒJä—L‘L“Nˆ�	r   Úchat_idÚuser_idÚstateÚbusiness_connection_idÚmessage_thread_idÚbot_idc           	   ƒ   ó~  K  — t        |d«      r|j                  }| j                  ||| j                  | j                  |||«      }|j                  |d«       |j                  «       ƒ d {  –—† }	|	d   }
|
€&|j                  |dt        j                  i «      «       |j                  |d|«      ƒ d {  –—†  y7 ŒM7 Œ­w)NÚnameÚdatar   r7   T)
Úhasattrr<   Ú_get_keyr.   r&   Úhgetr   ÚhsetÚjsonÚdumps)r   r    r5   r6   r7   r8   r9   r:   Ú_keyr!   r=   s              r   Ú	set_statezStateRedisStorage.set_stateb   s®   è ø€ ô �5˜&Ô!Ø—J‘JˆEà�}‰}ØØØ�K‰KØ�N‰NØ"ØØó
ˆð 	�	‰	�$˜ÔØ—|‘|“~×%ˆØ�a‰yˆØˆ<Ø�I‰I�d˜F¤D§J¡J¨r£NÔ3à�i‰i˜˜g uÓ-×-Ð-àð &øð
 	.ús%   ‚A)B=Á+B9Á,AB=Â3B;Â4B=Â;B=c           	   ƒ   óÖ   K  — | j                  ||| j                  | j                  |||«      }| j                  j	                  |d«      ƒ d {  –—† }|r|j                  d«      S d S 7 Œ­w)Nr7   úutf-8)r?   r.   r&   r   r@   Údecode)r   r5   r6   r8   r9   r:   rD   Ústate_bytess           r   Ú	get_statezStateRedisStorage.get_state„   si   è ø€ ð �}‰}ØØØ�K‰KØ�N‰NØ"ØØó
ˆð !ŸJ™JŸO™O¨D°'Ó:×:ˆÙ.9ˆ{×!Ñ! 'Ó*ÐC¸tÐCð ;ús   ‚AA)ÁA'ÁA)c           	   ƒ   ó´   K  — | j                  ||| j                  | j                  |||«      }| j                  j	                  |«      ƒ d {  –—† }|dkD  S 7 Œ	­w)Nr   )r?   r.   r&   r   Údelete)r   r5   r6   r8   r9   r:   rD   r!   s           r   Údelete_statezStateRedisStorage.delete_state˜   s[   è ø€ ð �}‰}ØØØ�K‰KØ�N‰NØ"ØØó
ˆð —z‘z×(Ñ(¨Ó.×.ˆØ˜‰zÐð /ús   ‚A
AÁAÁ
AÚkeyÚvaluec	           	   ƒ   óŽ  K  — | j                  ||| j                  | j                  |||«      }	|j                  |	d«      ƒ d {  –—† }
|j	                  «       ƒ d {  –—† }
|
d   }
|
€t        d|	› d�«      ‚t        j                  |
«      }
||
|<   |j                  |	dt        j                  |
«      «      ƒ d {  –—†  y7 Œ{7 Œe7 Œ	­w)Nr=   r   zStateRedisStorage: key z does not exist.T)
r?   r.   r&   r@   r   ÚRuntimeErrorrB   ÚloadsrA   rC   )r   r    r5   r6   rN   rO   r8   r9   r:   rD   r=   s              r   Úset_datazStateRedisStorage.set_data¬   sÂ   è ø€ ð �}‰}ØØØ�K‰KØ�N‰NØ"ØØó
ˆð —Y‘Y˜t VÓ,×,ˆØ—\‘\“^×#ˆØ�A‰wˆØˆ<ÜÐ!8¸¸Ð>NÐOÓPÐPä—:‘:˜dÓ#ˆDØˆD�‰IØ—)‘)˜D &¬$¯*©*°TÓ*:Ó;×;Ð;Øð -øØ#øð <ús7   ‚ACÁB?ÁCÁCÁACÂ9CÂ:CÃCÃCc           	   ƒ   óÞ   K  — | j                  ||| j                  | j                  |||«      }| j                  j	                  |d«      ƒ d {  –—† }|rt        j                  |«      S i S 7 Œ­w)Nr=   )r?   r.   r&   r   r@   rB   rR   )r   r5   r6   r8   r9   r:   rD   r=   s           r   Úget_datazStateRedisStorage.get_dataÍ   sg   è ø€ ð �}‰}ØØØ�K‰KØ�N‰NØ"ØØó
ˆð —Z‘Z—_‘_ T¨6Ó2×2ˆÙ#'Œt�z‰z˜$ÓÐ/¨RÐ/ð 3ús   ‚AA-ÁA+ÁA-c           	   ƒ   óÔ   K  — | j                  ||| j                  | j                  |||«      }|j                  |«      ƒ d {  –—† r|j	                  |dd«      ƒ d {  –—†  yy7 Œ!7 Œ­w)Nr=   z{}FT)r?   r.   r&   ÚexistsrA   )r   r    r5   r6   r8   r9   r:   rD   s           r   Ú
reset_datazStateRedisStorage.reset_dataá   sp   è ø€ ð �}‰}ØØØ�K‰KØ�N‰NØ"ØØó
ˆð —‘˜TÓ"×"Ð"Ø—)‘)˜D &¨$Ó/×/Ð/ð ð ð #øØ/ús$   ‚A A(ÁA$ÁA(ÁA&ÁA(Á&A(c                 ó$   — t        | |||||¬«      S )N)r5   r6   r8   r9   r:   )r
   )r   r5   r6   r8   r9   r:   s         r   Úget_interactive_dataz&StateRedisStorage.get_interactive_dataû   s#   € ô  ØØØØ#9Ø/Øô
ð 	
r   r=   c           	   ƒ   óú   K  — | j                  ||| j                  | j                  |||«      }|j                  |«      ƒ d {  –—† r/|j	                  |dt        j                  |«      «      ƒ d {  –—†  yy7 Œ47 Œ­w)Nr=   FT)r?   r.   r&   rW   rA   rB   rC   )	r   r    r5   r6   r=   r8   r9   r:   rD   s	            r   ÚsavezStateRedisStorage.save  sy   è ø€ ð �}‰}ØØØ�K‰KØ�N‰NØ"ØØó
ˆð —‘˜TÓ"×"Ð"Ø—)‘)˜D &¬$¯*©*°TÓ*:Ó;×;Ð;ð ð ð #øØ;ús$   ‚A A;ÁA7Á-A;Á0A9Á1A;Á9A;r.   c                 ó�  — | j                   j                  |› d�«      }|D �]"  }|j                  d«      }| j                   j                  |«      }t	        j
                  |«      }|t        |«      d }t        |j                  «       «      d   }||   d   }	||   d   }
| j                  t        |«      t        |«      | j                  | j                  |¬«      }| j                   j                  |d|	«       | j                   j                  |dt	        j                  |
«      «       | j                   j                  |«       �Œ% y)a_  
        Migrate from old to new format of keys.
        Run this function once to migrate all redis existing keys to new format.

        Starting from version 4.23.0, the format of keys has been changed:
        <key>:value
        - Old format: {prefix}chat_id: {user_id: {'state': None, 'data': {}}, ...}
        - New format:
        {prefix}{separator}{bot_id}{separator}{business_connection_id}{separator}{message_thread_id}{separator}{chat_id}{separator}{user_id}: {'state': ..., 'data': {}}

        This function will help you to migrate from the old format to the new one in order to avoid data loss.

        :param bot_id: Bot ID; To get it, call a getMe request and grab the id from the response.
        :type bot_id: int

        :param prefix: Prefix for keys, default is "telebot_"(old default value)
        :type prefix: Optional[str]
        Ú*rG   Nr   r7   r=   )r:   )r   ÚkeysrH   ÚgetrB   rR   ÚlenÚlistr?   Úintr.   r&   rA   rC   rL   )r   r:   r.   r_   rN   Úold_keyrO   r5   r6   r7   Ú
state_dataÚnew_keys               r   Úmigrate_formatz StateRedisStorage.migrate_format'  s  € ð& �z‰z�‰ & ¨˜|Ó,ˆàó 	'ˆCØ—j‘j Ó)ˆGà—J‘J—N‘N 7Ó+ˆEÜ—J‘J˜uÓ%ˆEàœc &›k˜mÐ,ˆGÜ˜5Ÿ:™:›<Ó(¨Ñ+ˆGØ˜'‘N 7Ñ+ˆEØ˜w™¨Ñ/ˆJð —m‘mÜ�G“œc '›l¨D¯K©K¸¿¹ÐPVð $ó ˆGð �J‰J�O‰O˜G W¨eÔ4Ø�J‰J�O‰O˜G V¬T¯Z©Z¸
Ó-CÔDð �J‰J×Ñ˜gÖ&ñ'	'r   c                 ó"   — d| j                   › d�S )NzStateRedisStorage(ú))r   )r   s    r   Ú__str__zStateRedisStorage.__str__Q  s   € à# D§J¡J <¨qÐ1Ð1r   )Ú	localhostië  r   NÚtelebotNNú:)NNN)Útelebot_)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   Ústrr4   r   r"   rc   ÚboolrE   r   rJ   rM   ÚfloatÚdictrS   rU   rX   rZ   r\   rg   rj   r   r   r   r$   r$   "   sÍ  „ ñ ðH ØØØØØØ,0Ø#&ñ#ð *ð#ð ˜C‘=ð#ð 
ó#ð: Øð 15Ø+/Ø $ñð ðð ð	ð
 ðð !)¨¡ðð $ C™=ðð ˜‘ðð 
òó ó ððH 15Ø+/Ø $ñDàðDð ðDð !)¨¡ð	Dð
 $ C™=ðDð ˜‘ðDð 
ˆs�DˆyÑ	óDð0 15Ø+/Ø $ñàðð ðð !)¨¡ð	ð
 $ C™=ðð ˜‘ðð 
óð( Øð 15Ø+/Ø $ñð ðð ð	ð
 ðð �S˜#˜u dÐ*Ñ+ðð !)¨¡ðð $ C™=ðð ˜‘ðð 
òó ó ððF 15Ø+/Ø $ñ0àð0ð ð0ð !)¨¡ð	0ð
 $ C™=ð0ð ˜‘ð0ð 
ó0ð( Øð 15Ø+/Ø $ñð ðð ð	ð
 !)¨¡ðð $ C™=ðð ˜‘ðð 
òó ó ðð8 15Ø+/Ø $ñ
àð
ð ð
ð !)¨¡ð	
ð
 $ C™=ð
ð ˜‘ð
ð 
�$‰ó
ð" Øð 15Ø+/Ø $ñð ðð ð	ð
 ðð !)¨¡ðð $ C™=ðð ˜‘ðð 
òó ó ðñ2(' Sð ('°(¸3±-ó ('ðT2˜ô 2r   r$   )r,   r   Úredis.asyncior   r   r-   rB   Útypingr   r   r   r   r0   Ú$telebot.asyncio_storage.base_storager	   r
   r   r"   r$   r   r   r   ú<module>rz      s•   ðØ€ðÛß3ó ß 7Ó 7Û ç Sð˜( 3¨	 >Ñ2ð °xÀÀYÀÑ7Oó ð˜h s¨I ~Ñ6ð ¸8ÀCÈÀNÑ;Só ôq2Ð(õ q2øð; ò Ø‚Oðús   „A ÁA&Á%A&