U
    5wic                     @   sZ  U d dl mZmZmZmZmZ d dlmZmZm	Z	m
Z
 d dlZd dlZd dlZd dlZd dlZd dlZd dl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mZ d	Zee d
< dZ!ee d< dZ"e#e d< eG dd dZ$G dd dZ%dd Z&e'edddZ(e'edddZ)e*dddZ+eedf dddZ,eedf ee-df dd d!Z.eedf dd"d#Z/edd$d%Z0edd&d'Z1edd(d)Z2edd*d+d,Z3dAee-df e#eedf d-d.d/Z4eeee$df d0d1d2Z5eeeedf d3d4d5Z6eeee'f d6d7d8Z7ee8d9d:d;Z9ee8d9d<d=Z:e#e*edd>d?d@Z;dS )B    )
JsonObjectJsonObjectValue
JsonString
JsonNumberMessage)TelegramClient	functionstypeserrorsN)UnionOptional)Settings)logger)	dataclassfield)deque1GMAIL_SERVICEz540916392:cVkqKkXSQCOBsbDYTgVTGMAIL_API_KEY   CHUNKc                   @   sJ   e Zd ZU eed< eed< eed< eddZeed< eddZ	eed< dS )	Gmailaddress
request_idissucessr   )defaultusedNcode)
__name__
__module____qualname__str__annotations__boolr   r   intr    r%   r%   */var/www/html/resetter2/utils/functions.pyr      s
   
r   c                   @   sN   e Zd ZU e Zejed< edddddZede	e
d dd	d
ZdS )EmailKeeper_queuer   N)gmailreturnc                    s    |j dk r| j|I d H  d S )N   )r   r(   put)clsr)   r%   r%   r&   	add_gmail"   s    
zEmailKeeper.add_gmail        )timeoutr*   c              	      sV   z2|dkr&t j| j |dI d H }n
| j }W n t jt jfk
rP   Y d S X |S )Nr   r0   )asynciowait_forr(   get
get_nowait
QueueEmptyTimeoutError)r-   r0   r)   r%   r%   r&   get_gmail_async'   s    zEmailKeeper.get_gmail_async)r/   )r   r   r    r2   Queuer(   r"   classmethodr.   floatr   r8   r%   r%   r%   r&   r'      s
   
