Ë
    çObj f  ã                  ó¢  — d dl mZ d dlZd dlZd dlZd dlZd dlZd dlmZmZm	Z	m
Z
 d dl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 d d	lmZ d d
lmZmZ d dlmZmZ d dlm Z  d dl!m"Z"m#Z# d dl$m%Z%m&Z& d dl'm(Z(m)Z) d dl*m+Z+ d dl,m-Z-m.Z. ddl/m0Z0m1Z1 ddl2m3Z3 ddl4m5Z5 ddl6m7Z7 ddl8m9Z9 erd dl:m;Z; d dl<m=Z=  e.dddd¬«      Z> G d„ d e9«      Z?y)!é    )ÚannotationsN)ÚCancelledErrorÚEventÚFutureÚLock)ÚAsyncGeneratorÚ	Awaitable)Úsuppress)ÚTYPE_CHECKINGÚAny)Úloggers)ÚTelegramAPIError)ÚFSMContextMiddleware)ÚBaseEventIsolationÚBaseStorage)ÚDisabledEventIsolationÚMemoryStorage)ÚFSMStrategy)Ú
GetUpdatesÚTelegramMethod)ÚUpdateÚUser)ÚUNSETÚ
UNSET_TYPE)ÚUpdateTypeLookupError)ÚBackoffÚBackoffConfigé   )Ú	UNHANDLEDÚSkipHandler)ÚTelegramEventObserver)ÚErrorsMiddleware)ÚUserContextMiddleware)ÚRouter)ÚBot)ÚTelegramTypeg      ð?g      @gÍÌÌÌÌÌô?gš™™™™™¹?)Ú	min_delayÚ	max_delayÚfactorÚjitterc                  ó<  ‡ — e Zd ZdZdej
                  ddddœ	 	 	 	 	 	 	 	 	 	 	 	 	 dˆ fd„Zd d„Zd!d„Zd"d„Z	d#d$d	„Z
ed%d
„«       Zed&d„«       Zej                  d'd„«       Zd(d„Zd)d„Zededf	 	 	 	 	 	 	 	 	 d*d„«       Zd+d„Zed,d„«       Z	 d-	 	 	 	 	 	 	 	 	 d.d„Z	 	 	 	 	 	 d/d„Zddeddf	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d0d„Zd(d„Z	 d1	 	 	 	 	 	 	 	 	 d2d„Zd3d„Zd4d„Zddeeddddœ	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d5d„Zddeeddddœ	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d5d„Zˆ xZ S )6Ú
Dispatcherz
    Root router
    NF)ÚstorageÚfsm_strategyÚevents_isolationÚdisable_fsmÚnamec               ó  •— t         ‰| �  |¬«       |r3t        |t        «      s#dt	        |«      j
                  › �}t        |«      ‚t        | d¬«      x| _        | j                  d<   | j                  j                  | j                  «       | j                  j                  t        | «      «       | j                  j                  t        «       «       t        |xs
 t!        «       ||xs
 t#        «       ¬«      | _        |s%| j                  j                  | j$                  «       | j&                  j                  | j$                  j(                  «       || _        t-        «       | _        d| _        d| _        t5        «       | _        y)a�  
        Root router

        :param storage: Storage for FSM
        :param fsm_strategy: FSM strategy
        :param events_isolation: Events isolation
        :param disable_fsm: Disable FSM, note that if you disable FSM
            then you should not use storage and events isolation
        :param kwargs: Other arguments, will be passed as keyword arguments to handlers
        )r1   z4FSM storage should be instance of 'BaseStorage' not Úupdate)ÚrouterÚ
event_name)r-   Ústrategyr/   N)ÚsuperÚ__init__Ú
isinstancer   ÚtypeÚ__name__Ú	TypeErrorr!   r3   Ú	observersÚregisterÚ_listen_updateÚouter_middlewarer"   r#   r   r   r   ÚfsmÚshutdownÚcloseÚworkflow_datar   Ú_running_lockÚ_stop_signalÚ_stopped_signalÚsetÚ_handle_update_tasks)	Úselfr-   r.   r/   r0   r1   ÚkwargsÚmsgÚ	__class__s	           €úP/var/www/html/venv/lib/python3.12/site-packages/aiogram/dispatcher/dispatcher.pyr8   zDispatcher.__init__+   s=  ø€ ô( 	‰Ñ˜dÐÔ#áœ: g¬{Ô;ØHÌÈgË×I_ÑI_ÐH`ÐaˆCÜ˜C“.Ð ô
 2GØØô2
