
    ڈig+                        U d dl mZ d dlmZ d dlmZmZmZ ddlm	Z	m
Z
 ddlmZ ddlmZ erd dlmZ  ed	d
h      Zded<    G d d      Zy)    )annotations)	Generator)TYPE_CHECKINGAnyFinal   )REJECTED	UNHANDLED)EventObserver)TelegramEventObserver)TelegramObjectupdateerrorzFinal[frozenset[str]]INTERNAL_UPDATE_TYPESc                      e Zd ZdZddddZddZddZdddZddZ	 	 	 	 	 	 	 	 	 	 dd	Z	e
dd
       Ze
dd       Ze
dd       Zej                  dd       ZddZddZddZddZy)RouteraZ  
    Router can route update, and it nested update types like messages, callback query,
    polls and all other event types.

    Event handlers can be registered in observer by two ways:

    - By observer method - :obj:`router.<event_type>.register(handler, <filters, ...>)`
    - By decorator - :obj:`@router.<event_type>(<filters, ...>)`
    N)namec          
        |xs t        t        |             | _        d| _        g | _        t        | d      | _        t        | d      | _        t        | d      | _        t        | d      | _	        t        | d      | _
        t        | d      | _        t        | d	      | _        t        | d
      | _        t        | d      | _        t        | d      | _        t        | d      | _        t        | d      | _        t        | d      | _        t        | d      | _        t        | d      | _        t        | d      | _        t        | d      | _        t        | d      | _        t        | d      | _        t        | d      | _        t        | d      | _        t        | d      | _        t        | d      | _        t        | d      | _        t        | d      x| _        | _        tA               | _!        tA               | _"        i d| j                  d| j                  d| j                  d| j                  d| j                  d| j                  d	| j                  d
| j                  d| j                  d| j                  d| j                   d| j"                  d| j$                  d| j&                  d| j(                  d| j*                  d| j,                  | j.                  | j0                  | j2                  | j4                  | j6                  | j8                  | j:                  | j<                  d| _#        y)zP
        :param name: Optional router name, can be useful for debugging
        Nmessage)router
event_nameedited_messagechannel_postedited_channel_postinline_querychosen_inline_resultcallback_queryshipping_querypre_checkout_querypollpoll_answermy_chat_memberchat_memberchat_join_requestmessage_reactionmessage_reaction_count
chat_boostremoved_chat_boostdeleted_business_messagesbusiness_connectionedited_business_messagebusiness_messagepurchased_paid_mediamanaged_botr   )r(   r)   r*   r+   r,   r-   r.   r   )$hexidr   _parent_routersub_routersr   r   r   r   r   r   r   r   r   r   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   errorsr   r   startupshutdown	observers)selfr   s     [/var/www/html/bot/test_files/venv/lib/python3.12/site-packages/aiogram/dispatcher/router.py__init__zRouter.__init__   sr   
 )C4M	-1)+ -DYO34L\]1.Y#8,$
  2.Y$9-%
! 44L\]34L\]"7+#
 *&I	0W34L\]0W!6dOb!c 5TN` a&;/'
# 0tU"7+#
 *?2*
& $9,$
  (=0(
$ !6TN` a$9-%
! 1W#8QX#YYdj$%<
t||<
d11<
 D--<
 "4#;#;	<

 D--<
 #D$=$=<
 d11<
 d11<
 !$"9"9<
 DII<
 4++<
 d11<
 4++<
  !7!7<
  5 5<
  %d&A&A!<
" $//#<
$ #'"9"9)-)G)G#'#;#;'+'C'C $ 5 5$($=$=++[[3<
    c                J    t        |       j                   d| j                  S )N )type__name__r   r7   s    r8   __str__zRouter.__str__{   s"    t*%%&a		}55r:   c                    d|  dS )N<> r?   s    r8   __repr__zRouter.__repr__~   s    4&{r:   c                   t               }|
t               }h |t        }| j                  D ]G  }|j                  j	                         D ](  \  }}|j
                  s||vs|j                  |       * I t        |      S )z
        Resolve registered event names

        Is useful for getting updates only for registered event types.

        :param skip_events: skip specified event names
        :return: sorted list of registered names
        )setr   
