
    soj_9                        d Z ddlZddlZddlZddlZddlmZmZ ddlm	Z	 ddl
mZmZmZmZ ddlmZ ddlmZ dd	lmZ  ej        e          Z G d
 d          Z G d d          ZeZdedefdZ G d d          ZdS )aN  
This is where the rubber meets the road: real Telethon events get converted
into the compat Update/Context objects the rest of the codebase (unchanged)
expects, mirroring how python-telegram-bot's Application dispatched updates.

main.py constructs one Application and calls .run(...) on it - see that file
for the top-level wiring.
    N)TelegramClientevents   )Bot)MessageCallbackQueryInlineQueryUpdate)TelegramUser)JobQueue)
BadRequestc                   0    e Zd ZdZddZed             ZdS )ContextzAMirrors telegram.ext.CallbackContext / ContextTypes.DEFAULT_TYPE.Nc                 L    || _         || _        || _        || _        || _        d S Nbotbot_data	user_dataapplicationjob)selfr   r   r   r   r   s         /app/src/tg_compat/runtime.py__init__zContext.__init__   s*     "&    c                     | j         j        S r   )r   	job_queue)r   s    r   r   zContext.job_queue$   s    ))r   r   )__name__
__module____qualname____doc__r   propertyr    r   r   r   r      sI        KK    * * X* * *r   r   c                       e Zd ZdZeZdS )ContextTypesz"Mirrors telegram.ext.ContextTypes.N)r   r   r    r!   r   DEFAULT_TYPEr#   r   r   r%   r%   )   s        ,,LLLr   r%   textreturnc                     | sdS |                                  r|                                  d         nd}|                     d          d         }|                                dk    S )NFr    @z/chatid)splitlower)r'   
first_wordcommands      r   _is_chatid_commandr0   3   s\     u$(JJLL8abJs##A&G==??i''r   c                   v    e Zd ZdZ	 	 	 	 ddededed	ed
edefdZddedefdZ	ddefdZ
d Zd ZddefdZdS )Applicationa  Mirrors telegram.ext.Application. Owns the single TelegramClient for
    the process, plus the in-memory bot_data/user_data stores PTB would
    otherwise manage (this project uses no persistence backend, so plain
    dicts that live for the process lifetime are an exact match).bot_sessionN      api_idapi_hash	bot_tokensessionconnect_timeoutconnection_retriesc                    || _         t          |||||d          | _        i | _        i | _        t          | j                  | _        t          | |          | _        t                      | _
        d | _        d | _        d | _        d S )Nr   )timeoutr;   flood_sleep_threshold)timezone)
_bot_tokenr   _clientr   _user_data_storer   r   r   r   set_background_tasks_regular_handler_callback_handler_chatid_handler)r   r6   r7   r8   r9   r?   r:   r;   s           r   r   zApplication.__init__A   s     $%#1 #$
 
 
  "t|$$!$::: "% $!%#r   updater(   c                     d }||j         |j         j        }|| j                            |i           ni }t	          | j        | j        || |          S )Nr   )effective_useridrB   
setdefaultr   r   r   )r   rH   r   user_idr   s        r   new_contextzApplication.new_contextp   sb    &"7"C+.GELEXD)44WbAAA^`	48dmy^bhkllllr   namec                       fd}t          j         |                      } j                            |           |                     j        j                   |S )Nc                  l  K   	  d {V  d S # t           $ r} t          |                                           }d|v sd|v r$t                              dpd d|  d           n^t                              dpd            j                            dpd dt          j	                                d {V  Y d } ~ d S Y d } ~ d S d } ~ wt          $ r\ t                              dpd            j                            dpd dt          j	                                d {V  Y d S w xY w)	Nzcannot start conversationszinvalid peerzBackground task z	<unnamed>z#: recipient unreachable, skipping ()z'Unhandled exception in background task z:

)r   strr-   loggerinfo	exceptionr   report_error	traceback
format_exc	Exception)emessagecororO   r   s     r   _wrappedz)Application.create_task.<locals>._wrappedx   s     








   a&&,,../7::nPW>W>W KK o43F; o okl o o opppp$$%dtObWb%d%deee(//t$BU+tt\e\p\r\rtt               qppppp      !`4K^S^!`!`aaah++pd>QkppXaXlXnXnpp           s    