ð 	
ˆŒ�d—n‘n XÑ.ð 	�‰×Ñ˜T×0Ñ0Ô1ð 	�‰×$Ñ$Ô%5°dÓ%;Ô<ð 	�‰×$Ñ$Ô%:Ó%<Ô=ô (ØÒ.œ}›Ø!Ø-ÒIÔ1GÓ1Iô
ˆŒñ
 ð �K‰K×(Ñ(¨¯©Ô2Ø�‰×Ñ˜tŸx™xŸ~™~Ô.à-3ˆÔÜ!›VˆÔØ*.ˆÔØ-1ˆÔÜ<?»EˆÕ!ó    c                ó    — | j                   |   S ©N©rD   )rJ   Úitems     rN   Ú__getitem__zDispatcher.__getitem__i   s   € Ø×!Ñ! $Ñ'Ð'rO   c                ó"   — || j                   |<   y rQ   rR   )rJ   ÚkeyÚvalues      rN   Ú__setitem__zDispatcher.__setitem__l   s   € Ø"'ˆ×Ñ˜3ÒrO   c                ó   — | j                   |= y rQ   rR   )rJ   rV   s     rN   Ú__delitem__zDispatcher.__delitem__o   s   € Ø×Ñ˜sÑ#rO   c               ó:   — | j                   j                  ||«      S rQ   )rD   Úget)rJ   rV   Údefaults      rN   r\   zDispatcher.getr   s   € Ø×!Ñ!×%Ñ% c¨7Ó3Ð3rO   c                ó.   — | j                   j                  S rQ   )rA   r-   ©rJ   s    rN   r-   zDispatcher.storageu   s   € à�x‰x×ÑÐrO   c                 ó   — y)z}
        Dispatcher has no parent router and can't be included to any other routers or dispatchers

        :return:
        N© r_   s    rN   Úparent_routerzDispatcher.parent_routery   s   € ð rO   c                ó   — d}t        |«      ‚)z�
        Dispatcher is root Router then configuring parent router is not allowed

        :param value:
        :return:
        z1Dispatcher can not be attached to another Router.)ÚRuntimeError)rJ   rW   rL   s      rN   rb   zDispatcher.parent_router‚   s   € ð BˆÜ˜3ÓÐrO   c           	   ‹  óÈ  K  — t        j                  «       }d}|j                  «       }|j                  |k7  r't	        j
                  |j                  «       d|i¬«      }	 | j                  j                  | j                  j                  |i | j                  ¥|¥d|i¥«      ƒ d{  –—† }|t        u}||j                  «       }||z
  dz  }	t        j                  j                  d|j                  |rdnd|	|j                   «       S 7 Œa# |j                  «       }||z
  dz  }	t        j                  j                  d|j                  |rdnd|	|j                   «       w xY w­w)	z£
        Main entry point for incoming updates
        Response of this method can be used as Webhook response

        :param bot:
        :param update:
        FÚbot©ÚcontextNiè  z/Update id=%s is %s. Duration %d ms by bot id=%dÚhandledznot handled)ÚasyncioÚget_running_loopÚtimerf   r   Úmodel_validateÚ
model_dumpr3   Úwrap_outer_middlewareÚtriggerrD   r   r   ÚeventÚinfoÚ	update_idÚid)
rJ   rf   r3   rK   Úloopri   Ú
start_timeÚresponseÚfinish_timeÚdurations
             rN   Úfeed_updatezDispatcher.feed_update�   sR  è ø€ ô ×'Ñ'Ó)ˆØˆØ—Y‘Y“[ˆ
à�:‰:˜Òô ×*Ñ*¨6×+<Ñ+<Ó+>ÈÐPSÈÔUˆFð	Ø!Ÿ[™[×>Ñ>Ø—‘×#Ñ#ØðØ×(Ñ(ðàðð ˜3ñó÷ ˆHð ¤iÐ/ˆGØàŸ)™)›+ˆKØ# jÑ0°DÑ8ˆHÜ�M‰M×ÑØAØ× Ñ Ù$‘	¨-ØØ—‘õðùð Ÿ)™)›+ˆKØ# jÑ0°DÑ8ˆHÜ�M‰M×ÑØAØ× Ñ Ù$‘	¨-ØØ—‘õüs3   ‚AE"Á AD
 Â&DÂ'D
 Â4AE"ÄD
 Ä
AEÅE"c              ‹  óz   K  — t        j                  |d|i¬«      } | j                  d||dœ|¤Žƒ d{  –—† S 7 Œ­w)z¡
        Main entry point for incoming updates with automatic Dict->Update serializer

        :param bot:
        :param update:
        :param kwargs:
        rf   rg   ©rf   r3   Nra   )r   rm   Ú_feed_webhook_update)rJ   rf   r3   rK   Úparsed_updates        rN   Úfeed_raw_updatezDispatcher.feed_raw_updateº   sB   è ø€ ô ×-Ñ-¨f¸uÀc¸lÔKˆØ.�T×.Ñ.ÐW°3¸}ÑWÐPVÑW×WÐWÐWús   ‚2;´9µ;é   c               ó  K  — t        |¬«      }t        ||¬«      }i }|j                  j                  r%t	        |j                  j                  |z   «      |d<   d}	 	  ||fi |¤Žƒ d{  –—† }	|rGt        j                  j!                  d	|j                  |j                  «       |j#                  «        d}|	D ]  }|­–— |j$                  d
z   |_        Œ Œ|7 Œn# t
        $ rš}
