
    [d^iŮ              
          d Z ddlmZmZmZ ddlmZ ddlmZ ddl	m
Z
 ddlmZ ddlZddlmZ dd	lmZmZ dd
lmZ ddlmZ ddlmZmZ ddlZddlZ	 ddlmZ dZ ej>                  e       Z! e       Z" G d de
      Z# G d de
      Z$ G d de
      Z% G d de
      Z&e"jO                  de$       ee       ee      fde#dedefd       Z(e"jS                  de*e$          ee       ee      fdedefd       Z+e"jS                  de$       ee       ee      fd e,dedefd!       Z-e"j]                  de$       ee       ee      fd e,de%dedefd"       Z/e"jO                  d#      d ee       ee      fd e,de&dz  dedefd$       Z0e"jc                  d       ee       ee      fd e,dedefd%       Z2y# e$ r dZY ow xY w)&uQ   
API endpoints для управления MTProto аккаунтами Telegram
    )	APIRouterDependsHTTPException)Session)and_)	BaseModel)datetimeN)get_db)UserTelegramMtprotoAccount)get_current_user)encrypt_token)get_telegram_clientclose_telegram_clientClientTFc                   D    e Zd ZU eed<   eed<   eed<   eed<   dZeed<   y)MtprotoAccountCreatenamephoneapi_idapi_hashF
is_defaultN)__name__
__module____qualname__str__annotations__intr   bool     K/Users/talgatiskakov/sites/serviceNotifications/app/api/telegram_mtproto.pyr   r      s     
IJKMJr"   r   c                       e Zd ZU eed<   eed<   eed<   eed<   edz  ed<   eed<   eed<   eed	<   eed
<    G d d      Zy)MtprotoAccountOutid	tenant_idr   r   Nusernamestatusr   
created_at
updated_atc                       e Zd ZdZy)MtprotoAccountOut.ConfigTN)r   r   r   from_attributesr!   r"   r#   Configr-   2   s    r"   r/   )	r   r   r   r   r   r   r    r	   r/   r!   r"   r#   r%   r%   '   sA    GN
IJDjK r"   r%   c                   J    e Zd ZU dZedz  ed<   dZedz  ed<   dZedz  ed<   y)MtprotoAccountUpdateNr   r   r)   )	r   r   r   r   r   r   r   r    r)   r!   r"   r#   r1   r1   6   s,    D#*"Jt"FC$Jr"   r1   c                   "    e Zd ZU dZedz  ed<   y)AuthCodeRequestNcode)r   r   r   r4   r   r   r!   r"   r#   r3   r3   <   s    D#*r"   r3   z/mtproto/accounts)response_modeldatacurrent_userdbc           	      |  K   t         s"t        j                  d       t        dd      | j                  j                  d      st        dd      | j                  rP|j                  t              j                  t        j                  |j                  k(        j                  dd	i       t        | j                        }t        |j                  | j                  | j                  | j                  || j                  d
      }|j!                  |       |j#                          |j%                  |       |S w)u0   Создать новый MTProto аккаунтux   Pyrogram не установлен, но пользователь пытается создать MTProto аккаунт  ui   Функция MTProto временно недоступна. Обратитесь в поддержку.status_codedetail+  u   Номер телефона должен быть в международном формате с + (например, +79991234567)r   Fpending_auth)r'   r   r   r   api_hash_encr   r)   )PYROGRAM_AVAILABLEloggerwarningr   r   
startswithr   queryr   filterr'   updater   r   r   r   addcommitrefresh)r6   r7   r8   rA   accounts        r#   create_mtproto_accountrM   @   s       R  	S~
 	
 ::  % Z
 	
 
'(//",,0F0FF	

