
    Yi]                        S SK r S SKrS SKJr  S SKJr  S SKJr  S SKJr  S SK	J
r
  S SKJrJrJr  S SKrS SKJr   S S	KJr  S
rS SKJr  S SKJr  S SKJr  \(       a  S SKJr  \" \SS9r " S S5      r  " S S\RB                  RD                  5      r# " S S\RB                  RH                  5      r%g! \ a    Sr Nyf = f)    N)
HTTPStatus)Path)socket)
SSLContext)TracebackType)TYPE_CHECKINGOptionalUnion)
HTTPServer)bind_unix_socketTF)Update)
get_logger)ExtBot)BotUpdater)
class_namec                       \ rS rSrSrSr SS\S\SSS	\\	   S
\\
\\\4      4
S jjrSS\\R                     SS4S jjrSS jrSrg)WebhookServer4   z6Thin wrapper around ``tornado.httpserver.HTTPServer``.)_http_server_server_lock_shutdown_lock
is_runninglistenportunixNr   r   webhook_appWebhookAppClassssl_ctxr   c                 |   U(       a  [         (       d  [        S5      e[        X4S9U l        Xl        X l        SU l        S U l        U(       a  [        U[        5      (       a  XPl        O U(       a  [        [        U5      5      U l        [        R                  " 5       U l        [        R                  " 5       U l        g )Nz.This OS does not support binding unix sockets.)ssl_optionsF)UNIX_AVAILABLERuntimeErrorr   r   r   r   r   r   
isinstancer   r   strasyncioLockr   r   )selfr   r   r   r   r   s         M/app/.venv/lib/python3.13/site-packages/telegram/ext/_utils/webhookhandler.py__init__WebhookServer.__init__A   s     OPP&{H		JtV,,I(T3DI#LLN%lln    readyreturnc                   #    U R                    IS h  vN   U R                  (       a&  U R                  R                  U R                  5        O.U R                  R	                  U R
                  U R                  S9  SU l        Ub  UR                  5         [        R                  S5        S S S 5      IS h  vN   g  N N! , IS h  vN  (       d  f       g = f7f)N)addressTzWebhook Server started.)
r   r   r   
add_socketr   r   r   set_LOGGERdebug)r(   r-   s     r)   serve_foreverWebhookServer.serve_foreverW   s     $$$yy!!,,TYY7!!((DKK(H"DO 		MM34 %$$$$$sE   CB=CBC,C7B?8C?CCC
CCc                   #    U R                    IS h  vN   U R                  (       d'  [        R                  S5         S S S 5      IS h  vN   g SU l        U R                  R                  5         U R                  R                  5       I S h  vN   [        R                  S5        S S S 5      IS h  vN   g  N Np N. N! , IS h  vN  (       d  f       g = f7f)Nz.Webhook Server is already shut down. ReturningFzWebhook Server stopped)r   r   r3   r4   r   stopclose_all_connectionsr(   s    r)   shutdownWebhookServer.shutdownd   s     &&&??NO '&& $DO""$##99;;;MM23 '&& < '&&&ss   CB9C(CC
B;C>CB=C(C3B?4C;C=C?CCC
CCNr.   N)__name__
__module____qualname____firstlineno____doc__	__slots__r%   intr	   r   r
   r   r   r*   r&   Eventr5   r;   __static_attributes__ r,   r)   r   r   4   s}    @I  48-- - '	-
 *%- uS$./0-,5'--)@ 5D 54r,   r   c            
           \ rS rSrSr SS\SSS\R                  S\\   4S	 jjr	S
\
R                  R                  SS4S jrSrg)r   o   z!Application used in the WebserverNwebhook_pathbotr   update_queuesecret_tokenc                     UUUS.U l         U S3[        U R                   4/n[        R                  R                  R                  X5        g )N)rL   rM   rN   z/?)shared_objectsTelegramHandlertornadowebApplicationr*   )r(   rK   rL   rM   rN   handlerss         r)   r*   WebhookAppClass.__init__r   sM     ((

 &b)?D<O<OPQ((8r,   handlerr.   c                     g)zIOverrides the default implementation since we have our own logging setup.NrH   )r(   rW   s     r)   log_requestWebhookAppClass.log_request   s    r,   )rP   r=   )r?   r@   rA   rB   rC   r%   r&   Queuer	   r*   rR   rS   RequestHandlerrY   rG   rH   r,   r)   r   r   o   s]    + '+99 9 mm	9
 sm9X7;;#=#= X$ Xr,   r   c                       \ rS rSrSrSrSrSSS\R                  S\	S	S
4S jr
SS jrSS jrSS jrS\\\      S\\   S\\   S	S
4S jrSrg
)rQ      z:BaseHandler that processes incoming requests from Telegram)rL   rN   rM   )POSTrL   r   rM   rN   r.   Nc                 b    Xl         X l        X0l        U(       a  [        R	                  S5        gg)zFInitialize for each request - that's the interface provided by tornadozLThe webhook server has a secret token, expecting it in incoming requests nowN)rL   rM   rN   r3   r4   )r(   rL   rM   rN   s       r)   
initializeTelegramHandler.initialize   s,     ((MM^ r,   c                 (    U R                  SS5        g)zSets default headersContent-Typez!application/json; charset="utf-8"N)
set_headerr:   s    r)   set_default_headers#TelegramHandler.set_default_headers   s    (KLr,   c                 ,  #    [         R                  S5        U R                  5         U R                  R                  R                  5       n[        R                  " U5      nU R                  [        R                  5        [         R                  SU5         [        R                  " X R                  5      nU(       a~  [         R                  SUR(                  5        [+        U R                  [,        5      (       a  U R                  R/                  U5        U R0                  R3                  U5      I Sh  vN   gg! [         aG  n[         R                  SUUS9  [         R"                  R%                  [        R&                  SS9UeSnAff = f NZ7f)	zHandle incoming POST requestzWebhook triggeredzWebhook received data: %szySomething went wrong processing the data received from Telegram. Received data was *not* processed! Received data was: %rexc_infozUpdate could not be processedreasonNz%Received Update with ID %d on Webhook)r3   r4   _validate_postrequestbodydecodejsonloads
set_statusr   OKr   de_jsonrL   	ExceptioncriticalrR   rS   	HTTPErrorBAD_REQUEST	update_idr$   r   insert_callback_datarM   put)r(   json_stringdataupdateexcs        r)   postTelegramHandler.post   s>    )*ll''..0zz+&
&1;?	^^D((3F MM7   $((F++--f5##''///   		K	   ++''&&/N ( 		, 0s8   BF D> 8A?F7F8F>
FAF

FFc                 N   U R                   R                  R                  SS5      nUS:w  a-  [        R                  R                  [        R                  5      eU R                  b  U R                   R                  R                  S5      nU(       dA  [        R                  S5        [        R                  R                  [        R                  SS9eX R                  :w  aB  [        R                  SU5        [        R                  R                  [        R                  SS9egg)	z+Only accept requests with content type JSONrd   Nzapplication/jsonzX-Telegram-Bot-Api-Secret-Tokenz(Request did not include the secret tokenrk   z&Request had the wrong secret token: %sz"Request had the wrong secret token)rn   headersgetrR   rS   rx   r   	FORBIDDENrN   r3   r4   )r(   	ct_headertokens      r)   rm   TelegramHandler._validate_post   s    LL((,,^TB	**++''
(<(<==(LL((,,-NOEHIkk++((1[ ,   )))FNkk++((1U ,   * )r,   typvaluetbc                     [         R                  SU R                  R                  SU(       a  U(       a  U(       a  XU4OUS9  g)z@Override the default logging and instead use our custom logging.z%s - %szException in TelegramHandlerri   N)r3   r4   rn   	remote_ip)r(   r   r   r   s       r)   log_exceptionTelegramHandler.log_exception   s8     	LL""*),2c"%5	 	 	
r,   r>   )r?   r@   rA   rB   rC   rD   SUPPORTED_METHODSr&   r[   r%   ra   rf   r   rm   r	   typeBaseExceptionr   r   rG   rH   r,   r)   rQ   rQ      s    D7I!	e 	7== 	PS 	X\ 	M"0H&
d=)*
 &
 ]#	

 

r,   rQ   )&r&   rq   httpr   pathlibr   r   sslr   typesr   typingr   r	   r
   tornado.webrR   tornado.httpserverr   tornado.netutilr   r"   ImportErrortelegramr   telegram._utils.loggingr   telegram.ext._extbotr   r   r?   r3   r   rS   rT   r   r\   rQ   rH   r,   r)   <module>r      s   (        1 1  )0N  . ' X)
484 84vXgkk-- X.Y
gkk00 Y
A  Ns   B3 3B>=B>