d}t        j                  j                  dt        |
«      j                  |
«       t        j                  j                  d|j                  |j                  |j                  «       |j                  «       ƒ d{  –—†7   Y d}
~
�Œd}
~
ww xY w­w)z¨
        Endless updates reader with correctly handling any server-side or connection errors.

        So you may not worry that the polling will stop working.
        )Úconfig)ÚtimeoutÚallowed_updatesÚrequest_timeoutFTNz Failed to fetch updates - %s: %szASleep for %f seconds and try again... (tryings = %d, bot id = %d)z2Connection established (tryings = %d, bot id = %d)r   )r   r   Úsessionrƒ   ÚintÚ	Exceptionr   Ú
dispatcherÚerrorr:   r;   ÚwarningÚ
next_delayÚcounterrt   Úasleeprr   Úresetrs   Úoffset)Úclsrf   Úpolling_timeoutÚbackoff_configr„   ÚbackoffÚget_updatesrK   ÚfailedÚupdatesÚer3   s               rN   Ú_listen_updateszDispatcher._listen_updatesÅ   sY  è ø€ ô  Ô0ˆÜ ¨È/ÔZˆØˆØ�;‰;×Òô ),¨C¯K©K×,?Ñ,?À/Ñ,QÓ(RˆFÐ$Ñ%ØˆØðÙ # KÑ :°6Ñ :×:�ñ$ Ü×"Ñ"×'Ñ'ØHØ—O‘OØ—F‘Fôð
 —‘”Ø�à!ò :�Ø“ð
 &,×%5Ñ%5¸Ñ%9�Õ"ð:ð; à:ùÜò Ø�ô ×"Ñ"×(Ñ(Ð)KÌTÐRSËW×M]ÑM]Ð_`Ôaä×"Ñ"×*Ñ*ØWØ×&Ñ&Ø—O‘OØ—F‘Fô	ð —n‘nÓ&×&Ñ&ÝûðüsP   ‚AF ÁC Á)CÁ*C Á.A*F ÃC Ã	E=Ã#B	E8Å,E/Å-E8Å2F Å8E=Å=F c              ‹  ó4  K  — 	 |j                   }|j                  }|j                  |¬«        | j                  d	||dœ|¤Žƒ d{  –—† S # t        $ r?}t        j                  d|j                  d¬«      › �t        d¬«       t        «       |‚d}~ww xY w7 ŒO­w)
a  
        Main updates listener

        Workflow:
        - Detect content type and propagate to observers in current router
        - If no one filter is pass - propagate update to child routers as Update

        :param update:
        :param kwargs:
        :return:
        z�Detected unknown update type.
Seems like Telegram Bot API was updated and you have installed not latest version of aiogram framework
Update: T)Úexclude_unseté   ©Ú
stacklevelN)Úevent_update)Úupdate_typerq   ra   )
Ú
event_typerq   r   ÚwarningsÚwarnÚmodel_dump_jsonÚRuntimeWarningr    r3   Úpropagate_event)rJ   r3   rK   r    rq   r˜   s         rN   r?   zDispatcher._listen_updateÿ   s©   è ø€ ð	'Ø ×+Ñ+ˆKØ—L‘LˆEð 	�‰ 6ˆÔ*à)�T×)Ñ)ÐY°kÈÑYÐRXÑY×YÐYøô %ò 		'Ü�M‰Mðð $×3Ñ3À$Ð3ÓGÐHðJô Øõô “- QÐ&ûð		'úð Zús3   ‚B„A œ*BÁBÁBÁ	BÁ:BÂBÂBc              ƒ  óÈ   K  — 	  ||«      ƒ d{  –—†  y7 Œ# t         $ r?}t        j                  j                  d|j                  j
                  |«       Y d}~yd}~ww xY w­w)zk
        Simulate answer into WebHook

        :param bot:
        :param result:
        :return:
        NzFailed to make answer: %s: %s)r   r   rq   rŠ   rM   r;   )r‘   rf   Úresultr˜   s       rN   Úsilent_call_requestzDispatcher.silent_call_request  sQ   è ø€ ð	ZÙ�f“+×ÒùÜò 	Zô
 �M‰M×ÑÐ ?ÀÇÁ×AUÑAUÐWX×YÑYûð	Züs6   ‚A"„ �� ”A"• —	A 5AÁA"ÁAÁA"Tc              ‹  óx  K  — 	  | j                   ||fi |¤Žƒ d{  –—† }|r+t        |t        «      r| j                  ||¬«      ƒ d{  –—†  |t        uS 7 Œ97 Œ# t
        $ rU}t        j                  j                  d|j                  |j                  |j                  j                  |«       Y d}~yd}~ww xY w­w)aL  
        Propagate update to event listeners

        :param bot: instance of Bot
        :param update: instance of Update
        :param call_answer: need to execute response as Telegram method (like answer into webhook)
        :param kwargs: contextual data for middlewares, filters and handlers
        :return: status
        N©rf   r¨   ú>Cause exception while process update id=%d by bot id=%d
