o
    U×íiË  ã                   @   sT   d Z ddlZddlZddlZddlmZ ddlmZmZ e e	¡Z
G dd„ dƒZdS )u"  
Telegram Bot æŽ¨é€æ¨¡å—

åŠŸèƒ½:
- å‘é€ä¿¡å·é€šçŸ¥
- å‘é€æ—¥æŠ¥
- å‘é€é”™è¯¯å‘Šè­¦
- æŽ¥æ”¶å‘½ä»¤ (/status, /stop, /resume)

é…ç½®:
åœ¨ config/secrets.yaml æˆ–çŽ¯å¢ƒå˜é‡ä¸­è®¾ç½®:
  TELEGRAM_BOT_TOKEN: Bot Token (ä»Ž@BotFatherèŽ·å–)
  TELEGRAM_CHAT_ID: æŽ¥æ”¶æ¶ˆæ¯çš„Chat ID
é    N)ÚOptional)ÚdatetimeÚtimezonec                   @   sæ   e Zd ZdZ		d!dee dee fdd„Zedefdd	„ƒZ	d"d
ededefdd„Z
d"d
ededefdd„Zd"d
ededefdd„Zdedefdd„Zdedefdd„Zdedefdd„Zd#dededefdd„Zdefdd „ZdS )$ÚTelegramNotifieruÂ   
    Telegramæ¶ˆæ¯æŽ¨é€å™¨

    ç”¨æ³•:
        notifier = TelegramNotifier(token, chat_id)
        await notifier.send("Hello!")
        # æˆ–åŒæ­¥:
        notifier.send_sync("Hello!")
    NÚtokenÚchat_idc                 C   sR   |pt j dd¡| _|pt j dd¡| _t| jo| jƒ| _| js't d¡ d S d S )NÚTELEGRAM_BOT_TOKENÚ ÚTELEGRAM_CHAT_IDuO   Telegramæœªé…ç½® (è®¾ç½® TELEGRAM_BOT_TOKEN å’Œ TELEGRAM_CHAT_ID çŽ¯å¢ƒå˜é‡))	ÚosÚenvironÚgetr   r   ÚboolÚ_enabledÚloggerÚwarning)Úselfr   r   © r   ú'/opt/langlang_ai/notify/telegram_bot.pyÚ__init__$   s   ÿÿzTelegramNotifier.__init__Úreturnc                 C   s   | j S ©N)r   )r   r   r   r   Úenabled2   s   zTelegramNotifier.enabledÚtextÚ
parse_modec           
   
   Ã   sÈ  | j st d|dd… › d¡ dS z§ddl}d| j› d}| j|d	œ}|r+||d
< | ¡ 4 I dH šz}|j|||jddd4 I dH šR}|j	dkrmt d|dd… › d¡ 	 W d  ƒI dH  W d  ƒI dH  W dS | 
¡ I dH }t d|j	› d|› ¡ 	 W d  ƒI dH  W d  ƒI dH  W dS 1 I dH sœw   Y  W d  ƒI dH  W dS 1 I dH s³w   Y  W dS  tyÉ   |  ||¡ Y S  tyã }	 zt d|	› ¡ W Y d}	~	dS d}	~	ww )u·   
        å¼‚æ­¥å‘é€æ¶ˆæ¯

        Args:
            text: æ¶ˆæ¯æ–‡æœ¬
            parse_mode: 'HTML' or 'Markdown' or None
        Returns:
            æ˜¯å¦å‘é€æˆåŠŸ
        õ   [Telegramæœªé…ç½®] Néd   ú...Fr   úhttps://api.telegram.org/botú/sendMessage©r   r   r   é   )Útotal©ÚjsonÚtimeoutéÈ   úTelegram sent: é2   TúTelegram error ú: úTelegram send failed: )r   r   ÚinfoÚaiohttpr   r   ÚClientSessionÚpostÚClientTimeoutÚstatusr   ÚerrorÚImportErrorÚ_send_requestsÚ	Exception)
r   r   r   r-   ÚurlÚpayloadÚsessionÚrespÚbodyÚer   r   r   Úsend6   sB   €
þ"
ýÿùÿ2ÿ	€þzTelegramNotifier.sendc              
   C   sÀ   zDddl }d| j› d}| j|dœ}|r||d< |j||dd}|jd	kr5t d
|dd… › d¡ W dS t d|j› d|j› ¡ W dS  t	y_ } zt d|› ¡ W Y d}~dS d}~ww )u)   ä½¿ç”¨requestsåº“å‘é€ï¼ˆåŒæ­¥åŽå¤‡ï¼‰r   Nr   r   r    r   r!   r#   r&   r'   r(   r   Tr)   r*   Fr+   )
Úrequestsr   r   r/   Ústatus_coder   r,   r2   r   r5   )r   r   r   r=   r6   r7   r9   r;   r   r   r   r4   ^   s&   þ
€þzTelegramNotifier._send_requestsc                 C   s0   | j st d|dd… › d¡ dS |  ||¡S )uD   
        åŒæ­¥å‘é€æ¶ˆæ¯ï¼ˆé€‚ç”¨äºŽéžasyncä¸Šä¸‹æ–‡ï¼‰
        r   Nr   r   F)r   r   r,   r4   )r   r   r   r   r   r   Ú	send_syncu   s   zTelegramNotifier.send_syncÚsignal_dictc                 Ã   ó&   ddl m} ||ƒ}|  |¡I dH S )u   å‘é€äº¤æ˜“ä¿¡å·é   ©Úformat_signalN)Ú	templatesrD   r<   ©r   r@   rD   r   r   r   r   Úsend_signal   ó   €zTelegramNotifier.send_signalc                 C   s   ddl m} ||ƒ}|  |¡S )u   åŒæ­¥å‘é€äº¤æ˜“ä¿¡å·rB   rC   )rE   rD   r?   rF   r   r   r   Úsend_signal_sync…   s   
z!TelegramNotifier.send_signal_syncÚstatsc                 Ã   rA   )u   å‘é€æ¯æ—¥æŠ¥å‘ŠrB   )Úformat_daily_reportN)rE   rK   r<   )r   rJ   rK   r   r   r   r   Úsend_daily_report‹   rH   z"TelegramNotifier.send_daily_reportr	   Ú	error_msgÚ	componentc                 Ã   sB   ddl m} |||ƒ}| dt tj¡ d¡¡}|  |¡I dH S )u   å‘é€é”™è¯¯å‘Šè­¦rB   )Úformat_error_alertz{now}z%Y-%m-%d %H:%M UTCN)	rE   rO   Úreplacer   Únowr   ÚutcÚstrftimer<   )r   rM   rN   rO   r   r   r   r   Ú
send_error‘   s
   €
zTelegramNotifier.send_errorc                 Ã   s    ddl m} |  |ƒ ¡I dH S )u   å‘é€å¿ƒè·³rB   )Úformat_heartbeatN)rE   rU   r<   )r   rU   r   r   r   Úsend_heartbeat˜   s   €zTelegramNotifier.send_heartbeat)NNr   )r	   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   Ústrr   Úpropertyr   r   r<   r4   r?   ÚdictrG   rI   rL   rT   rV   r   r   r   r   r      s&    ýþ
ý(
r   )rZ   r   ÚloggingÚasyncioÚtypingr   r   r   Ú	getLoggerrW   r   r   r   r   r   r   Ú<module>   s    
