
    Vj~)                        d Z ddlmZ ddlZddlZddlZddlmZ ddlm	Z	 ddl
mZmZmZmZmZmZ ddlmZmZmZmZ ddZdd	Zdd
Z G d d      Z e       Zy)ub   Telegram userbot, встроенный в панель: статус, вход по коду, 2FA.    )annotationsN)Optional)TelegramClient)FloodWaitErrorPasswordHashInvalidErrorPhoneCodeExpiredErrorPhoneCodeInvalidErrorPhoneNumberInvalidErrorSessionPasswordNeededError)API_HASHAPI_IDSESSION_PATHregister_handlersc                   t        j                  ddt        | xs d            }t        |      dk(  r|d   dv rd|dd  z   }t        |      dk(  rd|z   }t        |      dk7  s|j	                  d      st        d	      d
|z   S )N\D    r   )78r      
   u1   Укажите номер в формате +7…+)resubstrlen
startswith
ValueError)rawdigitss     8/var/www/oz-panel.ru/ozpay-pub/server/userbot_service.pynormalize_tg_phoner"      s    VVE2s39"~.F
6{bVAY*4vabz!
6{bv
6{b 1 1# 6LMM<    c                    | sy | j                   | j                  xs d| j                  xs d| j                  xs d| j                  xs ddS )Nr   id
first_name	last_nameusernamephoner%   )mes    r!   _me_payloadr,   "   sH    eemm)r\\'RKK%2R r#   c                   t        | t              rd| j                   dS t        | t              ryt        | t              ryt        | t
              ryt        | t              ryt        |       xs | j                  j                  }d|j                         v s$d|j                         v rd	|j                         v ry
|d d S )Nu)   Telegram просит подождать u    сек.u,   Неверный номер телефонаu   Неверный кодu4   Код устарел, запросите новыйu!   Неверный пароль 2FAzdatabase is lockedlockedsessionuh   Сессия занята. Останови python userbot.py и оставь только панель.   )
isinstancer   secondsr
   r	   r   r   r   	__class____name__lower)exctexts     r!   _friendly_errorr8   .   s    #~&:3;;-xPP#./=#,-(#,-E#/02s8-s}}--Dtzz|+x4::</GIY]YcYcYeLey:r#   c                      e Zd ZddZddZddZddZddZddZddZ	ddZ
dd	Zdd
ZddZddZddZddZdddZy)UserbotRuntimec                    d | _         d| _        d | _        d | _        d | _        d | _        t        j                         | _        d | _	        y )Noffline)
clientstatusr*   phone_code_hashr+   errorasyncioLock_lock	_run_taskselfs    r!   __init__zUserbotRuntime.__init__@   sA    04$(
.2"&$(
\\^
15r#   c                `    | j                   | j                  | j                  | j                  dS )Nr>   r*   r@   r+   rI   rE   s    r!   snapshotzUserbotRuntime.snapshotJ   s(    kkZZZZ''	
 	
r#   c                   K   t         rt        st        d      t        t        t         t              }t        |       |S w)Nu)   Не заданы TG_API_ID / TG_API_HASH)r   r   RuntimeErrorr   r   r   rF   r=   s     r!   _new_clientzUserbotRuntime._new_clientR   s2     XJKKfh?&!s   >A c                  K   | j                   | j                          d {   | _         | j                   j                         s"| j                   j                          d {    t	        | j                          | j                   S 7 f7 'wN)r=   rN   is_connectedconnectr   rE   s    r!   ensure_clientzUserbotRuntime.ensure_clientY   sh     ;; $ 0 0 22DK{{'')++%%'''$++&{{	 3's"    BB	A B#B$&BBc                  K   | j                   4 d {    	 | j                          d {   }|j                          d {   r| j                  |       d {    nd| _        d | _        d | _        d d d       d {    y 7 u7 ^7 H7 1# t        $ r(}d| _        t        |      | _        d | _        Y d }~Ed }~ww xY w7 A# 1 d {  7  sw Y   y xY wwN
logged_outr@   )	rC   rS   is_user_authorized
_go_onliner>   r+   r@   	Exceptionr8   rF   r=   r6   s      r!   bootzUserbotRuntime.boota   s     :: 	 	#113322444//&111".DK"DG!%DJ	 	 	341
  %,S1
	 	 	 	s   CB	CCBBBBBBB8CCCBBB	CB=8C=CCCCCCCc                  K   | j                   4 d {    | j                  }d | _        | j                  #	 | j                  j                          d {    d | _        |r|j                          	 | d {    | j                  dk(  rd| _        d d d       d {    y 7 7 Q# t        $ r Y Zw xY w7 ># t        j                  $ r Y Qw xY w7 3# 1 d {  7  sw Y   y xY ww)Nonliner<   )	rC   rD   r=   