%s: %sT)rz   r9   r   r©   r   rˆ   r   rq   Ú	exceptionrs   rt   rM   r;   )rJ   rf   r3   Úcall_answerrK   rw   r˜   s          rN   Ú_process_updatezDispatcher._process_update/  s¬   è ø€ ð 	-Ø-˜T×-Ñ-¨c°6ÑD¸VÑD×DˆHÙœz¨(´NÔCØ×.Ñ.°3¸xÐ.ÓH×HÐHð ¤9Ð,Ð,ð EøàHùäò 	Ü�M‰M×#Ñ#ØQØ× Ñ Ø—‘Ø—‘×$Ñ$Øôô ûð	üsQ   ‚B:„A ›Aœ,A ÁAÁ	A ÁB:ÁA ÁA Á	B7Á"AB2Â-B:Â2B7Â7B:c              ƒ  ón   K  — 	 |ƒ d{  –—† |j                  «        S 7 Œ# |j                  «        w xY w­w)a  
        Process update with semaphore to limit concurrent tasks

        :param handle_update: Coroutine that processes the update
        :param semaphore: Semaphore to limit concurrent tasks
        :return: bool indicating the result of the update processing
        N)Úrelease)rJ   Úhandle_updateÚ	semaphores      rN   Ú_process_with_semaphorez"Dispatcher._process_with_semaphoreQ  s/   è ø€ ð	 Ø&×&à×ÑÕð 'ùà×ÑÕüs    ‚5„  ‰Š  �5ž   2²5c              ‹  óÀ  K  — |j                  «       ƒ d{  –—† }t        j                  j                  d|j                  |j
                  |j                  «       d}	|�|rt        j                  |«      }		 | j                  ||||¬«      2 3 d{  –—† }
 | j                  d||
dœ|¤Ž}|r–|	r>|	j                  «       ƒ d{  –—†  t        j                  | j                  ||	«      «      }nt        j                  |«      }| j                  j                  |«       |j!                  | j                  j"                  «       Œ¶|ƒ d{  –—†  ŒÁ7 �Œ77 Œ¿7 Œ�7 Œ6 	 t        j                  j                  d|j                  |j
                  |j                  «       y# t        j                  j                  d|j                  |j
                  |j                  «       w xY w­w)a  
        Internal polling process

        :param bot:
        :param polling_timeout: Long-polling wait time
        :param handle_as_tasks: Run task for each event and no wait result
        :param backoff_config: backoff-retry config
        :param allowed_updates: List of the update types you want your bot to receive
        :param tasks_concurrency_limit: Maximum number of concurrent updates to process
            (None = no limit), used only if handle_as_tasks is True
        :param kwargs:
        :return:
        Nz"Run polling for bot @%s id=%d - %r)r’   r“   r„   r|   z&Polling stopped for bot @%s id=%d - %rra   )Úmer   r‰   rr   Úusernamert   Ú	full_namerj   Ú	Semaphorer™   r¯   ÚacquireÚcreate_taskr´   rI   ÚaddÚadd_done_callbackÚdiscard)rJ   rf   r’   Úhandle_as_tasksr“   r„   Útasks_concurrency_limitrK   Úuserr³   r3   r²   Úhandle_update_tasks                rN   Ú_pollingzDispatcher._pollingb  s«  è ø€ ð. Ÿ6™6›8—^ˆÜ×Ñ×ÑØ0Ø�M‰MØ�F‰FØ�N‰Nô		
ð ˆ	Ø"Ð.±?Ü×)Ñ)Ð*AÓBˆIð	Ø $× 4Ñ 4ØØ /Ø-Ø /ð	 !5ó !÷ (ð (�fð !5 × 4Ñ 4Ð V¸ÀVÑ VÈvÑ V�Ù"Ù à'×/Ñ/Ó1×1Ð1Ü-4×-@Ñ-@Ø ×8Ñ8¸È	ÓRó.Ñ*ô .5×-@Ñ-@ÀÓ-OÐ*à×-Ñ-×1Ñ1Ð2DÔEØ&×8Ñ8¸×9RÑ9R×9ZÑ9ZÕ[à'×'Ñ'ðE $ùð(øð 2øð (øñ)!ô, ×Ñ×#Ñ#Ø8Ø—‘Ø—‘Ø—‘õ	øŒG×Ñ×#Ñ#Ø8Ø—‘Ø—‘Ø—‘õ	üsy   ‚G–E—AGÁ7F ÂEÂEÂEÂ-F ÃEÃBF ÅEÅF ÅGÅEÅF ÅF ÅF ÅAGÆAGÇGc              ‹  ó  K  — 	  | j                   ||fi |¤Žƒ d{  –—† S 7 Œ# t        $ rQ}t        j                  j	                  d|j
                  |j                  |j                  j                  |«       ‚ d}~ww xY w­w)zg
        The same with `Dispatcher.process_update()` but returns real response instead of bool
        Nr¬   )	rz   rˆ   r   rq   r­   rs   rt   rM   r;   )rJ   rf   r3   rK   r˜   s        rN   r}   zDispatcher._feed_webhook_update¤  st   è ø€ ð
	Ø)˜×)Ñ)¨#¨vÑ@¸Ñ@×@Ð@Ð@ùÜò 	Ü�M‰M×#Ñ#ØQØ× Ñ Ø—‘Ø—‘×$Ñ$Øôð ûð	üs1   ‚A?„" › œ" ŸA? " ¢	A<«AA7Á7A<Á<A?c              ‹  ó  ‡ ‡‡K  — t        |t        «      st        j                  |d‰i¬«      }t        j                  «       }t        j                  «       }|j                  «       Šdˆfd„}|j                  ||«      }t        j                   ‰ j                  d‰|dœ|¤Ž«      }	|	j                  ||¬«       dˆˆ fd„}
	 	 ‰ƒ d {  –—†  |	j                  «       r2|	j!                  «       }t        |t"        «      r6||j                  «        S |	j                  |«       |	j                  |
