
    ki                     J    d Z ddlZddlmZmZ ddlmZ  G d de          ZdS )u   Telegram Bot 网关。    N)AnyOptional)BaseGatewayc                        e Zd ZdZdZddedeee                  f fdZddZ	d	e
d
e
ddfdZd	e
d
e
ddfdZdededdfdZddZ xZS )TelegramGatewayu7   Telegram Bot 网关，使用 python-telegram-bot 库。telegramN	bot_tokenallowed_chatsc                 v    t                                                       || _        |pg | _        d | _        d S N)super__init__r	   r
   _app)selfr	   r
   	__class__s      6/root/projects/qq-shell/src/butler/gateway/telegram.pyr   zTelegramGateway.__init__   s8    "*0b			    returnc                 >  K   ddl m}m}m}  |                                | j                                                  | _        | j                             ||j	        |j
         z  | j                             ddl m} | j                             |d| j                             | j                                         d{V  | j                                         d{V  t!          d           | j        j                                         d{V  dS )u*   启动 Telegram Bot（polling 模式）。r   )ApplicationBuilderMessageHandlerfilters)CommandHandlerstartNz [telegram] Bot started (polling))telegram.extr   r   r   tokenr	   buildr   add_handlerTEXTCOMMAND_on_messager   	_on_start
initializer   printupdaterstart_polling)r   r   r   r   r   s        r   r   zTelegramGateway.start   sK     LLLLLLLLLL   U4>""UWW 		 		N7<7?*::D<LMM	
 	
 	

 	0/////	nnWdnEEFFFi""$$$$$$$$$ioo0111i--///////////r   updatecontextc                 \   K   |j         r"|j                            d           d{V  dS dS )u   处理 /start 命令。u   你好！我是 Butler-Shell，你的远程服务器助手。
直接用自然语言告诉我你想做什么，比如：
- 查看当前目录
- 看下磁盘空间
- 系统负载怎么样N)effective_usermessage
reply_text)r   r'   r(   s      r   r"   zTelegramGateway._on_start,   sb        	.++*          	 	r   c                 v  K   |j         r|j        sdS t          |j         j                  }|j        j        }| j        r+|| j        vr"|j                            d           d{V  dS | j        rF|                     ||| j                  }t          j
        |          rt          j        |           dS dS dS )u   收到 Telegram 消息。Nu!   抱歉，你没有使用权限。)r*   r+   stridtextr
   r,   _message_handlernameasyncioiscoroutineensure_future)r   r'   r(   user_idr0   results         r   r!   zTelegramGateway._on_message7   s      $ 	FN 	Ff+.//~"  	'1C"C"C.++,OPPPPPPPPPF  	.**7D$)DDF"6** .%f-----	. 	.. .r   r6   r0   c                    K   | j         r6| j         j                            t          |          |           d{V  dS dS )u   通过 Telegram 发送消息。)chat_idr0   N)r   botsend_messageint)r   r6   r0   s      r   r;   zTelegramGateway.send_messageI   sX      9 	N)-,,S\\,MMMMMMMMMMM	N 	Nr   c                 h  K   | j         r	 | j         j        j        r$| j         j                                         d{V  n# t          $ r Y nw xY w	 | j                                          d{V  | j                                          d{V  n# t          $ r Y nw xY wt          d           dS dS )u   停止 Bot。Nz[telegram] Bot stopped)r   r%   runningstopRuntimeErrorshutdown	Exceptionr$   )r   s    r   r?   zTelegramGateway.stopN   s      9 	,9$, 3)+00222222222   inn&&&&&&&&&i((**********   *+++++	, 	,s#   5A 
AA>B 
BBr   )r   N)__name__
__module____qualname____doc__r2   r.   r   listr   r   r   r"   r!   r;   r?   __classcell__)r   s   @r   r   r   	   s       AAD # htCy6I      0 0 0 00	c 	C 	D 	 	 	 	. .c .d . . . .$N# NS NT N N N N
, , , , , , , ,r   r   )rF   r3   typingr   r   butler.gateway.baser   r    r   r   <module>rL      s|                       + + + + + +R, R, R, R, R,k R, R, R, R, R,r   