D3B%C

A%D32D3)asyncioensure_futurerD   addadd_done_callbackdiscard)r   r]   rO   r^   tasks   ```  r   create_taskzApplication.create_taskw   sv    	 	 	 	 	 	 	> $XXZZ00""4(((t5=>>>r   c                 0    || _         || _        || _        d S r   )rE   rF   rG   )r   regular_handlercallback_handlerchatid_handlers       r   set_handlerszApplication.set_handlers   s      /!1-r   c                      j                             t          j                               fd            }                    t          j                               fd            }                    t          j                               fd            }                    t          j                               fd            }d S )Nc                    K   | j         rd S 	 t          j        | j        j                   d {V }n_# t
          $ rR t                              d           j                            dt          j
                                d {V  Y d S w xY wt          |j                  }                    |          }t          |j                  r                    ||           d {V  d S                     ||           d {V  d S )Nz8tg_compat: failed to build Message from NewMessage eventz;tg_compat: failed to build Message from NewMessage event:

r\   _botrH   )outr   from_telethonr\   r   rZ   rT   rV   rW   rX   rY   r
   rN   r0   r'   rG   rE   eventr\   rH   contextclientr   s       r   _on_new_messagez=Application._register_event_handlers.<locals>._on_new_message   s     y   ' 5emVTX V VVVVVVV     ![\\\h++  -Elu  mA  mC  mC  -E  -E  F  F  F  F  F  F  F  F  F
 G$(;;;F&&f&55G!',// **67;;;;;;;;;''88888888888s   &5 ABBc                   K   | j         d S 	 t          j        | j                   d {V }n_# t          $ rR t
                              d           j                            dt          j	                                d {V  Y d S w xY wt          |j                  }                    |          }                    ||           d {V  d S )Nz8tg_compat: failed to build Message from ChatAction eventz;tg_compat: failed to build Message from ChatAction event:

rm   ro   )action_messager   from_chat_actionr   rZ   rT   rV   rW   rX   rY   r
   rN   rE   rr   s       r   _on_chat_actionz=Application._register_event_handlers.<locals>._on_chat_action   s@     #+ ' 8 Q QQQQQQQ     ![\\\h++  -Elu  mA  mC  mC  -E  -E  F  F  F  F  F  F  F  F  F G$(;;;F&&f&55G''88888888888s   !0 ABBc                   K   	 t          | j        t          t          f          r| j                            d          n| j        }n# t
          $ r d }Y nw xY wd }	 |                                  d {V }n,# t
          $ r t                              dd           Y nw xY wd }|	 t          j
        |	
j                   d {V }n^# t
          $ rQ t                              d           
j                            dt          j                                d {V  Y nw xY w|                                  d {V }t#          j        |	          }t'          t)          | j        j                  |||	          }t/          |
j                  }
                    |	          }
                    ||           d {V  d S )
Nzutf-8z5tg_compat: could not fetch message for callback queryT)exc_infoz5tg_compat: failed to build Message for callback queryz8tg_compat: failed to build Message for callback query:

)rK   datar\   	from_userrA   )callback_queryrn   ro   )
isinstancer}   bytes	bytearraydecoderZ   get_messagerT   warningr   rq   r   rV   rW   rX   rY   
get_senderr   from_entityr   rS   queryquery_idr
   rN   rF   )rs   r}   
tl_messager\   senderr~   r   rH   rt   ru   r   s            r   _on_callback_queryz@Application._register_event_handlers.<locals>._on_callback_query   s     5?
UT]L^5_5_ouz((111ejeo    Jg#(#4#4#6#6666666

 g g gVaefffffg G%G& %,$9*fdh$W$WWWWWWWGG  G G G$$%\]]](//  1Fmv  nB  nD  nD  1F  1F  G  G  G  G  G  G  G  G  G  G  GG !++--------F$0@@I*u{+,,#  N >IIIF&&f&55G((99999999999s7   AA AAA8 8&B! B!)!C AD&%D&c                 N  K   |                                   d {V }t          j        |          }t          t	          | j                  | j        ||           }t          |j                  }	                    |          }
                    ||           d {V  d S )N)rK   r   r~   _event)inline_queryrn   ro   )r   r   r   r	   rS   rK   r'   r
   r   rN   rE   )rs   r   r~   r   rH   rt   ru   r   s         r   _on_inline_queryz>Application._register_event_handlers.<locals>._on_inline_query   s       ++--------F$0@@I&#eh--uzU^glmmmLDHEEEF&&f&55G''88888888888r   )rA   onr   
NewMessage
ChatActionr   r	   )r   rv   rz   r   r   ru   s   `    @r   _register_event_handlersz$Application._register_event_handlers   s   	6$&&	'	'	9 	9 	9 	9 	9 
(	'	9, 
6$&&	'	'	9 	9 	9 	9 	9 
(	'	9 
6'))	*	*2	: 2	: 2	: 2	: 2	: 
+	*2	:h 
6%''	(	(	9 	9 	9 	9 	9 
)	(	9 	9 	9r   Tdrop_pending_updatesc                    K    j                              j                   d {V   j                                          d {V }|j         j        _        |j         j        _                                          | |            d {V  |s j                                          d {V  t          
                    d|j         d|j         d           t          j                    }dt          f fd}t          j        t          j        t          j        fD ]/}	 |                    |||j                    # t(          $ r Y ,w xY w j                                          d {V  t          
                    d           d S )N)r8   zBot connected as @z (id=rR   sig_namec                     t                               d|  d                               j                                        d           d S )Nz	Received z, shutting down...zshutdown-disconnect)rO   )rT   rU   re   rA   