|¬«       |j                  «        y 7 Œ{# t        $ r# |	j                  |«       |	j                  «        ‚ w xY w# |j                  «        w xY w­w)	Nrf   rg   c                 óJ   •— ‰j                  «       s‰j                  d «       y y rQ   )ÚdoneÚ
set_result)Ú_Úwaiters    €rN   Úrelease_waiterz6Dispatcher.feed_webhook_update.<locals>.release_waiterÂ  s   ø€ Ø—;‘;”=Ø×!Ñ! $Õ'ð !rO   r|   c                óÌ   •— t        j                  dt        d¬«       | j                  «       }t	        |t
        «      r't        j                  ‰j                  ‰|¬«      «       y y )NzýDetected slow response into webhook.
Telegram is waiting for response only first 60 seconds and then re-send update.
For preventing this situation response into webhook returned immediately and handler is moved to background and still processing update.rœ   r�   r«   )	r¢   r£   r¥   r¨   r9   r   rj   Úensure_futurer©   )Útaskr¨   rf   rJ   s     €€rN   Úprocess_responsez8Dispatcher.feed_webhook_update.<locals>.process_responseÍ  sW   ø€ Ü�M‰MðRô Øõð —[‘[“]ˆFÜ˜&¤.Ô1Ü×%Ñ% d×&>Ñ&>À3ÈvÐ&>Ó&VÕWð 2rO   )rÉ   r   ÚreturnÚNonera   )rÎ   zFuture[Any]rÐ   rÑ   )r9   r   rm   ÚcontextvarsÚcopy_contextrj   rk   Úcreate_futureÚ
call_laterrÍ   r}   r½   r   Úremove_done_callbackÚcancelrÇ   r¨   r   )rJ   rf   r3   Ú_timeoutrK   Úctxru   rË   Útimeout_handleÚprocess_updatesrÏ   rw   rÊ   s   ``          @rN   Úfeed_webhook_updatezDispatcher.feed_webhook_update´  sk  úè ø€ ô ˜&¤&Ô)Ü×*Ñ*¨6¸EÀ3¸<ÔHˆFä×&Ñ&Ó(ˆÜ×'Ñ'Ó)ˆØ×#Ñ#Ó%ˆõ	(ð Ÿ™¨°>ÓBˆä'.×'<Ñ'<Ø%ˆD×%Ñ%ÐG¨#°fÑGÀÑGó(
ˆð 	×)Ñ)¨.À#Ð)ÔFö	Xð	$ðØ—�ð ×#Ñ#Ô%à /× 6Ñ 6Ó 8�Ü˜h¬Ô7Ø#ð ×!Ñ!Õ#ð	  ×4Ñ4°^ÔDØ×1Ñ1Ð2BÈCÐ1ÔPð ×!Ñ!Ô#àð' ùÜ!ò Ø×4Ñ4°^ÔDØ×&Ñ&Ô(Øðûð  ×!Ñ!Õ#üsN   …B<F
ÃE ÃEÃ	E Ã1E5 Ã>F
Ä$E5 Ä3F
ÅE Å,E2Å2E5 Å5FÆF
c              ƒ  ó  K  — | j                   j                  «       sd}t        |«      ‚| j                  r| j                  sy| j                  j                  «        | j                  j                  «       ƒ d{  –—†  y7 Œ­w)zd
        Execute this method if you want to stop polling programmatically

        :return:
        zPolling is not startedN)rE   Úlockedrd   rF   rG   rH   Úwait)rJ   rL   s     rN   Ústop_pollingzDispatcher.stop_pollingñ  sh   è ø€ ð ×!Ñ!×(Ñ(Ô*Ø*ˆCÜ˜sÓ#Ð#Ø× Ò ¨×(<Ò(<ØØ×Ñ×ÑÔØ×"Ñ"×'Ñ'Ó)×)Ò)ús   ‚A8BÁ:B Á;Bc                óÜ   — | j                   j                  «       sy t        j                  j	                  d|j
                  «       | j                  sy | j                  j                  «        y )NzReceived %s signal)rE   rÞ   r   r‰   r‹   r1   rF   rH   )rJ   Úsigs     rN   Ú_signal_stop_pollingzDispatcher._signal_stop_pollingÿ  sP   € Ø×!Ñ!×(Ñ(Ô*Øä×Ñ×"Ñ"Ð#7¸¿¹ÔBØ× Ò ØØ×Ñ×ÑÕrO   é
   ©r’   r¿   r“   r„   Úhandle_signalsÚclose_bot_sessionrÀ   c             �  óÒ  K  — |sd}
t        |
«      ‚d|	v rd}
t        |
«      ‚| j                  4 ƒd{  –—†  | j                  €t        «       | _        | j                  €t        «       | _        |t
        u r| j                  «       }| j                  j                  «        | j                  j                  «        |ržt        j                  «       }t        t        «      5  |j                  t        j                  | j                  t        j                  «       |j                  t        j                   | j                  t        j                   «       ddd«       | |dœ| j"                  ¥|	¥}d|v r|j%                  d«        | j&                  dd|d   i|¤Žƒ d{  –—†  t(        j*                  j-                  d«       	 |D �cg c].  }t        j.                   | j0                  d||||||dœ|¤Ž«      ‘Œ0 }}|j3                  t        j.                  | j                  j5                  «       «      «       t        j4                  |t        j6                  ¬	«      ƒ d{  –—† \  }}|D ]4  }|j9                  «        t        t:        «      5  |ƒ d{  –—†  ddd«       Œ6 t        j<                  |Ž ƒ d{  –—†  t(        j*                  j-                  d
