
    :j              
           d dl Z d dlZd dlZd dlmZ d dlmZ  ee      j                         j                  j                  Z
 ee
      ej                  vr"ej                  j                  d  ee
             d dlmZmZmZ d dlmZmZ d dlmZmZ d dlmZ d dlmZ d d	lmZ d d
lmZm Z m!Z!m"Z" d dl#m$Z$m%Z%m&Z&m'Z' d dl(m)Z)m*Z*m+Z+ d dl,m-Z- defdZ.ddddedee   de/eee!   f   fdZ0 G d de      Z1 ed      Z2 ee%xs e$jg                          eejh                              Z5 e       Z6e6jo                   e             de"ddfd       Z8e2js                  d      d,d       Z:e2js                  d      d,d       Z;e2jy                  d      de=fd        Z>e2j                  d!      e2j                  d"      d#ede=fd$              Z@eAd%k(  r+d dlBZBd&d'd(d)ZCe&re'r
e&eCd*<   e'eCd+<    eBj                  d-i eC yy).    N)Path)Optional)FastAPIHTTPExceptionRequest)	BaseModelField)Bot
Dispatcher)	ParseMode)DefaultBotProperties)CommandStart)CopyTextButtonInlineKeyboardButtonInlineKeyboardMarkupMessage)	BOT_TOKENPANEL_BOT_TOKENSSL_CERTFILESSL_KEYFILE)
get_deviceresolve_sms_destinationset_sms_chat_id)parse_messagereturnc                    | | dk(  ry	 t        |       }|j                         rt        |      dj                  dd      }n|dj                  dd      }| dS # t        t        f$ r! t        j                  t        |             cY S w xY w)N    —, z,.2f    ₽)	float	TypeError
ValueErrorhtmlescapestr
is_integerintreplace)balancevalue	formatteds      6/var/www/oz-panel.ru/ozpay-pub/server/notify_server.py_format_db_balancer/      s    'R-)g 5z!n--c37	Tl++C5	[ z" ){{3w<(()s   A -BBaccount_namer+   messager1   c                   t        |       }|j                  d      }|j                  d      }|j                  d      }g }|rq|j                  d| d       |xs dj                         xs d}|j                  dt	        j
                  |              |j                  d	t        |              |r|j                  d
| d       |r|j                  d|        |j                  d       |j                  d       |j                  t	        j
                  |              dj                  |      }	d }
|r%t        t        dt        |      dd      gg      }
|	|
fS )NcodeamountserviceuP   <tg-emoji emoji-id='5775887550262546277'>❗️</tg-emoji> <b>Код:</b> <code>z</code>r   r   uF   <tg-emoji emoji-id='5879770735999717115'>👤</tg-emoji> <b>ЛК:</b> uN   <tg-emoji emoji-id='6039641775377748623'>👛</tg-emoji> <b>Баланс:</b> uL   <tg-emoji emoji-id='5769403330761593044'>👛</tg-emoji> <b>Сумма:</b> r!   uN   <tg-emoji emoji-id='5879585266426973039'>🌐</tg-emoji> <b>Сервис:</b> uo   <tg-emoji emoji-id='5956561916573782596'>📄</tg-emoji> <b>Полный текст уведомления:</b>
u   Скопировать код)text5985774024968379294success)r8   	copy_texticon_custom_emoji_idstyle)inline_keyboard)r   getappendstripr%   r&   r/   joinr   r   r   )r2   r1   r+   parsedr4   r5   r6   lineslk_namer8   markups              r.   format_notification_messagerG   &   sm    7#F::fDZZ!Fjj#GEghlgmmtuv%2,,.7%]^b^i^ijq^r]stu\]opw]x\yz	
 cdjckkopqefmenop	LL	LL  C  D	LLW%&99UDF% )<"0d";-B'		
 <    c                       e Zd ZU  eddd      Zeed<    edd      Zee   ed	<    edd
      Z	ee   ed<   e
defd       Zy)NotifyRequest.   u   Имя устройства)
min_lengthdescriptiondevice_nameNu!   Текст уведомления)rM   r8   u9   Альтернативное поле для текстаr2   r   c                 x    | j                   xs | j                  xs dj                         }|st        d      |S )Nr   /   Нужно передать text или message)r8   r2   rA   r$   )selfr,   s     r.   notification_textzNotifyRequest.notification_text[   s6    0dll0b779NOOrH   )__name__
__module____qualname__r	   rN   r'   __annotations__r8   r   r2   propertyrR    rH   r.   rJ   rJ   V   s[    SQ<YZKZ2UVD(3-V"45pqGXc]q3  rH   rJ   zNotify gateway)title)
parse_mode)tokendefaultc                    K   | j                   r| j                   j                  nd}| j                  d| d       d {    y 7 w)Nr   u   OZ Panel будет присылать сюда коды и SMS с ваших личных кабинетов.
Ваш Telegram ID: <code>u   </code>