&,&
' !/L %((YYjj{{!??G FF7OIIKJJwNs   D:D<c                    K   |j                  t              j                  t        j                  | j                  k(        j	                         }|S w)uG   Получить список MTProto аккаунтов тенанта)rF   r   rG   r'   all)r7   r8   accountss      r#   list_mtproto_accountsrQ   s   sG      xx./66((L,B,BB	ce  Os   AAz/mtproto/accounts/{account_id}
account_idc                    K   |j                  t              j                  t        j                  | k(  t        j                  |j                  k(        j                         }|st        dd      |S w)uA   Получить информацию о MTProto аккаунте  (   MTProto аккаунт не найденr;   )rF   r   rG   r&   r'   firstr   )rR   r7   r8   rL   s       r#   get_mtproto_accountrW      sh      hh-.55!!Z/((L,B,BB eg 
 4^__Ns   A1A3c                   K   |j                  t              j                  t        j                  | k(  t        j                  |j                  k(        j                         }|st        dd      |j                  |j                  |_        |j                  |j                  rk|j                  t              j                  t        t        j                  |j                  k(  t        j                  | k7              j                  ddi       |j                  |_        |j                  |j                  |_        t        j                         |_        |j                          |j!                  |       |S w)u'   Обновить MTProto аккаунтrT   rU   r;   r   F)rF   r   rG   r&   r'   rV   r   r   r   r   rH   r)   r	   utcnowr+   rJ   rK   )rR   r6   r7   r8   rL   s        r#   update_mtproto_accountrZ      s(     hh-.55!!Z/((L,B,BB eg 
 4^__ yyyy"??HH+,33*448N8NN*--;
 flE*+!__{{!*GIIKJJwNs   E9E;z#/mtproto/accounts/{account_id}/authc           
      *  K   |r2|j                   r&|j                   j                         r|j                   nd }	 ddlm} dd l}ddlm} |j                  t              j                  t        j                  | k(  t        j                  |j                  k(        j                         j                         }|st        dd      	  ||j                        }	|	st        dd       |       }
