
    dh)                        U d dl mZ d dlmZmZmZmZmZmZm	Z	 ddl
mZ ddlmZmZ ddlmZ ddlmZ  ed	d
h      Zded<    G d d      Zy)    )annotations)AnyDictFinal	GeneratorListOptionalSet   )TelegramObject   )REJECTED	UNHANDLED)EventObserver)TelegramEventObserver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          	     l   |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      x| _        | _        t?               | _         t?               | _!        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:                  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_mediar   )r,   r-   r.   r/   r0   r1   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/   r0   r1   errorsr   r   startupshutdown	observers)selfr   s     S/var/www/netwell/bot/venv/lib/python3.12/site-packages/aiogram/dispatcher/router.py__init__zRouter.__init__   sZ   
 )C4M	04)+ -DYO34L\]1.Y#8$9$
  2.Y$9$:%
! 44L\]34L\]"7$8#
 *&I	0W34L\]0W!6dOb!c 5TN` a&;$<'
# 0tU"7$8#
 *?$?*
& $9$9$
  (=$=(
$ !6TN` a$9$:%
! $9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$($=$=[[1<
    c                J    t        |       j                   d| j                  S )N )type__name__r   r:   s    r;   __str__zRouter.__str__m   s"    t*%%&a		}55r=   c                    d|  dS )N<> rB   s    r;   __repr__zRouter.__repr__p   s    4&{r=   c                   t               }|
t               }h |t        }| j                  D ]G  }|j                  j	                         D ](  \  }}|j
                  s||vs|j                  |       * I t        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: set of registered names
        )	setr   
chain_tailr9   itemshandlersaddlistsorted)r:   skip_eventshandlers_in_user   update_nameobservers         r;   resolve_used_update_typesz Router.resolve_used_update_typess   s     %(E%K<<&;<oo 	5F)/)9)9)?)?)A 5%X$$K)G#''45	5
 F?+,,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)rT   update_typeeventrG   )_propagate_event)telegram_eventdatarT   r:   rY   s     r;   _wrappedz(Router.propagate_event.<locals>._wrapped   s:     ... !{.TX   s   $"$)rZ   r]   )r\   r   r]   r   returnr   )r   r9   getwrap_outer_middleware)r:   rY   rZ   kwargsr^   rT   s   ``   @r;   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)rY   rZ   rG   )r   check_root_filtersr   triggerr   r5   rc   )	r:   rT   rY   rZ   rb   responseresultr]   r   s	            r;   r[   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r:   r   s     r;   
chain_headzRouter.chain_head   s#     #'L))F s   c              #  b   K   |  | j                   D ]  }|j                  E d {     y 7 wrj   )r5   rK   rl   s     r;   rK   zRouter.chain_tail   s2     
&& 	)F((((	)(s   #/-/c                    | j                   S rj   )r4   rB   s    r;   rk   zRouter.parent_router   s    """r=   c                X   t        |t              s!t        dt        |      j                        | j
                  rt        d| j
                        | |k(  rt        d      |}||| k(  rt        d      |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   
ValueErrorr@   rA   r4   RuntimeErrorrk   r5   append)r:   r   parents      r;   rk   zRouter.parent_router   s     &&)GVH]H]G`abb!?@S@S?VWXX6>HII#) ~"#RSS))F	   %!!$'r=   c                N    |st        d      |D ]  }| j                  |        y)zT
        Attach multiple routers.

        :param routers:
        :return:
        z$At least one router must be providedN)rs   include_router)r:   routersr   s      r;   include_routerszRouter.include_routers   s0     CDD 	(F'	(r=   c                    t        |t              s+t        dt        |      j                  j
                         | |_        |S )zQ
        Attach another router.

        :param router:
        :return:
        rq   )rr   r   rs   r@   	__class__rA   rk   rl   s     r;   rx   zRouter.include_router   sE     &&):4<;Q;Q;Z;Z:[\   $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   r7   rf   r5   emit_startupr:   argsrb   r   s       r;   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:
        r~   N)r   r8   rf   r5   emit_shutdownr   s       r;   r   zRouter.emit_shutdown  sn      	T"#dmm##T4V444&& 	8F&&&&7777	8 	57r   )r   zOptional[str]r_   None)r_   strrj   )rQ   zOptional[Set[str]]r_   z	List[str])rY   r   rZ   r   rb   r   r_   r   )
rT   zOptional[TelegramEventObserver]rY   r   rZ   r   rb   r   r_   r   )r_   zGenerator[Router, None, None])r_   zOptional[Router])r   r   r_   r   )ry   r   r_   r   )r   r   r_   r   )r   r   rb   r   r_   r   )rA   
__module____qualname____doc__r<   rC   rH   rU   rc   r[   propertyrm   rK   rk   setterrz   rx   r   r   rG   r=   r;   r   r      s     15 S
j6-*/1  	
  
> * * ) )
 # # ( (6
(78r=   r   N)
__future__r   typingr   r   r   r   r   r	   r
   typesr   event.basesr   r   event.eventr   event.telegramr   	frozensetr   __annotations__r   rG   r=   r;   <module>r      s?    " C C C " , & 1/8(G9L/M , MF8 F8r=   