disconnectrY   cancelrA   CancelledErrorr>   )rF   tasks     r!   shutdownzUserbotRuntime.shutdownp   s     :: 	( 	(>>D!DN{{&++00222 DKJJ {{h&'!	( 	( 	(
 3   -- 	( 	( 	( 	(s   C*B%C* CB)B'B)C4B:9B8:B:>CC*C C*'B))	B52C4B55C8B::CCCCC*C'CC'#C*c                   K   | j                   }|y 	 |j                          d {    | j                  dk(  rd| _        y y 7 # t        $ r}t        d|        Y d }~6d }~ww xY ww)Nzuserbot disconnected: r]   r<   )r=   run_until_disconnectedrY   printr>   rZ   s      r!   _keep_alivezUserbotRuntime._keep_alive   so     >	2//111 ;;("#DK # 2 	2*3%011	2s=   A)A AA A)A 	A&A!A)!A&&A)c                    | j                   | j                   j                         r)t        j                  | j	                               | _         y y rP   )rD   donerA   create_taskrf   rE   s    r!   _ensure_run_taskzUserbotRuntime._ensure_run_task   s;    >>!T^^%8%8%:$001A1A1CDDN &;r#   c                  K   t        |       t        |j                          d {         | _        d| _        d | _        d | _        d | _        	 |j                          d {    | j                          y 7 S7 # t        $ r Y  w xY ww)Nr]   )r   r,   get_mer+   r>   r@   r*   r?   catch_uprY   rj   rM   s     r!   rX   zUserbotRuntime._go_online   s     &!FMMO34

#	//### 	 4 $ 		sE   $BA:)BA> $A<%A> )B<A> >	B
B	B

Bc                  K   t        |      }| j                  4 d {    	 | j                          d {   }|j                          d {   r:| j	                  |       d {    | j                         cd d d       d {    S |j                  |       d {   }|| _        |j                  | _        d| _	        d | _
        d | _        | j                         cd d d       d {    S 7 7 7 7 7 t7 \# t        $ r2}d| _	        t        |      | _
        t        | j                        |d }~ww xY w7 O# 1 d {  7  sw Y   y xY ww)Nawaiting_coderV   )r"   rC   rS   rW   rX   rJ   send_code_requestr*   r?   r>   r@   r+   rY   r8   rL   )rF   	phone_rawr*   r=   sentr6   s         r!   request_codezUserbotRuntime.request_code   s/    "9-:: 	# 	#8#113322444//&111==?	# 	# 	# $55e<<"
'+';';$-!

 ==?!	# 	# 	#341		# =  8*,S1
"4::.C78	# 	# 	# 	#s   EC5EEDC7DC9D(C;)D<EC=	ED"C?#1DE#E/D?0E7D9D;D=E?D	D<
-D77D<<E?EEE
EEc                  K   t        j                  ddt        |xs d            }t        |      dk  rt	        d      | j
                  4 d {    | j                  dvrt        d      | j                  st        d      	 | j                          d {   }|j                  | j                  || j                         d {    | j                  |       d {    | j#                         cd d d       d {    S 7 7 p7 B7 +# t        $ r d	| _        d | _        Y Bt        $ r+}t!        |      | _        t        | j                        |d }~ww xY w7 \# 1 d {  7  sw Y   y xY ww)
Nr   r      u#   Введите код из Telegram)ro   awaiting_passwordu(   Сначала запросите кодu   Номер не задан)r*   coder?   rv   )r   r   r   r   r   rC   r>   rL   r*   rS   sign_inr?   rX   r   r@   rY   r8   rJ   )rF   code_rawrw   r=   r6   s        r!   submit_codezUserbotRuntime.submit_code   sQ    vveRX^!45t9q=BCC:: 	# 	#{{"HH"#MNN::"#?@@8#1133nn**$($8$8 %   
 oof--- ==?'	# 	# 	# 4
 .- "1!
 8,S1
"4::.C78!	# 	# 	# 	#s   AE6DE61E!DD
/D	D
D"D#D'E!6E6EE6
DDDE'E!)E1&EEE!E6!E3'E*(E3/E6c                &  K   t        |xs d      }|st        d      | j                  4 d {    | j                  dk7  rt	        d      	 | j                          d {   }|j                  |       d {    | j                  |       d {    | j                         cd d d       d {    S 7 7 Z7 B7 +# t        $ r+}t        |      | _
        t	        | j                        |d }~ww xY w7 D# 1 d {  7  sw Y   y xY ww)Nr   u   Введите пароль 2FArv   u)   Сейчас пароль не нужен)password)r   r   rC   r>   rL   rS   rx   rX   rY   r8   r@   rJ   )rF   r|   r=   r6   s       r!   submit_passwordzUserbotRuntime.submit_password   s     x~2&>??:: 
	# 
	#{{11"#NOO8#1133nnhn777oof--- ==?
	# 
	# 
	# 47- 8,S1
"4::.C78
	# 
	# 
	# 
	#s   -DB;DC<C"B=#C<B?=CCCC<)D5C:6D=C?CC	C7&C22C77C<:D<DDD
Dc                  K   | j                   4 d {    d | _        d | _        d | _        	 | j	                          d {   }|j                          d {   r| j                  |       d {    nd | _        d| _        | j                         cd d d       d {    S 7 7 g7 Q7 :# t        $ r d | _        d| _        Y Bw xY w7 *# 1 d {  7  sw Y   y xY ww)NrV   )rC   r*   r?   r@   rS   rW   rX   r+   r>   rY   rJ   rM   s     r!   cancel_loginzUserbotRuntime.cancel_login   s     :: 	# 	#DJ#'D DJ	+#113322444//&111"DG".DK ==?	# 	# 	#
 441  +*+	# 	# 	# 	#s   C#B'C#CB/B)B/B+B/2B-3B/CC#!C"C#)B/+B/-B//C	CC		CC#C CC C#c                  K   | j                   4 d {    | j                  }d | _        | j                  	 | j                  j                         rE| j                  j	                          d {   r#| j                  j                          d {    n<| j                  j                         r"| j                  j                          d {    d | _        d | _        d | _        d | _        d | _
        d| _        |r|j#                          	 | d {    	 | j)                          d {    | j+                         cd d d       d {    S 7 A7 7 7 # t        j                  $ r+}t        |      | _
        t        | j                        |d }~wt        $ r8 	 | j                  j                          d {  7   n# t        $ r Y nw xY wY w xY w7 # t$        j&                  $ r Y w xY w7 # t        $ r!}d| _        t        |      | _
        Y d }~d }~ww xY w7 # 1 d {  7  sw Y   y xY wwrU   )rC   rD   r=   rQ   rW   log_outr^   sqlite3OperationalErrorr8   r@   rL   rY   r+   r*   r?   r>   r_   rA   r`   rS   rJ   )rF   ra   r6   s      r!   logoutzUserbotRuntime.logout   s    :: "	# "	#>>D!DN{{&{{//1DKK<Z<Z<\6\6\"kk11333113"kk44666 DKDGDJ#'D DJ&DKJJ2((*** ==?E"	# "	# "	#
 7]36// <!0!5DJ&tzz2;  "kk44666$  --  + 2%,S1

2?"	# "	# "	# "	#sE  H>EH> H)7E/E0!EE<EEE<H)GGGG:.G8/G:3H)H>H'H>EEEG0&FG#G GGG	GGGGH)GH)GG52H)4G55H)8G::	H$HH)H$$H)'H>)H;/H20H;7H>c                  K   | j                   }||j                         r| j                  dk7  rt        d      g }|j	                  |      2 3 d {   }|j
                  rd}n|j                  rd}nd}|j                  |j                  |j                  xs dj                         xs t        |j                        |d       |7 w6 |S w)	Nr]   u   Юзербот не в сети)limitusergroupchannelr   )r&   titlekind)r=   rQ   r>   rL   iter_dialogsis_useris_groupappendr&   namestripr   )rF   r   r=   itemsdialogr   s         r!   list_dialogszUserbotRuntime.list_dialogs  s     >!4!4!6$++:Q@AA"//e/< 	 	&~~ LLii +++224FFII 	< s+   ACCCCA4CCCN)returnNone)r   dict)r   r   )r=   r   r   r   )rq   r   r   r   )ry   r   r   r   )r|   r   r   r   )   )r   intr   z
list[dict])r4   
__module____qualname__rG   rJ   rN   rS   r[   rb   rf   rj   rX   rs   rz   r}   r   r   r    r#   r!   r:   r:   ?   sO    6
(&	$E #(#2# #"##Lr#   r:   )r   r   r   r   )r   zOptional[dict])r6   BaseExceptionr   r   )__doc__
__future__r   rA   r   r   typingr   telethonr   telethon.errorsr   r   r   r	   r
   r   server.userbotr   r   r   r   r"   r,   r8   r:   runtimer   r#   r!   <module>r      sS    h "  	   #  M L	"e eP 
r#   