Ë
    'Pbj5   ã                   ó  — d dl Z d dlZd dlZd dlmZ 	 d dlmZ dZd dlm	Z	m
Z
  G d„ de«      Z G d	„ d
e«      Z G d„ de«      Z G d„ de«      Z G d„ d«      Z G d„ d«      Z G d„ d«      Z G d„ d«      Zy#  dZY ŒcxY w)é    N)Ú	apihelper)ÚRedisTF)ÚStateÚStatesGroupc                   ó*   — e Zd ZdZdd„Zd„ Zd„ Zd„ Zy)ÚHandlerBackendzJ
    Class for saving (next step|reply) handlers.

    :meta private:
    Nc                 ó   — |€i }|| _         y ©N)Úhandlers)Úselfr   s     úK/var/www/html/venv/lib/python3.12/site-packages/telebot/handler_backends.pyÚ__init__zHandlerBackend.__init__   s   € ØÐØˆHØ ˆ�ó    c                 ó   — t        «       ‚r
   ©ÚNotImplementedError©r   Úhandler_group_idÚhandlers      r   Úregister_handlerzHandlerBackend.register_handler   ó   € Ü!Ó#Ð#r   c                 ó   — t        «       ‚r
   r   ©r   r   s     r   Úclear_handlerszHandlerBackend.clear_handlers   r   r   c                 ó   — t        «       ‚r
   r   r   s     r   Úget_handlerszHandlerBackend.get_handlers    r   r   r
   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r   r   © r   r   r   r      s   „ ñó
!ò
$ò$ó$r   r   c                   ó(   — e Zd ZdZd„ Zd„ Zd„ Zd„ Zy)ÚMemoryHandlerBackendú
    :meta private:
    c                 ó~   — || j                   v r| j                   |   j                  |«       y |g| j                   |<   y r
   )r   Úappendr   s      r   r   z%MemoryHandlerBackend.register_handler(   s7   € Ø˜tŸ}™}Ñ,Ø�M‰MÐ*Ñ+×2Ñ2°7Õ;à/6¨iˆD�M‰MÐ*Ò+r   c                 ó<   — | j                   j                  |d «       y r
   ©r   Úpopr   s     r   r   z#MemoryHandlerBackend.clear_handlers.   s   € Ø�‰×ÑÐ*¨DÕ1r   c                 ó:   — | j                   j                  |d «      S r
   r(   r   s     r   r   z!MemoryHandlerBackend.get_handlers1   s   € Ø�}‰}× Ñ Ð!1°4Ó8Ð8r   c                 ó   — t        «       ‚r
   r   )r   ÚfilenameÚdel_file_after_loadings      r   Úload_handlersz"MemoryHandlerBackend.load_handlers4   r   r   N)r   r   r   r    r   r   r   r.   r!   r   r   r#   r#   $   s   „ ñò8ò2ò9ó$r   r#   c                   ón   ‡ — e Zd ZdZdˆ fd„	Zd„ Zd„ Zd„ Zd„ Zd„ Z	dd„Z
edd	„«       Zedd
„«       Zˆ xZS )ÚFileHandlerBackendr$   c                 ó’   •— t         t        | �  |«       || _        || _        t        j                  || j                  «      | _        y r
   )	Úsuperr0   r   r,   ÚdelayÚ	threadingÚTimerÚsave_handlersÚtimer)r   r   r,   r3   Ú	__class__s       €r   r   zFileHandlerBackend.__init__<   s9   ø€ ÜÔ  $Ñ0°Ô:Ø ˆŒØˆŒ
Ü—_‘_ U¨D×,>Ñ,>Ó?ˆ�
r   c                 óž   — || j                   v r| j                   |   j                  |«       n|g| j                   |<   | j                  «        y r
   )r   r&   Ústart_save_timerr   s      r   r   z#FileHandlerBackend.register_handlerB   sC   € Ø˜tŸ}™}Ñ,Ø�M‰MÐ*Ñ+×2Ñ2°7Õ;à/6¨iˆD�M‰MÐ*Ñ+Ø×ÑÕr   c                 ó\   — | j                   j                  |d «       | j                  «        y r
   ©r   r)   r:   r   s     r   r   z!FileHandlerBackend.clear_handlersI   s#   € Ø�‰×ÑÐ*¨DÔ1Ø×ÑÕr   c                 ó^   — | j                   j                  |d «      }| j                  «        |S r
   r<   )r   r   r   s      r   r   zFileHandlerBackend.get_handlersM   s*   € Ø—=‘=×$Ñ$Ð%5°tÓ<ˆØ×ÑÔØˆr   c                 ó  — | j                   j                  «       sj| j                  dk  r| j                  «        y t	        j
                  | j                  | j                  «      | _         | j                   j                  «        y y )Nr   )r7   Úis_aliver3   r6   r4   r5   Ústart©r   s    r   r:   z#FileHandlerBackend.start_save_timerR   sZ   € Ø�z‰z×"Ñ"Ô$Ø�z‰z˜QŠØ×"Ñ"Õ$ä&Ÿ_™_¨T¯Z©Z¸×9KÑ9KÓL�”