Чтобы слать SMS в другой чат, укажите его ID в настройках панели и добавьте туда этого бота.)	from_useridanswer)r2   user_ids     r.   	cmd_startrb   k   sM     &-&7&7g""QG
..	%%,I .l	l  s   =AA Astartupc                  d   K   t        j                  t        j                  t                     y wN)asynciocreate_taskdpstart_pollingbotrX   rH   r.   startup_eventrk   u   s     ((-.s   .0shutdownc                  \   K   t         j                  j                          d {    y 7 wre   )rj   sessioncloserX   rH   r.   shutdown_eventrp   z   s     
++


s   ",*,z/healthc                     K   ddiS w)NstatusokrX   rX   rH   r.   healthrt      s     ds   z/notifyz/ozpay/notifyrequestc                 D  K   i }	 | j                   j                  dd      j                  d      r| j                          d {   }|j                  d      xs | j
                  j                  d      xs dj                         }|j                  d      xsO |j                  d      xs< | j
                  j                  d      xs | j
                  j                  d      xs dj                         }|st        dd	      |st        dd
	      	 t        ||      }t        |      xs i }|j                  d      }	 |dvrt        |      nd }|t        dd| d	      t        |      \  }}		 |j                  }
t!        |
      }t#        |
|j                  d      |j                  d            \  }}	 t$        j'                  |dt)        j*                  |       d| |       d {    t/        d| d| d|        d|||
|dS 7 # t        $ r i }Y w xY w# t        $ r}t        dt        |      	      |d }~ww xY w# t        t        f$ r d }Y w xY w# t        $ r}t        dt        |      	      |d }~ww xY w7 # t        $ r}|	ret-        |d        	 t$        j'                  |dt)        j*                  |       d| |       d {  7   |}n)# t        $ r t        dd	      |w xY wt        dd	      |Y d }~d }~ww xY ww)Nzcontent-typer   zapplication/jsonrN   r8   r2   i  u1   Параметр device_name обязателен)status_codedetailrP   )rN   r8   tg_id)Nr   r   0i  u   У устройства 'uC   ' нет владельца — SMS некуда отправитьnamer+   r0   u<   <tg-emoji emoji-id='5877318502947229960'>💻</tg-emoji> <b>z</b>

)chat_idr8   reply_markupi  uM   Чат отсутствует или бот в него не добавленzNotification sent to device 'z' (chat_id: z): rs   )rr   rN   r|   r2   rC   )headersr?   
startswithjson	Exceptionquery_paramsrA   r   rJ   r$   r'   r   r)   r#   r   rR   r   rG   rj   send_messager%   r&   r   print)ru   	body_datarN   r8   payloadexcaccountowner_idr|   custommessage_textrC   formatted_textr}   s                 r.   notifyr      s     I??~r2==>PQ%lln,I
 
}	%	V)=)=)A)A-)P	VTV]]_  	f 	==#	##F+	 ##I.	 eg 	 4ghh4effGKdC %+G{{7#H$,4F$F3x=D .{m;~
 	

 .h7OGVG00 <(F#>[[(I&$ NLOPTP[P[\gPhOiiq  sA  rB  C%  
 	
 	
4 
)+l7)3~N^
_` " c - 	,  GCH=3FG z"   GCH=3FG	

  Hd+&&$WX\XcXcdoXpWqqy  {I  zJ  K!- '   
 # # #j   f  s  L >H HH 	CL H* % L I !L 9I* :L  4J 4J5J 9L H H'#L &H''L *	I3I

IL I'#L &I''L *	J3J

JL J 	LL,4K) K#!K)(L)LLL LL __main__z0.0.0.0i  F)hostportreloadssl_certfilessl_keyfile)r   N)zserver.notify_server:app)Erf   r%   syspathlibr   typingr   __file__resolveparent_ROOTr'   pathinsertfastapir   r   r   pydanticr   r	   aiogramr
   r   aiogram.enumsr   aiogram.client.defaultr   aiogram.filtersr   aiogram.typesr   r   r   r   server.configr   r   r   r   
api.db_apir   r   r   
utils.parsr   r/   tuplerG   rJ   apprA   HTMLrj   rh   r2   rb   on_eventrk   rp   r?   dictrt   postr   rS   uvicornuvicorn_kwargsrunrX   rH   r.   <module>r      s1     
  X ''..u:SXXHHOOAs5z" 3 3 % # # 7 ( ] ] O O K K $3 " #'	-- 3--
 3-../-`
I 
 $%	'i
.
.
0 INN; \ LNW    i/ / j  d   )/[' [d [  [z z N )5~&(3}%GKK=n= rH   