
    i-                         d Z ddlZddlZddlmZ 	 ddlZdZ G d d      Zda	dd	Z
d
 Zy# e$ r dZ ej                  d       Y /w xY w)u~   
Module de notifications Telegram pour le bot de trading
Inspiré de: https://github.com/Erfaniaa/binance-futures-trading-bot
    N)datetimeTFu`   ⚠️ Module python-telegram-bot non installé. Installez avec: pip install python-telegram-botc                   ^    e Zd ZdZddZddZddZddZddZd Z	d	 Z
d
 Zd Zd ZddZy)TelegramNotifierzC
    Service de notifications Telegram pour alertes de trading
    Nc                 >   |xr t         | _        || _        || _        d | _        | j                  r8|r5|r2	 t        j                  |      | _        t        j                  d       y y y y # t        $ r)}t        j                  d|        d| _        Y d }~y d }~ww xY w)N)tokenu!   ✅ Telegram notifier initialiséu$   ❌ Erreur initialisation Telegram: F)TELEGRAM_AVAILABLEenabledapi_keychat_idbottelegramBotlogginginfo	Exceptionerror)selfr
   r   r	   es        ./telegram_notifier.py__init__zTelegramNotifier.__init__   s    5#5<<G%#<<g6@A )0G<  % DQCHI$%s   0A* *	B3BBc                    K   | j                   r| j                  sy	 | j                  j                  | j                  ||       d{    y7 # t        $ r"}t        j                  d|        Y d}~yd}~ww xY ww)zEnvoie un message TelegramF)r   text
parse_modeNTu   ❌ Erreur envoi Telegram: )r	   r   send_messager   r   r   r   )r   messager   r   s       r   r   zTelegramNotifier.send_message$   s{     ||488		((''% (   
   	MM7s;<	s@   A>+A A	A A>A 	A;A61A>6A;;A>c                 R   | j                   sy	 t        j                         }|j                         r&t        j                  | j                  ||             y|j                  | j                  ||             y# t        $ r"}t        j                  d|        Y d}~yd}~ww xY w)u%   Version synchrone pour compatibilitéFTu    ❌ Erreur envoi sync Telegram: N)
r	   asyncioget_event_loop
is_runningcreate_taskr   run_until_completer   r   r   )r   r   r   loopr   s        r   send_message_syncz"TelegramNotifier.send_message_sync4   s    ||		))+D ##D$5$5gz$JK  ''(9(9':(NO 	MM<QC@A	s   A	A; !A; ;	B&B!!B&c           	         K   t        j                         j                  d      }d| d|dd|dd| d	}|r	|d| dz  }| j                  |       d	{    y	7 w)
zNotification d'ordre d'achat%H:%M:%Sub   
🟢 *ACHAT EXÉCUTÉ* 🟢
━━━━━━━━━━━━━━━━━━
📊 Crypto: `   `
💰 Prix: `.6f    USDT`
📦 Quantité: `u   `
⏰ Heure: ``
   📝 Raison: `Nr   nowstrftimer   )r   symbolpricequantityreason	timestampr   s          r   notify_buy_orderz!TelegramNotifier.notify_buy_orderG   s     LLN++J7	 h 3K 3  K  xs33G(((s   AAAAc                    K   t        j                         j                  d      }|dk\  rdnd}|dk\  rdnd}d| d| d	| d