chain_tailr6   itemshandlersaddsorted)r7   skip_eventshandlers_in_user   update_nameobservers         r8   resolve_used_update_typesz Router.resolve_used_update_types   s     %(E%K<<&;<oo 	5F)/)9)9)?)?)A 5%X$$K)G#''45	5
 o&&r:   c                    K   |j                           j                  j                        d fd}rj                  |||       d {   S  ||fi | d {   S 7 7 w)N)event_routerc                L   K    j                   d| d| d {   S 7 w)N)rP   update_typeeventrD   )_propagate_event)telegram_eventdatarP   r7   rU   s     r8   _wrappedz(Router.propagate_event.<locals>._wrapped   s>     ... !'$ 	   s   $"$)rV   rY   )rX   r   rY   r   returnr   )r   r6   getwrap_outer_middleware)r7   rU   rV   kwargsrZ   rP   s   ``   @r8   propagate_eventzRouter.propagate_event   sl     4(>>%%k2	 !77TZ7[[[e.v... \.s$   AA.A*A.%A,&A.,A.c                p  K   t         }|rj |j                  |fi | d {   \  }}|st         S |j                  |        |j                  |fi | d {   }|t        u rt         S |t         ur|S | j
                  D ]*  } |j                  d||d| d {   }|t         us) |S  |S 7 7 Y7 w)N)rU   rV   rD   )r
   check_root_filtersr   triggerr	   r2   r_   )	r7   rP   rU   rV   r^   responseresultrY   r   s	            r8   rW   zRouter._propagate_event   s       "=!<!<U!Mf!MMLFD  MM$-X--e>v>>H8#  y(&& 	F3V33cSXc\bccHy(	
 # N
 ? ds:   B6B06B6B2AB6B4B6*B62B64B6c              #  <   K   | }|r| |j                   }|ry y wN)parent_routerr7   r   s     r8   
chain_headzRouter.chain_head   s#      $L))F s   c              #  b   K   |  | j                   D ]  }|j                  E d {     y 7 wrf   )r2   rH   rh   s     r8   rH   zRouter.chain_tail   s2     
&& 	)F((((	)(s   #/-/c                    | j                   S rf   )r1   r?   s    r8   rg   zRouter.parent_router   s    """r:   c                h   t        |t              s#dt        |      j                  }t	        |      | j
                  rd| j
                  }t        |      | |k(  rd}t        |      |}|!|| k(  rd}t        |      |j                  }|!|| _        |j                  j                  |        y)a  
        Internal property setter of parent router fot this router.
        Do not use this method in own code.
        All routers should be included via `include_router` method.

        Self- and circular- referencing are not allowed here

        :param router:
        (router should be instance of Router not zRouter is already attached to z'Self-referencing routers is not allowedNz-Circular referencing of Router is not allowed)

isinstancer   r=   r>   
ValueErrorr1   RuntimeErrorrg   r2   append)r7   r   msgparents       r8   rg   zRouter.parent_router   s     &&)<T&\=R=R<UVCS/!243F3F2IJCs##6>;Cs## & ~E"3''))F   %!!$'r:   c                R    |sd}t        |      |D ]  }| j                  |        y)zT
        Attach multiple routers.

        :param routers:
        :return:
        z$At least one router must be providedN)ro   include_router)r7   routersrr   r   s       r8   include_routerszRouter.include_routers   s3     8CS/! 	(F'	(r:   c                z    t        |t              s#dt        |      j                  }t	        |      | |_        |S )zQ
        Attach another router.

        :param router:
        :return:
        rm   )rn   r   r=   r>   ro   rg   )r7   r   rr   s      r8   ru   zRouter.include_router  s<     &&)<T&\=R=R<UVCS/!#r:   c                   K   |j                  |         | j                  j                  |i | d{    | j                  D ]  } |j                  |i | d{     y7 07 	w)zr
        Recursively call startup callbacks

        :param args:
        :param kwargs:
        :return:
        r   N)r   r4   rb   r2   emit_startupr7   argsr^   r   s       r8   r{   zRouter.emit_startup  sn      	T""dll""D3F333&& 	7F%&%%t6v666	7 	46!   2A)A%(A)A'A)'A)c                   K   |j                  |         | j                  j                  |i | d{    | j                  D ]  } |j                  |i | d{     y7 07 	w)z
        Recursively call shutdown callbacks to graceful shutdown

        :param args:
        :param kwargs:
        :return:
        rz   N)r   r5   rb   r2   emit_shutdownr|   s       r8   r   zRouter.emit_shutdown  sn      	T"#dmm##T4V444&& 	8F&&&&7777	8 	57r~   )r   z
str | Noner[   None)r[   strrf   )rM   zset[str] | Noner[   z	list[str])rU   r   rV   r   r^   r   r[   r   )
rP   zTelegramEventObserver | NonerU   r   rV   r   r^   r   r[   r   )r[   zGenerator[Router, None, None])r[   zRouter | None)r   r   r[   r   )rv   r   r[   r   )r   r   r[   r   )r}   r   r^   r   r[   r   )r>   
__module____qualname____doc__r9   r@   rE   rQ   r_   rW   propertyri   rH   rg   setterrw   ru   r{   r   rD   r:   r8   r   r      s     .2 ^
@6'*/ .  	
  
> * * ) )
 # # ( (>(78r:   r   N)
__future__r   collections.abcr   typingr   r   r   event.basesr	   r
   event.eventr   event.telegramr   aiogram.typesr   	frozensetr   __annotations__r   rD   r:   r8   <module>r      sB    " % , , , & 1,/8(G9L/M , MX8 X8r:   