|j                   j#                  |j%                         |
j&                        }|j)                  |d	
       d|  }t*        s"t,        j/                  d       t        dd      ddlm} t,        j5                  d       t,        j5                  d|j6                          t,        j5                  d|j8                          t,        j5                  d|	d d  d       t,        j5                  d|        t,        j5                  d|         |||j8                  |	|j6                  |      }t,        j5                  d|j6                   d|        	 |j                   j#                  || d      }|j                   j;                  |      }|r	 |j=                          d {    |j?                          d {   }d|_         |r|jB                  nd |_!        tE        jF                         |_$        |jK                          |jM                          d {    d	d|r|jB                  nd dS |st,        j5                  d |  d!|j6                   d"tE        jF                         jU                          d#       t,        j5                  d$|jV                  r|jV                  d d% nd& d'       d(}|jV                  |k(  r6t,        jQ                  d)|  d*       |jY                          t        d+d,      |jV                  r4|jV                  j[                  d-      r	 |jV                  j]                  d-d.      }t_        j`                  |jc                  d/            je                  d/      }tg        jh                  |      }|jk                  d0d      }tE        jF                         jm                         |z
  }|d1k  rVt,        jQ                  d2|  d3|d4d5       |jY                          t        d+d6to        |       d7to        d1|z
         d8      t,        j5                  d9|d4d:|d;z  d4d<       t,        j5                  d?|  d@       ||_+        |jq                          t,        j5                  dA|         	 t,        j5                  dB|j6                   dC|  dD       t,        j5                  d|j8                          t,        j5                  d|	d d  d       t,        j5                  dE|j6                          |js                          d {    t,        j5                  dF       t,        j5                  dG       t,        j5                  dH|j6                   dI|         t,        j5                  dJ|j8                          t,        j5                  dK       |jV                  }|r|j[                  d-      rt,        jQ                  dL|  dM       	 |j]                  d-d.      }t_        j`                  |jc                  d/            je                  d/      }tg        jh                  |      }|jk                  dN      r|jk                  dNd.      d dO nd&}t,        jQ                  dP| dQ       dRtt        dStt        fdT}t,        j5                  dU ||j6                         dC|  dD       	 |jw                  |j6                         d {   } t,        j5                  dVty        |               | s1t,        j/                  dW|j6                   dC|  dD       tO        dX      t,        j5                  dYt{        |               	 t,        j5                  dZt}        | d[d\              | j~                  }!|!s1t,        j/                  d]|j6                   dC|  dD       tO        d^      t}        | d_d       }"t}        | d`d       }#t}        | dad       }$t,        j5                  db|"        t,        j5                  dc|#        t,        j5                  dd|$        tE        jF                         jm                         }%tE        jF                         jU                         }&t,        j5                  de       t,        j5                  dH ||j6                         dI|         t,        j5                  df|&        t,        j5                  dg|" dh|#        t,        j5                  di|!r|!d dj nd&        t,        j5                  dk|!        t,        jQ                  dl ||j6                                t,        jQ                  dm ||j6                         dn       |!|%|%drz   ds}tg        j                  |      }t_        j                  |jc                  d/            je                  d/      }d-| |_+        |jK                          t,        j5                  dt|%        t,        j5                  du       	 |j                          d {    dvdw|j6                   dxd	dyS 	 d }1|jV                  r|jV                  j[                  d-      r	 |jV                  j]                  d-d.      }t_        j`                  |jc                  d/            je                  d/      }tg        jh                  |      }|jk                  dN      }1|jk                  d0d      }|jk                  d|drz         }2tE        jF                         jm                         }3|3|z
  }|2|3z
  }4|dkD  r#tE        j                  |      jU                         nd}&tE        jF                         jU                         }5t,        j5                  d       t,        j5                  dH|j6                   dI|         t,        j5                  d|5        t,        j5                  d|& d| dD       t,        j5                  d|d4d|d;z  dd       t,        j5                  d|4d4d       t,        j5                  di|1r|1d dj nd&        t,        j5                  dk|1        |1s%t,        jQ                  d|         t        dd      |3|2kD  rNt,        jQ                  d|  d|d4dt        |4      d4d       d |_+        |jK                          t        dd      |drkD  rHt,        jQ                  d|  d{|d4d|d;z  d4d       d |_+        |jK                          t        dd      nt        dd      |1st        dd      |js                          d {    	 tu        |      j                         }7t,        j5                  d       t,        j5                  dt        |7       dt        |7      dk\  r|7d d n|7 dD       t,        j5                  di|1r|1d dj nd&        t,        j5                  dk|1        t,        j5                  d|d4d:|d;z  dd       |j                  |j6                  |1|7       d {   }8t,        j5                  d       |j?                          d {   }d|_         |r|jB                  nd |_!        d |_+        tE        jF                         |_$        |jK                          |j                          d {    d	d|r|jB                  nd dS 7 (7 7 # tN        $ r=}t,        jQ                  d|        	 |jS                  |       n#  Y nxY wY d }~d }~ww xY w# t        $ r  tN        $ r&}t,        jQ                  d=|  d>|        Y d }~d }~ww xY w7 