|dd|dd|dd| d| d}	|r	|	d| dz  }	| j                  |	       d{    y7 w)zNotification d'ordre de venter%   r   u   🟢u   🔴PROFITPERTE
u    *VENTE EXÉCUTÉE* uF   
━━━━━━━━━━━━━━━━━━
📊 Crypto: `r&   r'   r(   u   `
📈 P&L: `+.2fz%` (u   )
⏰ Heure: `r)   r*   Nr+   )
r   r.   r/   r0   
profit_pctr1   r2   emojistatusr   s
             r   notify_sell_orderz"TelegramNotifier.notify_sell_orderW   s     LLN++J7	$/v'1_'E7 #h 3K 3  tD )K  xs33G(((s   A3A=5A;6A=c           	         K   t        j                         j                  d      }d| d|dd|dd| d	}| j                  |       d	{    y	7 w)
u(   Notification de déclenchement stop-lossr%   uh   
🛑 *STOP-LOSS DÉCLENCHÉ* 🛑
━━━━━━━━━━━━━━━━━━
📊 Crypto: `r&   r'   u    USDT`
📉 Perte: `.2f   %`
⏰ Heure: `r)   Nr+   )r   r.   r/   loss_pctr2   r   s         r   notify_stop_lossz!TelegramNotifier.notify_stop_lossk   sl     LLN++J7	 h 3K s^ K  (((   A	AAAc           	         K   t        j                         j                  d      }d| d|dd|dd| d	}| j                  |       d	{    y	7 w)
u*   Notification de déclenchement take-profitr%   ud   
✅ *TAKE-PROFIT ATTEINT* ✅
━━━━━━━━━━━━━━━━━━
📊 Crypto: `r&   r'   u    USDT`
📈 Profit: `+r>   r?   r)   Nr+   )r   r.   r/   r9   r2   r   s         r   notify_take_profitz#TelegramNotifier.notify_take_profitx   sm     LLN++J7	 h 3K 3  K  (((rB   c                 N   K   d| d}| j                  |       d{    y7 w)zNotification d'erreur critiqueuX   
⚠️ *ERREUR CRITIQUE* ⚠️
━━━━━━━━━━━━━━━━━━
r7   Nr   )r   error_messager   s      r   notify_errorzTelegramNotifier.notify_error   s4       
 (((s   %#%c                    K   |dkD  r||z  dz  nd}|dk\  rdnd}d| d| d| d| d	|d
d| d|dd|dd}| j                  |       d{    y7 w)u#   Résumé quotidien des performancesr   d   u   📈u   📉r7   u    *RÉSUMÉ QUOTIDIEN* uF   
━━━━━━━━━━━━━━━━━━
📊 Trades: `u   `
✅ Gagnants: `z` (z.1fu   %)
❌ Perdants: `u   `
💰 P&L Total: `r8   u   %`
💵 Solde: `r>   z USDT`
NrF   )	r   total_tradeswinslossestotal_profit_pctbalancewin_rater:   r   s	            r   notify_daily_summaryz%TelegramNotifier.notify_daily_summary   s     2>2BD<'#-*a/VeW %n vS# 'x "4( )c]  (((s   AAAAc                    K   t        j                         j                  d      }d| d| d|dd}| j                  |       d{    y7 w)u!   Notification de démarrage du bot%Y-%m-%d %H:%M:%Su^   
🤖 *BOT DÉMARRÉ* 🤖
━━━━━━━━━━━━━━━━━━
⏰ Heure: `u   `
📋 Cryptos surveillées: `u   `
💵 Solde initial: `r>   uY    USDT`
━━━━━━━━━━━━━━━━━━
✅ Système opérationnel
Nr+   )r   watchlist_countrO   r2   r   s        r   notify_bot_startedz#TelegramNotifier.notify_bot_started   sb     LLN++,?@	 K ,- .c] # (((s   AAAAc                    K   t        j                         j                  d      }d| d| d}| j                  |       d{    y7 w)u   Notification d'arrêt du botrS   u]   
🛑 *BOT ARRÊTÉ* 🛑
━━━━━━━━━━━━━━━━━━
⏰ Heure: `u   `
📝 Raison: `r)   Nr+   )r   r1   r2   r   s       r   notify_bot_stoppedz#TelegramNotifier.notify_bot_stopped   sU     LLN++,?@	 K h 	 (((s   AAA	A)NNF)Markdown) )u   Arrêt manuel)__name__
__module____qualname____doc__r   r   r#   r3   r<   rA   rD   rH   rQ   rU   rW        r   r   r      s>    % &) )()))) )	)r_   r   c                 (    t        | ||      at        S )z&Initialise le notifier Telegram global)r   telegram_notifier)r
   r   r	   s      r   init_telegram_notifierrb      s     )'7Cr_   c                      t         S )u!   Récupère l'instance du notifier)ra   r^   r_   r   get_telegram_notifierrd      s    r_   )T)r]   r   r   r   r   r   ImportErrorwarningr   ra   rb   rd   r^   r_   r   <module>rg      sl      x
d) d)P  i  xGOOvwxs   , AA