«       	  | j>                  dd|d   i|¤Žƒ d{  –—†  |r"t        j<                  d„ |D «       Ž ƒ d{  –—†  	 | j                  jA                  «        ddd«      ƒd{  –—†  y7 �Œ# 1 sw Y   �ŒúxY w7 �Œ»c c}w 7 �Œ7 ŒÑ# 1 sw Y   �ŒxY w7 Œ¼7 Œ7 Œ^# |r#t        j<                  d„ |D «       Ž ƒ d{  –—†7   w w xY w# t(        j*                  j-                  d
«       	  | j>                  dd|d   i|¤Žƒ d{  –—†7   |rMt        j<                  d„ |D «       Ž ƒ d{  –—†7   n*# |r#t        j<                  d„ |D «       Ž ƒ d{  –—†7   w w xY w| j                  jA                  «        w xY w7 �Œ# 1 ƒd{  –—†7  sw Y   yxY w­w)a  
        Polling runner

        :param bots: Bot instances (one or more)
        :param polling_timeout: Long-polling wait time
        :param handle_as_tasks: Run task for each event and no wait result
        :param backoff_config: backoff-retry config
        :param allowed_updates: List of the update types you want your bot to receive
               By default, all used update types are enabled (resolved from handlers)
        :param handle_signals: handle signals (SIGINT/SIGTERM)
        :param close_bot_session: close bot sessions on shutdown
        :param tasks_concurrency_limit: Maximum number of concurrent updates to process
            (None = no limit), used only if handle_as_tasks is True
        :param kwargs: contextual data
        :return:
        z6At least one bot instance is required to start pollingrf   zbKeyword argument 'bot' is not acceptable, the bot instance should be passed as positional argumentN)r‰   ÚbotséÿÿÿÿzStart polling)rf   r¿   r’   r“   r„   rÀ   )Úreturn_whenzPolling stoppedc              3  óP   K  — | ]  }|j                   j                  «       –— Œ  y ­wrQ   )r†   rC   )Ú.0rf   s     rN   ú	<genexpr>z+Dispatcher.start_polling.<locals>.<genexpr>u  s   è ø€ Ò.SÀs¨s¯{©{×/@Ñ/@×/BÑ.Sùs   ‚$&ra   )!Ú
ValueErrorrE   rF   r   rG   r   Úresolve_used_update_typesÚclearrj   rk   r
   ÚNotImplementedErrorÚadd_signal_handlerÚsignalÚSIGTERMrã   ÚSIGINTrD   ÚpopÚemit_startupr   r‰   rr   r»   rÃ   Úappendrß   ÚFIRST_COMPLETEDr×   r   ÚgatherÚemit_shutdownrH   )rJ   r’   r¿   r“   r„   ræ   rç   rÀ   ré   rK   rL   ru   rD   rf   ÚtasksrÇ   ÚpendingrÎ   s                     rN   Ústart_pollingzDispatcher.start_polling  s  è ø€ ñ8 ØJˆCÜ˜S“/Ð!Ø�F‰?ðKð ô ˜S“/Ð!à×%Ñ%÷ H	+ñ H	+Ø× Ñ Ð(Ü$)£G�Ô!Ø×#Ñ#Ð+Ü',£w�Ô$à¤%Ñ'Ø"&×"@Ñ"@Ó"B�à×Ñ×#Ñ#Ô%Ø× Ñ ×&Ñ&Ô(áÜ×/Ñ/Ó1�ÜÔ1Ó2ñ ð ×+Ñ+ÜŸ™Ø×1Ñ1ÜŸ™ôð
 ×+Ñ+ÜŸ™Ø×1Ñ1ÜŸ™ô÷ð #Øñð ×$Ñ$ðð ð	ˆMð ˜Ñ%Ø×!Ñ! %Ô(à#�$×#Ñ#ÑB¨¨R©ÐB°MÑB×BÐBÜ×Ñ×#Ñ# OÔ4ð!+ð  $ö2ð ô ×'Ñ'Ø%˜Ÿ™ð Ø #Ø,;Ø,;Ø+9Ø,;Ø4Kñð ,ñõ