=#  Y xY w7 #  Y xY w# tN        $ r6}'t,        j/                  do ||j6                         dC|  dp|' d	q        d }'~'ww xY w7 #  Y xY w# tN        $ r`}(t,        j/                  dz|  d{|(        d |_+        |jY                          t,        j5                  d||         	 |j                          d {  7   n#  Y nxY wtu        |(      })t,        j/                  d}|j6                   d{|( d	q       d~|)j                         v sd|)j                         v rdd lE}*|*j                  d|)      }+|+rto        |+j                  d            nd},|,d;z  }-|-d;z  }.|.dkD  r|-d;z  dkD  r|. d|-d;z   d}/n|. d}/n|-dkD  r|- d}/n|, d}/d|/ d}0t        d+|0      t        ddtu        |(             d }(~(ww xY w# t        $ r  tN        $ r,}6t,        j/                  d|6 d	q       t        dd      d }6~6ww xY w7 ,7 K# tN        $ r}9tu        |9      })|)j                         }:t,        j/                  d       t,        j/                  d|)        t,        j/                  dt        7      dk\  r|7d d n|7 dt        |7       dD       t,        j/                  di|1r|1d dj nd&        t,        j/                  dk|1        t,        j/                  d|d4d:|d;z  dd       	 |j                          d {  7   n#  Y nxY wd|:v sd|:v r"d |_+        |jK                          dvdd	dcY d }9~9S d|:v sd|:v rEt,        jQ                  d|d4d|d;z  dd       d |_+        |jK                          t        dd      d |_+        |jK                           d }9~9ww xY w7 7 [# t        $ r  tN        $ rW};	 |j                          d {  7   n#  Y nxY wd |_+        |jK                          t        ddtu        |;             d };~;ww xY w# t        $ r  tN        $ r]}<	 |j                          d {  7   n#  Y nxY wt,        j/                  d|  d{|< d	q       t        ddtu        |<             d }<~<ww xY w# t        $ r  tN        $ rm}<d|_         tE        jF                         |_$        |jK                          tu        |<      }=t,        j/                  d|  d{|= d	q       t        dd|=       d }<~<ww xY ww)Nr   )decrypt_tokenget_settingsrT   rU   r;   i  u5   Не удалось расшифровать API hashT)exist_okmtproto_uW   Pyrogram не установлен. Установите: pip install pyrogram tgcryptor:   u_   Сервис временно недоступен. Обратитесь в поддержку.r   u(   [AUTH] Создание Pyrogram Client:u   [AUTH] - Телефон: z[AUTH] - api_id: z[AUTH] - api_hash: 
   u&   ... (первые 10 символов)z[AUTH] - session_name: z[AUTH] - workdir: )r   r   r   phone_numberworkdiru1   [AUTH] Client создан успешно для z, session_name=.sessionactiveu4   Аккаунт успешно авторизован)successmessager(   uW   Сессия невалидна, начинаем авторизацию заново: u;   [AUTH] ===== ЗАПРОС КОДА ДЛЯ АККАУНТА u    (телефон: u   ) в z =====u$   [AUTH] Текущий session_path: d   Nonez...processing_auth_requestuE   [AUTH] ===== БЛОКИРОВКА ДУБЛИКАТА: Аккаунт uj    уже обрабатывается другим запросом - session_path == processing_flag =====i  up   Запрос на авторизацию уже обрабатывается. Подождите немного.
temp_auth_ zutf-8r*   x   u   [AUTH] БЛОКИРОВКА ДУБЛИКАТА: Попытка запросить код повторно слишком быстро для аккаунта u    (прошло z.1fuB    секунд, требуется минимум 120 секунд)u<   Код был запрошен недавно (прошло u#    секунд). Подождите u=    секунд перед повторным запросом.u;   [AUTH] Предыдущий код был запрошен u    секунд назад (<   u8    минут), разрешаем новый запросu[   [AUTH] Не удалось декодировать temp_auth_data для аккаунта u   , очищаем: uN   [AUTH] Устанавливаем флаг processing для аккаунта u^    в транзакции с блокировкой (БЛОКИРОВКА ДУБЛИКАТОВ)u   [AUTH] Флаг processing установлен, блокировка with_for_update() активна. Второй запрос будет ждать блокировки. Аккаунт u5   [AUTH] Подключение к Telegram API для u    (аккаунт )z[AUTH] - phone: uO   [AUTH] Подключение к Telegram API выполнено успешноu'   [AUTH] ===== ВЫЗОВ send_code =====u   [AUTH] Телефон: u   , Аккаунт ID: z[AUTH] api_id: un   [AUTH] БЛОКИРОВКА with_for_update() АКТИВНА - второй запрос будет ждатьut   [AUTH] ПЕРЕЗАПИСЬ: Старый phone_code_hash будет перезаписан для аккаунта u<    - предыдущий код стал невалиднымphone_code_hash   u7   [AUTH] Старый phone_code_hash (первые 20): uE   ... - будет невалиден после нового send_codepreturnc                 f    | sydj                  d | D              }t        |      dk  ry|d d  dS )Nunknownrl   c              3   B   K   | ]  }|j                         s|  y w)N)isdigit).0chs     r#   	<genexpr>zDauthenticate_mtproto_account.<locals>._mask_phone.<locals>.<genexpr>  s     (H2::<(Hs      z***z****)joinlen)rr   digitss     r#   _mask_phonez1authenticate_mtproto_account.<locals>._mask_phone|  s>     #,!#(Ha(H!Hv;!+#("("+d33r"   u,   [AUTH] Вызов client.send_code() для u9   [AUTH] send_code() вернул результат: type=u,   [AUTH] send_code() вернул None для u   send_code() вернул Noneu#   [AUTH] Атрибуты sent_code: z[AUTH] sent_code.__dict__: __dict__zN/AuQ   [AUTH] send_code() вернул результат без phone_code_hash для uB   send_code() вернул результат без phone_code_hashtype	next_typetimeoutu   [AUTH] Тип кода: u.   [AUTH] Следующий тип (next_type): z[AUTH] Timeout: u8   [AUTH] ===== КОД ОТПРАВЛЕН В TELEGRAM =====u$   [AUTH] Время отправки: u)   [AUTH] Тип отправки кода: z, next_type: u;   [AUTH] phone_code_hash (первые 40 символов): (   u'   [AUTH] phone_code_hash (полный): ux   [AUTH] ⚠️ ВАЖНО: Код должен прийти В ПРИЛОЖЕНИЕ TELEGRAM (не SMS!) на номер u   [AUTH] ⚠️ Если код не приходит, проверьте: 1) Открыто ли приложение Telegram на устройстве с номером uh   , 2) Правильность номера телефона, 3) Правильность api_id/api_hashu;   [AUTH] Ошибка при вызове send_code() для z): )exc_infoi  )rp   r*   
expires_atu<   [AUTH] phone_code_hash сохранен в БД, timestamp: u?   [AUTH] Commit выполнен, блокировка снятаFuM   Код авторизации отправлен в Telegram на номер uv   . Проверьте приложение Telegram (не SMS) и введите код в модальном окне.)rf   rg   requires_codeuF   [AUTH] Ошибка отправки кода для аккаунта z: u}   [AUTH] Транзакция откачена из-за ошибки, блокировка снята для аккаунта u.   Ошибка отправки кода для 
FLOOD_WAITfloodz(\d+)   u    ч. u    мин.u    ч.u    сек.u   Telegram временно заблокировал отправку кодов из-за частых запросов. Подождите u$    и попробуйте снова.r?   u(   Ошибка отправки кода: r   u   неизвестноu6   [AUTH] ===== ПОДТВЕРЖДЕНИЕ КОДА =====u"   [AUTH] Текущее время: u%   [AUTH] phone_code_hash создан: z (timestamp: u$   [AUTH] Прошло времени: u    секунд (z.2fu    минут)u1   [AUTH] Осталось до истечения: u    секундuS   [AUTH] phone_code_hash не найден в temp_auth_data для аккаунта uo   Сессия авторизации повреждена. Нажмите 'Авторизовать' снова.u:   [AUTH] phone_code_hash истек для аккаунта u   : создан u?    секунд назад, срок действия истек u    секунд назадu   Код авторизации истек. Нажмите 'Авторизовать' для получения нового кода.uK   [AUTH] phone_code_hash слишком старый для аккаунта u8   Ошибка декодирования temp_auth_data: u   Сессия авторизации не найдена. Нажмите 'Авторизовать' снова для получения нового кода.u%   [AUTH] ===== ВЫЗОВ sign_in =====u   [AUTH] Код (длина: u   , первые 2 цифры:    u$   [AUTH] phone_code_hash создан u.   [AUTH] sign_in успешно выполненu'   [AUTH] ===== ОШИБКА sign_in =====u   [AUTH] Ошибка: u   [AUTH] Код: u   ... (длина: password2fau   Требуется пароль двухфакторной аутентификации (2FA). Введите пароль от аккаунта Telegram.)rf   rg   requires_passwordphone_code_expiredexpiredu<   [AUTH] Код истек (PHONE_CODE_EXPIRED). Прошло u?    минут) с момента создания phone_code_hashuI  Код авторизации истек. Это может произойти если: 1) прошло слишком много времени с момента получения кода, 2) был запрошен новый код. Нажмите 'Авторизовать' для получения нового кода.u0   Неверный код авторизации: u=   Ошибка авторизации MTProto аккаунта u%   Ошибка авторизации: error)Lr4   stripapp.utils.encryptionr\   osapp.core.configr^   rF   r   rG   r&   r'   with_for_updaterV   r   rA   pathr}   getcwdTELEGRAM_SESSION_PATHmakedirsrB   rC   r   pyrogramr   infor   r   existsstartget_mer)   r(   r	   rY   r+   rJ   stop	ExceptionrD   remove	isoformatsession_pathrollbackrE   replacebase64	b64decodeencodedecodejsonloadsget	timestampr   flushconnectr   	send_coder   dirgetattrrp   dumps	b64encode
disconnectupperlowerresearchgrouputcfromtimestampabsr~   sign_in)>rR   r6   r7   r8   	auth_coder\   r   r^   rL   r   settingssession_base_pathsession_namer   clientsession_file_pathsession_existsmestart_errorprocessing_flagencoded_datajson_strtemp_auth_datar*   time_passed
decode_errold_session_pathold_encodedold_jsonold_dataold_hashr   	sent_codenew_phone_code_hash	code_typer   r   created_timestampcreated_isosend_code_error
send_error	error_strr   
wait_matchwait_secondswait_minutes
wait_hours	wait_timewait_msgrp   r   current_timetime_until_expirycurrent_isodecode_errorcode_str	signed_in
sign_errorerror_str_lowersign_in_errore	error_msgs>                                                                 r#   authenticate_mtproto_accountr      s     "diiDIIOO4E		4I
 3, hh-.55!!Z/((L,B,BB o 
 4^__e
 !5!56C8opp  >GGLLh6T6TU
%5 "*. "LLrsx 
 	$ 	>@/?@''789)(3B-8^_`-l^<=():(;<=>> %
 	GVefrestui	 !#-><.PX@Y ZWW^^,=>N ,,.((%}}.B%-GN68r{{dG$)1):G&IIK ++-'' $(#Y35BKK4  YZdYeewx  yF  yF  xG  GL  MU  M\  M\  M^  Mh  Mh  Mj  Lk  kq  r  sBahauau7CWCWX\Y\C]  |B  CC  CF  G  H #<''?:NN%jkujv  wa  $b  cKKM'$'  R  ''G,@,@,K,KL,Yq'.';';'C'CLRT'U#)#3#3L4G4G4P#Q#X#XY`#a)-H)=%3%7%7a%H
&.oo&7&A&A&Cj&P ',"NN  .L  MW  LX  Xg  hs  tw  gx  xz  ,{  |KKM"/,/)efijufvew  x[  \_  `c  fq  `q  \r  [s  sp  (q# 
 &abmnqar  sM  NY  Z\  N\  ]`  Ma  aY  %Z  [ lmwlx  yW  X  Y'6$

   \  ]g  \h  i  jc
 KK"WX_XeXeWffw  yC  xD  DE  !F  GKK"3GNN3C DEKK"5hsm_Dj klKK"27==/ BC ..***KK"qsKK"IKKK"9'--H]^h]i jkKK/'..1A BCKK  #Q  S (/';';$',<,G,G,U  *^  _i  ^j  jf  (g  h!*:*B*B<QS*TK'-'7'78J8J78S'T'['[\c'dH'+zz(';HS[S_S_`qSrx||4Er'J3B'Ox~H"NN-demdn  ot  ,u  v4s 4s 4 KK"NP[\c\i\iPjNll}  I  ~J  JK  !L  M-*0*:*:7==*I$I	&_`den`o_p$qr  )"LL+WX_XeXeWffw  yC  xD  DE  *F  G"+,K"LL &I#i.IY$Z[!"KK*EgiYcejFkEl(mn /8.G.G+2"LL+|  ~E  ~K  ~K  }L  L]  ^h  ]i  ij  *k  l"+,p"qq %,Ivt$D	$+I{D$I	"))Y"E&>yk$JK&TU^T_$`a&6wi$@A,4OO,=,G,G,I)&.oo&7&A&A&C &^`&={7==?Y=[[pq{p|$}~&J;-$XY&OPY{Zghqgr$st&a  Rbuvywybz  X^  b_  %`  a&MNaMb$cd  *b  do  pw  p}  p}  d~  b@  (A  B  *T  Va  bi  bo  bo  Vp  Tr  rZ  ([  \ ,?&7&7#&=&N  $zz.9H#)#3#3HOOG4L#M#T#TU\#]L-7~+FG(
 IIKKK"^_p^q rsKK"ac$//111
 $)%rsz  tA  tA  sB  Bx  $y)- h` '+O++0D0D0O0OP\0];+2+?+?+G+GVX+YL'-'7'78K8KG8T'U'\'\]d'eH-1ZZ-AN.<.@.@AR.SO)7););L!)LJ)7););L*WZJZ)[J+3??+<+F+F+HL +7*CK0:\0I-_ilm_m(*C*CJ*O*Y*Y*[  tJK*2//*;*E*E*GK"KK*`b"KK*A'--Pefpeq(rs"KK*L[M(Z["KK*OP[}\ijtiuuv(wx"KK*N{[^N__noz{}o}  B  oC  CO  )P  Q"KK*[\mnq[rr  )A  B"KK*e  Nfuvywyfz  TZ  f[  )\  ]"KK*QRaQb(cd#2 &  2E  FP  EQ  0R  !S&303 ,]'" !"  ,j8 &1klvkw  xG  HS  TW  GX  XW  X[  \m  Xn  or  Ws  sK  0L  !M7; 4 "		&303 ,r'" !"  +S0 &1|  ~H  }I  IK  LW  X[  K\  \k  lw  xz  lz  {~  k  K  0L  !M7; 4 "		&303 ,r'" !"	  1" ,(+ $D 
 ++(+ $D 
 !..***
-"#&y>#7#7#9&KM&A#h-Pm  B  CK  L  PQ  Qnvwyxynz  W_  n`  `a  %b  c&a  {Jbqrusubv  PV  bW  %X  Y&MoM^$_`&J;WZJ[[u  wB  CE  wE  FI  vJ  JV  %W  X*0..Ya*b$b	&TVN  &}}.B%-GN68r{{dG$+/G()1):G&IIK !++--- $(#Y35BKK4 A ).
 ( ! NN%|  ~I  }J  $K  L		"34Z ) $ q  *E  FP  EQ  Qc  dn  co  (p  q  qq2 +$!  %J! : % 'bdopwp}p}d~  cA  AR  S]  R^  ^a  bq  ar  &s  ~B  C4 2 ! ,LL#ijtiuuw  yC  xD  "E  F+/G(KKMKK  #`  ak  `l  !m  n$//111 #JILL#QRYR_R_Q``bcmbn!oz~L $y'88GyGX<X!%'YYx%C
CMs:+;+;A+>'?ST'3r'9%1R%7
 &>+b014/9l%r@Q?RRZ,[	/9l$,?	)A-+7.(AI+7.(AI &q  r{  q|  |`  $a+(+#+ 
 ($'!I#j/IZ[ S,R  - "!( "LL+cdpcq)r  ~BL  C"/,/ (Y# $ + %c$ #"$'
O	*3//*;'NP'<YK%HIs8}XYGYx|_g6hhyz}  G  {H  zI  IJ  &K  L'b  |Kcrsvtvcw  QW  cX  &Y  Z'NN_%`a'KKX[K\\v  xC  DF  xF  GJ  wK  KW  &X  Y!"("3"3"555! %8E_<T37G0IIK+0 ,H59$ 
 2_D	UdHd"NN-ijuvyiz  {J  KV  WY  KY  Z]  J^  ^]  ,^  _37G0IIK"/,/ (s#  48G0IIK!G#"L / . %   $//111+/G(IIK'$'!QRUVcRdQef   	 
	'')))LLXYcXddfghfijuyLz>s1vhG 
	   
 %__.
		F	TU_T``bclbmny}~:9+F
 	

s  CAU2FAS0 <AQ>  %& =>A  2AU23C0AQ> $DA@ ;AAQ> BAB= AACAB= !BAA <<AB= 9AA0 AA%A9AA0 #AA( 5G-AA0 "BAB= ;AB5 AB2AB5 AB= &AU2(+AP J;AH* 0AP ?AI+ AP CAI1 #AI.$AI1 =AP APA#AP 4AP5AP AU2   	A@A@8A@
@	A@@
A@@A@@AQ> @A@@AQ> @AA@1AAAAQ> AAAAAQ> AAB= AAA"AAB= A%AA0 A(AA-A*AA0 A0	AB/A91AB*B*AB/B/AB= B2AB5 B5AB:B7AB= B=
AH'CA
AH"DAD,D%AD(D&AD,D+AH"D,AD0D.C4AH"H"AH'H'AQ> H*AI(H<'AI#I#AI(I(AP I.AI1 I1
AP	I;CAPMAM.M'AM*M(AM.M-APM.AM2M0)APNAP	NAP NAU2NA%APPAP	P	AP PAP PAQ;P%AP?P8AP;P9AP?P>AQ6P?AQQ5AQ6Q6AQ;Q;AQ> Q>AS-RAR+R$AR'R%AR+R*AS(R+AR/R-;AS(S(AS-S-AS0 S0AU/TA(AU*U*AU/U/AU2c                 f  K   |j                  t              j                  t        j                  | k(  t        j                  |j                  k(        j                         }|st        dd      t        |        d{    |j                  rqddl	}ddl
m}  |       }|j                  j                  |j                  |j                  dz         }|j                  j                  |      r	 |j!                  |       |j#                  |       |j%                          d	d
dS 7 #  Y ,xY ww)u%   Удалить MTProto аккаунтrT   rU   r;   )rR   Nr   r]   rd   Tu#   MTProto аккаунт удален)rf   rg   )rF   r   rG   r&   r'   rV   r   r   r   r   r   r^   r   r}   r   r   r   deleterJ   )rR   r7   r8   rL   r   r^   r   session_files           r#   delete_mtproto_accountr     s     hh-.55!!Z/((L,B,BB eg 
 4^__  :
666 0>ww||H$B$BGDXDX[eDef77>>,'		,' IIgIIK(MNN# 7s+   A>D1 D(A/D11D* 'D1*D.,D1)3__doc__fastapir   r   r   sqlalchemy.ormr   
sqlalchemyr   pydanticr   r	   loggingapp.db.sessionr
   app.db.modelsr   r   app.api.depsr   r   r   app.services.telegram_mtprotor   r   r   r   r   r   rB   ImportError	getLoggerr   rC   routerr   r%   r1   r3   postrM   r   listrQ   r   rW   putrZ   r   r   r   r!   r"   r#   <module>r     s   6 5 "     ! 6 ) . T   
		8	$	9 	 9 i   1BC !!12&//
// 	/ D/d 5F0GH !12&/


 I
 ,=NO !!12&/ 	 P$ ,=NO !!12&/	&&
& & 		& P&R 23 $( !12&/	@
@

D
 @
 @
 		@
 4@
F /0 !!12&/!O!O!O 	!O 1!OY  s   G GG