disconnect)r   r   s    r   _request_shutdownz*Application.run.<locals>._request_shutdown/  sO    KK@H@@@AAAT\4466=RSSSSSr   zBot stopped.)rA   startr@   get_merK   r   usernamer   catch_uprT   rU   r_   get_running_looprS   signalSIGINTSIGTERMSIGABRTadd_signal_handlerrO   NotImplementedErrorrun_until_disconnected)r   	post_initr   meloopr   sigs   `      r   runzApplication.run	  s     l  4? ;;;;;;;;;<&&((((((((eK%%''' )D//!!!!!!!# 	*,'')))))))))CCC25CCCDDD* '))	T 	T 	T 	T 	T 	T 	T M6>6>B 		 		C''->IIII&     l11333333333N#####s   $E
EE)r3   Nr4   r5   )NNr   )NT)r   r   r    r!   intrS   r   r
   r   rN   re   rj   r   boolr   r#   r   r   r2   r2   ;   s       E E %!"#-$ -$-$ -$ 	-$
 -$ -$  -$ -$ -$ -$^m m& mg m m m m# #c # # # #N. . .
d9 d9 d9L6$ 6$d 6$ 6$ 6$ 6$ 6$ 6$r   r2   )r!   r_   loggingr   rX   telethonr   r   rn   r   _messager   r   r	   r
   _typesr   	_jobqueuer   errorr   	getLoggerr   rT   r   r%   CallbackContextrS   r   r0   r2   r#   r   r   <module>r      s           + + + + + + + +       A A A A A A A A A A A A                        		8	$	$* * * * * * * *        (S (T ( ( ( (D$ D$ D$ D$ D$ D$ D$ D$ D$ D$r   