ð2�ð 2ð —‘œW×0Ñ0°×1BÑ1B×1GÑ1GÓ1IÓJÔKÜ&-§l¡l°5Äg×F]ÑF]Ô&^× ^‘��gà#ò #�Dà—K‘K”MÜ!¤.Ó1ñ #Ø"Ÿ
˜
÷#ð #ð#ô —n‘n dÐ+×+Ð+ô ×"Ñ"×'Ñ'Ð(9Ô:ðUØ,˜$×,Ñ,ÑK°°b±ÐK¸]ÑK×KÐKá(Ü%Ÿn™nÑ.SÈdÔ.SÐT×TÑTØ×$Ñ$×(Ñ(Ô*÷QH	+÷ H	+ñ H	+ù÷ñ úð. Cûò2ð !_ùð #ø÷#ñ #úð ,øð
 Løð Uùñ )Ü%Ÿn™nÑ.SÈdÔ.SÐT×TÒTð )ûô	 ×"Ñ"×'Ñ'Ð(9Ô:ðUØ,˜$×,Ñ,ÑK°°b±ÐK¸]ÑK×KÑKá(Ü%Ÿn™nÑ.SÈdÔ.SÐT×TÒTøñ )Ü%Ÿn™nÑ.SÈdÔ.SÐT×TÒTð )úà×$Ñ$×(Ñ(Õ*úðQH	+ù÷ H	+÷ H	+ñ H	+üs\  ‚1Q'³M´Q'·B(QÃA3M
ÅA
QÆMÆ#QÇN!Ç3MÇ8A&N!ÉMÉ+N!Ê
M$ÊM"
ÊM$ÊN!Ê4M1Ê5N!Ê9QËM7Ë3M3Ë4M7Ë8QÌM5ÌQÌ6Q'ÍQÍQ'Í
M	Í	QÍN!Í"M$Í$M.Í)	N!Í3M7Í5QÍ7NÎN
ÎNÎQÎ! QÏPÏO
ÏPÏ"QÐ P
ÐQÐP.	Ð&P)Ð'P.	Ð.QÑQÑQ'ÑQ$ÑQÑQ$Ñ Q'c               ó  — t        t        «      5   | j                  |i |	¤|||||||dœ¤Ž}
	 ddl}t        j
                  dk\  rDt        j                  |j                  ¬«      5 }|j                  |
«      cddd«       cddd«       S |j                  «        t        j                  |
«      cddd«       S # 1 sw Y   n0xY w# t        $ r! t        j                  |
«      cY cddd«       S w xY w	 ddd«       y# 1 sw Y   yxY w)a¾  
        Run many bots with polling

        :param bots: Bot instances (one or more)
        :param polling_timeout: Long-polling wait time
        :param handle_as_tasks: Run task for each event and no wait result
        :param backoff_config: backoff-retry config
        :param allowed_updates: List of the update types you want your bot to receive
        :param handle_signals: handle signals (SIGINT/SIGTERM)
        :param close_bot_session: close bot sessions on shutdown
        :param tasks_concurrency_limit: Maximum number of concurrent updates to process
            (None = no limit), used only if handle_as_tasks is True
        :param kwargs: contextual data
        :return:
        rå   r   N)é   é   )Úloop_factory)r
   ÚKeyboardInterruptrÿ   ÚuvloopÚsysÚversion_inforj   ÚRunnerÚnew_event_loopÚrunÚinstallÚImportError)rJ   r’   r¿   r“   r„   ræ   rç   rÀ   ré   rK   Úcoror  Úrunners                rN   Úrun_pollingzDispatcher.run_pollingx  s  € ô6 Ô'Ó(ñ 	-Ø%�4×%Ñ%Øð