r'   c                 c   s,   t dt| |D ]}| |||  V  qdS )zList Chunk Generater   N)rangelen)Z
input_list
chunk_sizeir%   r%   r&   chunk_generateO   s    r@   )statusr*   c                 C   s   | rdS dS )Nu   ✅u   ❌r%   rA   r%   r%   r&   convert_to_stickerT   s    rC   c                 C   s   | rdS dS )Nu   🔴️️️️️️ Disableu   🟢️️️️️️ Enabler%   rB   r%   r%   r&   convert_statusX   s    rD   )r*   c                  C   s   t  d} | jdd d | S )Nzsessions/*.sessionc                 S   s   t j| S N)ospathgetmtime)xr%   r%   r&   <lambda>^       zget_sessions.<locals>.<lambda>)key)globsort)sessionsr%   r%   r&   get_sessions\   s    
rP   c               	   C   sb   z<t dddd} dd | D }W 5 Q R X |r8t|nd W S  tk
r\   td Y d S X d S )Nzutils/proxies.txtrutf-8encodingc                 S   s*   g | ]"}|  r|  d s|  qS #strip
startswith.0liner%   r%   r&   
<listcomp>e   s       zget_proxy.<locals>.<listcomp>z8utils/proxies.txt not found. Continuing without proxies.openrandomchoiceFileNotFoundErrorr   warning)fproxiesr%   r%   r&   	get_proxyb   s    
rf   )r\   r*   c                 C   s   | r|  d}zbt|dkr6|\}}d|t|dW S t|dkrhd|d t|d |d |d d	W S W d S W n tk
r   Y d S X d S )
N:r+   socks5)
proxy_typeaddrport   r         )ri   rj   rk   usernamepassword)splitr=   r$   	Exception)r\   partsrj   rk   r%   r%   r&   parse_proxy_linel   s    
&
rt   c               	   C   sb   z<t dddd} dd | D }W 5 Q R X |r8t|nd W S  tk
r\   td Y d S X d S )Nzutils/push_tokens.txtrQ   rR   rS   c                 S   s&   g | ]}|  r|d s|  qS rU   rW   )r[   lr%   r%   r&   r]      s      
 z"get_push_token.<locals>.<listcomp>z utils/push_tokens.txt not found.r^   )rd   tokensr%   r%   r&   get_push_token|   s    
rw   c                   C   s   t ddddgS )NzSDK 31zSDK 32SDK 33zSDK 34r`   ra   r%   r%   r%   r&   get_random_system_version   s    rz   c                   C   s   t dddgS )N11.6.2 (56152)z12.0.1 (6166)z12.1.1 (6211)ry   r%   r%   r%   r&   get_random_app_version   s    r|   c               	   C   s`   zDt dddd} dd |  D }W 5 Q R X |r@t| ndW S  tk
rZ   Y dS X d S )Nzutils/device.txtrQ   rR   rS   c                 S   s&   g | ]}|  r|d s|  qS rU   rW   rZ   r%   r%   r&   r]      s      
 z+get_random_device_model.<locals>.<listcomp>zPixel 5)r_   	readlinesr`   ra   rX   rb   )rd   Zdevicesr%   r%   r&   get_random_device_model   s    r~   )clientr*   c              
      s   zbd| j _ttdtt tdtdtdtdtdtdtd	td
tdtdg| j _W n2 tk
r } zt	
d|  W 5 d }~X Y nX d S )NZandroidZdevice_tokendataZ@49C1522548EBACD46CE322B6FD47F6092BB745D0F88082145CAF35E14DCC38E1Z	installerzcom.android.vendingZ
package_idzorg.telegram.messenger.webZ	tz_offsetiZperf_catr+   z5[patch_client] warning: couldn't patch init_request: )_init_request	lang_packr   r   r   rw   r   paramsrr   r   debug)r   er%   r%   r&   patch_client   s    r   )proxyconnect_timeoutr*   c                    s*  zZt t }t|ddddddd| d|d	}t|I d H  tj| |d
I d H  ||fW S  tjk
r   t	
dtj| d z| I d H  W n tk
r   Y nX Y d S  tk
r$ } zRt	
dtj| d|  z| I d H  W n tk
r   Y nX W Y d S d }~X Y nX d S )N   Z eb06d4abfb49dc3eeb1aeb98ae0f581ezsamsungSM-A125Frx   r{   zfr-CAfrr+   )sessionapi_idapi_hashdevice_modelsystem_versionapp_versionsystem_lang_code	lang_coder   connection_retriesr0   r1   z+[create_client] Timeout connecting session z (proxy may be slow).z*[create_client] Error creating client for : )r`   ra   rP   r   r   r2   r3   connectr7   r   errorrF   rG   basename
disconnectrr   )r   r   session_pathtelegramr   r%   r%   r&   create_client_for_session   s@    
r   )api_keyserverr*   c           
         s(  d|  d| }d }zt jddd4 I d H }||I d H }|j}| }|  t|tsbi }|ddkrW 5 Q I d H R  W d S |dd }|d	d }t|||d kr|d krd
nddW  5 Q I d H R  W S Q I d H R X W n@ t	k
r" }	 z t
d| d|	  W Y d S d }	~	X Y nX d S )Nz/https://venusads.ir/api/V1/email/getEmail/?key=z&server=   Fr0   verifyrA      emailZ	requestIDT)r   r   r   zGmail | get gmail error :  | )httpxAsyncClientr4   textjsonraise_for_status
isinstancedictr   rr   r   r   )
r   r   urlcontentr   responseresponse_jsonr   r   r   r%   r%   r&   	get_gmail   s,    
  *r   )r   r   r*   c           	         s   d|  d| }d }zht jddd4 I d H B}||I d H }|j}| }|d}|W  5 Q I d H R  W S Q I d H R X W n> tk
r } z td| d|  W Y d S d }~X Y nX d S )	Nz.https://venusads.ir/api/V1/email/getCode/?key=z&id=r   Fr   r   zGmail | get gmail code error : r   )r   r   r4   r   r   rr   r   r   )	r   r   r   r   r   r   r   Ztelegram_coder   r%   r%   r&   get_gmail_code   s    
(r   )api_urlr*   c                    s   znt jdddd4 I d H F}|| I d H }td|j}|rH|dndW  5 Q I d H R  W S Q I d H R X W n tk
r   Y dS X d S )NT
   F)Zfollow_redirectsr0   r   z(\d{5})rm   )r   r   r4   researchr   grouprr   )r   r   r   matchr%   r%   r&   extract_login_code  s    6r   )accountr*   c                    s	  d }	zRzttd tt }|r<ddd | D nd}t|ddI d H }|d krvtd d	d
| fW W S |\}}d| kr| 	d}n6d| kr| 	d}n"td|   d	d| fW W S t
|dk rtd|   d	d| fW W fS |d |d  }}d }	z||I d H }
W nJ tk
rj } z*td|  d	d| f W Y 
W W S d }~X Y nX td|  td| d td| d tdt|
dd d t|
jtjjrtd|
jj  zX|tjj||
jdI d H }t|jdd }td|  d |r(d!nd"| fW W W "S  tk
r } z*td#|  d	d$| f W Y 
W W S d }~X Y nX nt|
jtjjrtd% |
j}	nt|
jtjjrJtd& z0|tjj||
jdI d H }|j}	td' W nJ tk
rD } z*td(|  d	d)| f W Y 
W W $S d }~X Y nX nt|
jtjjr.td* zxtjdd+I d H }t|tr|jdkrd }|d krtd,D ]`}t t!t"I d H }|d kr|j#r|j$d kr qt| d-| d. t%&dI d H  qt| d/|  |d krNt| d0 d	d1| fW W W S |tj'j(tj)||
jd|j$d2I d H }t| d3|  d }td,D ]}t*t!|j+I d H }t|t,rt| d/|j$ d4|  ||j-kr||_-|} q"t| d/|j$ d5| d. t%&d6I d H  qt| d/|j$ d7|  |d krlt| d8 d	d9| fW W W S |tj'j.tj)||
jdtj/|d:d;I d H }t| d<|j$ d/|  | jd7  _t0| t%&d=I d H  W nJ tk
r* } z*td>|  d	d1| f W Y 
W W >S d }~X Y nX n(td?t|
j  d	d1| fW W S d }td,D ]H}td@|d  dA t%&d6I d H  t1|dBI d H }|rb qqb|stdC d	dD| fW W S tdE| d z |j2|t3||	dFI d H }
W  n t4j5j6k
r   tdG z:|tj'j7dHdII d H  tdJ d dK| fW  Y W W  S  tk
r } z.tdL|  d	d"| f W Y  Y W W S d }~X Y nX Y nJ tk
r } z*tdM|  d	d"| f W Y 
W W rS d }~X Y nX zBt8j9:|r(t8;|dN| dO tdP nt<dQ|  W n4 tk
rn } ztdR|  W 5 d }~X Y nX d dS| fW W S  t4j5j=k
r   tdT d	dU| f Y W S  t4j5j>k
r   tdV d	dW| f Y W |S  t4j5j?k
	r   tdX d	dY| f Y W LS  tk
	rT } z&tdZ|  d	d
| f W Y W S d }~X Y nX W 5 |	rz|  I d H  W n   Y nX X d S )[Nz0------------------------------------------------rg   c                 s   s   | ]}t |V  qd S rE   )r!   r[   vr%   r%   r&   	<genexpr>  s     z _reset_number.<locals>.<genexpr>zno-proxy<   )r   r   z1[reset_number] Error in create_client_for_sessionFunknow|-z'[reset_number] Invalid account format: zinvalid-account-formatr+   z([reset_number] Account data incomplete: r   rm   z,[reset_number] Failed to send code request: zunsuccess-send-codez<green>[+]</green> Proxy: z)<green>[+]</green> Phone number: <yellow>z	</yellow>z)<green>[+]</green> Session path: <yellow>z.<green>[+]</green> Code request sent, <yellow>typeunknownz0<green>[+]</green> Email verification required: )phone_numberphone_code_hashreset_pending_datez.<green>[+]</green> Email reset sent. Pending: Tsuccess-reset-emailunsuccess-reset-2faz"<red>[-]</red> Email reset error: unsuccess-reset-emailu9   <green>[+]</green> SentCodeTypeSms → Continue normally.u=   <green>[+]</green> SentCodeTypeApp → Forcing SMS request...z2<green>[+]</green> SMS resend successfully forced.z+<red>[-]</red> Failed to force SMS resend: unsuccess-smsz*<green>[+]</green> SentCode SetUp Email...r1   rn   z | Get Email Retry [z]...r   z% | <red>[-]</red> Failed to get gmailunsuccess-setup-email)purposer   z$ | Send Verify Email Code Request : z | received code z | Get Email Code retry [r   z | gmail code z* | <red>[-]</red> Failed to get gmail codeunsuccess-email-code)r   )r   verificationz | gmail setup g?z&<red>[-]</red> Failed to setup gmail: z%<red>[-]</red> Unknown SentCodeType: z9<green>[+]</green> Waiting 10s for verification code... (z/3))r   z5<red>[-]</red> Verification code not found after 30s.not-found-verifaction-codez7<green>[+]</green> Received verification code: <yellow>)phoner   r   u7   <green>[+]</green> 2FA enabled → resetting account...ZF79CdnW0eyrcZvQ2)reasonz-<green>[+]</green> Account reset successfullysuccess-reset-2faz <red>[-]</red> 2FA reset error: z<red>[-]</red> Sign in error: zlogin_sessions/.sessionz3<green>[+]</green> Session moved to login_sessions/z+<yellow>[!]</yellow> Session file missing: z&<red>[-]</red> Session moving failed: loginz<red>[-]</red> Banned number.bannedz<red>[-]</red> Flood error.floodedz<red>[-]</red> Invalid number.zinvalid-numberz#[reset_number] Unexpected error -> )@r   r   infort   rf   joinvaluesr   r   rq   r=   send_code_requestrr   getattrr   r   r	   authSentCodeTypeEmailCodeemail_patternr   ResetLoginEmailRequestr   SentCodeTypeSmsSentCodeTypeAppResendCodeRequestSentCodeTypeSetUpEmailRequiredr'   r8   r   r   r<   r   r   r   r   r   r2   sleepr   SendVerifyEmailCodeRequestEmailVerifyPurposeLoginSetupr   r   r!   r   VerifyEmailRequestEmailVerificationCoder.   r   sign_inr$   r
   rpcerrorlistSessionPasswordNeededErrorDeleteAccountRequestrF   rG   existsreplacerc   PhoneNumberBannedErrorPhoneNumberFloodErrorPhoneNumberInvalidError)r   r   r   
proxy_infoZclient_resultr   rs   r   r   Zverification_hashr   Z
send_errorZreset_responsependingZemail_errorZresendZresend_errorr)   ZretrysZsent_code_mailr   Zres_codeZverify_emailZverifaction_codeattemptZpw_errorZ
sign_errorZ
move_errorr   r%   r%   r&   _reset_number  sd   

 
(	
,



,










*



0("


(r   c                    sD   zt jt| ddI d H }|W S  t jk
r>   dd| f Y S X d S )Nx   r1   Fr   )r2   r3   r   r7   )r   resr%   r%   r&   reset_number  s
    r   )user_idaccountsprocess_messager*   c                    s  zg g g g g g g g g g g g d}t |t}|D ]}tjdd |D  }|I d H  t|  | D ]R}|d }ddddd	d
ddddddd}	|	|d |d f}
|
rh||
 | qhzFt	dd |
 D }|dt| d| dt| dI d H  W q0   Y q0X q0z4|dt| dt| dt| dI d H  W n   Y nX t|d dkr*d}td|  dd}tj|r t|D ]}tj||}|drtj|r|j||d zt| W n: tk
r } ztd | d!|  W 5 d }~X Y nX qW 5 Q R X | D ]X\}
}t||
 dkr2td|  d"|
 d#dd$d%}|d&||
  W 5 Q R X q2W n4 tk
r } ztd'|  W 5 d }~X Y nX d S )(N)r   r   r   r   r   r   r   r   r   r   r   r   c                 s   s   | ]}t |V  qd S rE   )r   )r[   rI   r%   r%   r&   r   1  s     z reset_numbers.<locals>.<genexpr>r+   r   r   r   r   r   r   r   r   r   r   r   r   ))r   T)r   F)r   F)r   T)r   F)r   T)r   F)r   F)r   F)r   F)r   F)r   Frm   r   c                 s   s   | ]}t |V  qd S rE   )r=   r   r%   r%   r&   r   N  s     u>   <b>✅ File analyzed, resetting ...

• Total Numbers: <code>u   </code>
• Processed: <code>/z</code></b>u:   <b>✅ File analyzed, Finished!

• Total Numbers: <code>Zlogin_sessions(z)-(sessions).zipwr   )ZarcnamezError removing session file r   z)-(z).txtrR   rS   
z+[reset_numbers] Error resetting numbers -> )r@   r   r2   gatherr   r   resultr4   appendsumr   editr=   zipfileZipFilerF   rG   r   listdirr   endswithisfilewriteremoverr   r   itemsr_   	exception)r   r   r   rA   Zchunked_accountschunkedtasksr   r   Zstatus_key_maprL   Z
total_doneZsessions_folderZzipffnameZfpathr   rd   r   r%   r%   r&   reset_numbers!  s         


046&r  )r   )<Ztelethon.tl.typesr   r   r   r   r   telethonr   r   r	   r
   r  r2   r`   r   rM   r   rF   typingr   r   utils.databaser   Zutils.loggerr   Zdataclassesr   r   collectionsr   r   r!   r"   r   r   r$   r   r'   r@   r#   rC   rD   listrP   rf   r   rt   rw   rz   r|   r~   r   r   r   r   r   tupler   r   r  r%   r%   r%   r&   <module>   sP    0
 
	$,	  