Ø—
‘
× Ñ Õ"ð %r   c                 óP   — | j                  | j                  | j                  «       y r
   )Údump_handlersr   r,   rA   s    r   r6   z FileHandlerBackend.save_handlersZ   s   € Ø×Ñ˜4Ÿ=™=¨$¯-©-Õ8r   c                 ó‚   — |s| j                   }| j                  ||¬«      }|�| j                  j                  |«       y y )N)r-   )r,   Úreturn_load_handlersr   Úupdate)r   r,   r-   Útmps       r   r.   z FileHandlerBackend.load_handlers]   s@   € ÙØ—}‘}ˆHØ×'Ñ'¨ÐI_Ð'Ó`ˆØˆ?Ø�M‰M× Ñ  Õ%ð r   c                 óÎ  — |j                  dd¬«      d   }t        j                  |d¬«       t        |dz   |«      5 }t        j
                  €t        j                  | |«       n t        j
                  j                  | |«       d d d «       t        j                  j                  |«      rt        j                  |«       t        j                  |dz   |«       y # 1 sw Y   ŒWxY w)Nú/é   )Úmaxsplitr   T)Úexist_okz.tmp)ÚrsplitÚosÚmakedirsÚopenr   ÚCUSTOM_SERIALIZERÚpickleÚdumpÚpathÚisfileÚremoveÚrename)r   r,   Ú	file_modeÚdirsÚfiles        r   rC   z FileHandlerBackend.dump_handlersd   s²   € à�‰˜s¨QˆÓ/°Ñ2ˆÜ
�‰�D 4Õ(ä�(˜VÑ# YÓ/ð 	A°4Ü×*Ñ*Ð2Ü—‘˜H dÕ+ä×+Ñ+×0Ñ0°¸4Ô@÷		Aô �7‰7�>‰>˜(Ô#Ü�I‰I�hÔä
�	‰	�(˜VÑ# XÕ.÷	Að 	Aús   ½ACÃC$c                 ó„  — t         j                  j                  | «      r•t         j                  j                  | «      dkD  rst	        | d«      5 }t
        j                  €t        j                  |«      }nt
        j                  j                  |«      }d d d «       |rt        j                  | «       S y # 1 sw Y   Œ#xY w)Nr   Úrb)
rN   rT   rU   ÚgetsizerP   r   rQ   rR   ÚloadrV   )r,   r-   rZ   r   s       r   rE   z'FileHandlerBackend.return_load_handlerst   s”   € ä�7‰7�>‰>˜(Ô#¬¯©¯©¸Ó(AÀAÒ(EÜ�h Ó%ð F¨Ü×.Ñ.Ð6Ü%Ÿ{™{¨4Ó0‘Hä(×:Ñ:×?Ñ?ÀÓE�H÷	Fñ &Ü—	‘	˜(Ô#àˆOØ÷Fð Fús   ÁAB6Â6B?)Nz./.handler-saves/handlers.saveéx   )NT)Úwb)T)r   r   r   r    r   r   r   r   r:   r6   r.   ÚstaticmethodrC   rE   Ú__classcell__©r8   s   @r   r0   r0   8   sT   ø„ ñõ@ò ò òò
#ò9ó&ð ò/ó ð/ð òó ôr   r0   c                   ó<   ‡ — e Zd ZdZdˆ fd„	Zd„ Zd„ Zd„ Zd„ Zˆ xZ	S )ÚRedisHandlerBackendr$   c                 ó‚   •— t         t        | �  |«       t        st	        d«      ‚|| _        t        ||||«      | _        y )Nz:Redis is not installed. Install it via 'pip install redis')r2   re   r   Úredis_installedÚ	ExceptionÚprefixr   Úredis)r   r   ÚhostÚportÚdbri   Úpasswordr8   s          €r   r   zRedisHandlerBackend.__init__ˆ   s;   ø€ ÜÔ! 4Ñ1°(Ô;ÝÜÐXÓYÐYØˆŒÜ˜4  r¨8Ó4ˆ�
r   c                 óN   — dj                  | j                  t        |«      f«      S )Nú:)Újoinri   Ústr)r   Úhandle_group_ids     r   Ú_keyzRedisHandlerBackend._key�   s   € Ø�x‰x˜Ÿ™¤c¨/Ó&:Ð;Ó<Ð<r   c                 ó(  — g }| j                   j                  | j                  |«      «      }|rt        j                  |«      }|j                  |«       | j                   j                  | j                  |«      t        j                  |«      «       y r
   )rj   Úgetrt   rR   Úloadsr&   ÚsetÚdumps)r   r   r   r   Úvalues        r   r   z$RedisHandlerBackend.register_handler’   se   € ØˆØ—