àð
ð !0Ø /Ø-Ø /Ø-Ø"3Ø(?ó
ˆDð-Ûô ×#Ñ# wÒ.Ü Ÿ™°V×5JÑ5JÔKð 0ÈvØ%Ÿz™z¨$Ó/÷0ð 0÷+	-ñ 	-ð0 —N‘NÔ$Ü"Ÿ;™; tÓ,÷3	-ñ 	-÷*0ð 0ûô ò )Ü—{‘{ 4Ó(Ñ(÷#	-ñ 	-ð )úð
0÷+	-÷ 	-ñ 	-úsK   �C:®C²3C:Á%B7Á6	C:Â	$C:Â7C 	Â<C:ÃC-Ã!C:Ã,C-Ã-C:Ã:D)r-   zBaseStorage | Noner.   r   r/   zBaseEventIsolation | Noner0   Úboolr1   z
str | NonerK   r   rÐ   rÑ   )rS   ÚstrrÐ   r   )rV   r  rW   r   rÐ   rÑ   )rV   r  rÐ   rÑ   rQ   )r]   ú
Any | NonerV   r  rÐ   r  )rÐ   r   )rÐ   zRouter | None)rW   r$   rÐ   rÑ   )rf   r%   r3   r   rK   r   rÐ   r   )rf   r%   r3   zdict[str, Any]rK   r   rÐ   r   )
rf   r%   r’   r‡   r“   r   r„   úlist[str] | NonerÐ   zAsyncGenerator[Update, None])r3   r   rK   r   rÐ   r   )rf   r%   r¨   zTelegramMethod[Any]rÐ   rÑ   )T)
rf   r%   r3   r   r®   r  rK   r   rÐ   r  )r²   zAwaitable[bool]r³   zasyncio.SemaphorerÐ   r  )rf   r%   r’   r‡   r¿   r  r“   r   r„   r  rÀ   ú
int | NonerK   r   rÐ   rÑ   )é7   )
rf   r%   r3   zUpdate | dict[str, Any]rØ   ÚfloatrK   r   rÐ   z#TelegramMethod[TelegramType] | None)rÐ   rÑ   )râ   zsignal.SignalsrÐ   rÑ   )ré   r%   r’   r‡   r¿   r  r“   r   r„   zlist[str] | UNSET_TYPE | Noneræ   r  rç   r  rÀ   r  rK   r   rÐ   rÑ   )!r;   Ú
__module__Ú__qualname__Ú__doc__r   ÚUSER_IN_CHATr8   rT   rX   rZ   r\   Úpropertyr-   rb   Úsetterrz   r   ÚclassmethodÚDEFAULT_BACKOFF_CONFIGr™   r?   r©   r¯   r´   rÃ   r}   rÜ   rà   rã   r   rÿ   r  Ú__classcell__)rM   s   @rN   r,   r,   &   s]  ø„ ñð '+Ø$/×$<Ñ$<Ø6:Ø!Øñ<Bð $ð<Bð "ð	<Bð
 4ð<Bð ð<Bð ð<Bð ð<Bð 
õ<Bó|(ó(ó$ô4ð ò ó ð ð òó ðð ×Ñò ó ð ó+óZ	Xð ð  "Ø(>Ø,0ð7:àð7:ð ð7:ð &ð	7:ð
 *ð7:ð 
&ò7:ó ð7:órZð< òZó ðZð* !ð	 -àð -ð ð -ð ð	 -ð
 ð -ð 
ó -ðD à&ð ð %ð ð 
ó	 ð(  "Ø $Ø(>Ø,0Ø.2ð@àð@ð ð@ð ð	@ð
 &ð@ð *ð@ð ",ð@ð ð@ð 
ó@óDð( ð	;àð;ð (ð;ð ð	;ð
 ð;ð 
-ó;óz*ó ð  "Ø $Ø(>Ø9>Ø#Ø"&Ø.2ñn+àðn+ð ðn+ð ð	n+ð
 &ðn+ð 7ðn+ð ðn+ð  ðn+ð ",ðn+ð ðn+ð 
ón+ðf  "Ø $Ø(>Ø9>Ø#Ø"&Ø.2ñ4-àð4-ð ð4-ð ð	4-ð
 &ð4-ð 7ð4-ð ð4-ð  ð4-ð ",ð4-ð ð4-ð 
÷4-rO   r,   )@Ú
__future__r   rj   rÒ   rô   r  r¢   r   r   r   r   Úcollections.abcr   r	   Ú
contextlibr
   Útypingr   r   Úaiogramr   Úaiogram.exceptionsr   Úaiogram.fsm.middlewarer   Úaiogram.fsm.storage.baser   r   Úaiogram.fsm.storage.memoryr   r   Úaiogram.fsm.strategyr   Úaiogram.methodsr   r   Úaiogram.typesr   r   Úaiogram.types.baser   r   Úaiogram.types.updater   Úaiogram.utils.backoffr   r   Úevent.basesr   r    Úevent.telegramr!   Úmiddlewares.errorr"   Úmiddlewares.user_contextr#   r4   r$   Úaiogram.client.botr%   Úaiogram.methods.baser&   r  r,   ra   rO   rN   ú<module>r5     s   ðÝ "ã Û Û Û 
Û ß 7Ó 7ß 5Ý ß %å Ý /Ý 7ß Dß LÝ ,ß 6ß &ß 0Ý 6ß 8ç /Ý 1Ý /Ý ;Ý áÝ&Ý1á&°ÀÈCÐX[Ô\Ð ôF
-�õ F
-rO   