‘
—‘˜tŸy™yÐ)9Ó:Ó;ˆÙÜ—|‘| EÓ*ˆHØ�‰˜Ô Ø�
‰
�‰�t—y‘yÐ!1Ó2´F·L±LÀÓ4JÕKr   c                 óX   — | j                   j                  | j                  |«      «       y r
   )rj   Údeletert   r   s     r   r   z"RedisHandlerBackend.clear_handlersš   s   € Ø�
‰
×Ñ˜$Ÿ)™)Ð$4Ó5Õ6r   c                 ó®   — d }| j                   j                  | j                  |«      «      }|r&t        j                  |«      }| j                  |«       |S r
   )rj   rv   rt   rR   rw   r   )r   r   r   rz   s       r   r   z RedisHandlerBackend.get_handlers�   sH   € ØˆØ—
‘
—‘˜tŸy™yÐ)9Ó:Ó;ˆÙÜ—|‘| EÓ*ˆHØ×ÑÐ 0Ô1Øˆr   )NÚ	localhostië  r   ÚtelebotN)
r   r   r   r    r   rt   r   r   r   rb   rc   s   @r   re   re   „   s"   ø„ ñõ5ò=òLò7ör   re   c                   ó2   — e Zd ZU dZdZeed<   d„ Zd„ Zd„ Z	y)ÚBaseMiddlewarea-  
    Base class for middleware.
    Your middlewares should be inherited from this class.

    Set update_sensitive=True if you want to get different updates on
    different functions. For example, if you want to handle pre_process for
    message update, then you will have to create pre_process_message function, and
    so on. Same applies to post_process.

    .. note::
        If you want to use middleware, you have to set use_class_middlewares=True in your
        TeleBot instance.

    .. code-block:: python3
        :caption: Example of class-based middlewares.

        class MyMiddleware(BaseMiddleware):
            def __init__(self):
                self.update_sensitive = True
                self.update_types = ['message', 'edited_message']
            
            def pre_process_message(self, message, data):
                # only message update here
                pass

            def post_process_message(self, message, data, exception):
                pass # only message update here for post_process

            def pre_process_edited_message(self, message, data):
                # only edited_message update here
                pass

            def post_process_edited_message(self, message, data, exception):
                pass # only edited_message update here for post_process
    FÚupdate_sensitivec                  ó   — y r
   r!   rA   s    r   r   zBaseMiddleware.__init__Í   ó   € Ør   c                 ó   — t         ‚r
   r   )r   ÚmessageÚdatas      r   Úpre_processzBaseMiddleware.pre_processÐ   ó   € Ü!Ð!r   c                 ó   — t         ‚r
   r   )r   r†   r‡   Ú	exceptions       r   Úpost_processzBaseMiddleware.post_processÓ   r‰   r   N)
r   r   r   r    r‚   ÚboolÚ__annotations__r   rˆ   rŒ   r!   r   r   r�   r�   ¦   s$   … ñ"ðH #Ð�dÓ"òò"ó"r   r�   c                   ó   — e Zd ZdZdd„Zy)ÚSkipHandlerz½
    Class for skipping handlers.
    Just return instance of this class 
    in middleware to skip handler.
    Update will go to post_process,
    but will skip execution of handler.
    Nc                  ó   — y r
   r!   rA   s    r   r   zSkipHandler.__init__ß   r„   r   ©ÚreturnN©r   r   r   r    r   r!   r   r   r�   r�   ×   ó   „ ñôr   r�   c                   ó   — e Zd ZdZdd„Zy)ÚCancelUpdatez¿
    Class for canceling updates.
    Just return instance of this class 
    in middleware to skip update.
    Update will skip handler and execution
    of post_process in middlewares.
    Nc                  ó   — y r
   r!   rA   s    r   r   zCancelUpdate.__init__ë   r„   r   r’   r”   r!   r   r   r—   r—   ã   r•   r   r—   c                   ó   — e Zd ZdZdd„Zy)ÚContinueHandlinga   
    Class for continue updates in handlers.
    Just return instance of this class 
    in handlers to continue process.
    
    .. code-block:: python3
        :caption: Example of using ContinueHandling

        @bot.message_handler(commands=['start'])
        def start(message):
            bot.send_message(message.chat.id, 'Hello World!')
            return ContinueHandling()
        
        @bot.message_handler(commands=['start'])
        def start2(message):
            bot.send_message(message.chat.id, 'Hello World2!')
    
    Nc                  ó   — y r
   r!   rA   s    r   r   zContinueHandling.__init__  r„   r   r’   r”   r!   r   r   rš   rš   ï   s   „ ñô$r   rš   )rN   rR   r4   r   r   rj   r   rg   Útelebot.statesr   r   Úobjectr   r#   r0   re   r�   r�   r—   rš   r!   r   r   ú<module>rž      s�   ðÛ 	Û Û å ðÝØ€O÷
 .ô$�Vô $ô*$˜>ô $ô(I˜ô IôX˜.ô ÷D."ñ ."÷b	ñ 	÷	ñ 	÷ò øðMØ‚Oús   ”A9 Á9A?