U
    M/i.                     @   s   d dl mZmZmZmZmZ d dl mZ d dlmZm	Z	 d dl
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mZ d dlmZmZmZ d dlmZ G d	d
 d
ZdS )    )
JsonObjectJsonObjectValue
JsonString
JsonNumberMessage)MessageEntityTextUrl)TelegramClienterrors)urlparseparse_qsN)Union)capslover_create_taskwait_for_captchatelegram_check_captcha)loggerc                   @   s   e Zd ZdeeddddZeeeef dddZedd	d
Z	dd Z
edddZedddZddddZd eeedddZedddZd!eedddZdS )"TelegramN)phone_numberproxyreturnc                 C   s   d| _ d| _d| _|| _|  | _d| _d| _d| _| 	d| j d| _
| d	| _td
t| jd | _| jr| j| j }nd }td| j dd| j
dp| j
d| j
dp| j
d| j
d| j
dpd| j
dpd|d	| _d S )Nz?Hey, I think my account is limited mistakenly, please check it.zHey, how are you today bro ?z@d24680jzcom.android.vendingzorg.telegram.messengerivalid_sessions/.jsonzutils/proxies.txtr      Z eb06d4abfb49dc3eeb1aeb98ae0f581e   device_modelZdevicesystem_versionZsdkapp_version	lang_codeZensystem_lang_codezen-US)	ZsessionZapi_hashZapi_idr   r   r   r   r   r   )Ztelegram_spam_messagetelegram_messagetelegram_usernamer   _get_push_token
push_token	installer
package_id	tz_offset
_load_jsonZ	json_data_load_proxies
proxy_listrandomrandintlenproxy_indexr   getclient)selfr   r    r/   $/var/www/html/spam/utils/telegram.py__init__   s2    


zTelegram.__init__)pathr   c              
   C   sp   z2t |ddd}t|W  5 Q R  W S Q R X W n8 tk
rj } ztd|  W Y dS d }~X Y nX d S )Nrutf-8encodingz[-] Telegram._load_json -> F)openjsonload	Exceptionr   error)r.   r2   fr;   r/   r/   r0   r%   5   s    "zTelegram._load_json)r2   c           	   
   C   s   g }t j|std |S t|dJ}|D ]>}| }|s@q.|d\}}}}|d|t	|||d q.W 5 Q R X t
dt| d |S )NzProxy file not found.r3   :socks5)
proxy_typeaddrportusernamepasswordzLoaded z	 proxies.)osr2   existsr   r;   r7   stripsplitappendintinfor*   )	r.   r2   proxiesr<   lineZhostrA   userrC   r/   r/   r0   r&   ?   s&    
zTelegram._load_proxiesc                 C   sb   | j std dS tdt| j d | _| j | j }td|d  d|d   || j_	d	S )
NzNo proxies available to switch.Fr   r   u   Random proxy selected → r@   r=   rA   T)
r'   r   r;   r(   r)   r*   r+   warningr-   _proxy)r.   Z	new_proxyr/   r/   r0   _switch_proxyW   s    
zTelegram._switch_proxy)r   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.txtr3   r4   r5   c                 S   s&   g | ]}|  r|d s|  qS )#)rF   
startswith).0lr/   r/   r0   
<listcomp>i   s      
 z,Telegram._get_push_token.<locals>.<listcomp> z$[-] utils/push_tokens.txt not found.)r7   r(   choiceFileNotFoundErrorr   rN   )r.   r<   Ztokensr/   r/   r0   r    f   s    
zTelegram._get_push_tokenc                    sZ   t jt j  g }tdD ]6}tdd}d fddt|D }|| qd|S )N      
   rV   c                 3   s   | ]}t  V  qd S )N)r(   rW   )rS   _Zallowedr/   r0   	<genexpr>t   s     z(Telegram._random_text.<locals>.<genexpr> )stringZascii_lowercaseZdigitsranger(   r)   joinrH   )r.   Z
text_partsr\   Zpart_lengthpartr/   r]   r0   _random_texto   s    zTelegram._random_textc              
      s   zld| j j_ttdt| jtdtdtdt| jtdt| jtdt	| j
tdt	d	g| j j_W n2 tk
r } ztd
|  W 5 d }~X Y nX d S )NZandroidZdevice_tokendataZ@49C1522548EBACD46CE322B6FD47F6092BB745D0F88082145CAF35E14DCC38E1r"   r#   r$   Zperf_cat   z[-] Telegram._patch_client -> )r-   Z_init_requestZ	lang_packr   r   r   r!   r"   r#   r   r$   Zparamsr:   r   r;   r.   r;   r/   r/   r0   _patch_clientz   s    
zTelegram._patch_clientrZ   rf   )retriesdelayr   c                    s   d}t d|d D ]}zZtd| d| d | j rBW  dS | j I d H  | j rntd W  dS W nF tk
r } z(tdt	|j
 d	|  |d7 }W 5 d }~X Y nX |d
krtd |  s dS d}t|I d H  qtd dS )Nr   r   zAttempt /z connecting...TzConnected successfully.zConnect error: z: rY   u-   3 consecutive failures → switching proxy...Fu+   All attempts failed → connection aborted.)ra   r   rJ   r-   is_connectedZconnectsuccessr:   r;   type__name__rN   rP   asynciosleep)r.   ri   rj   Zfailure_countZattempter/   r/   r0   _connect   s*    




zTelegram._connectc              
      sb   z$| j  r"| j  I d H  W dS W n8 tk
r\ } ztd|  W Y dS d }~X Y nX d S )NTz[-] Telegram._disconnect -> F)r-   rl   Z
disconnectr:   r   r;   rg   r/   r/   r0   _disconnect   s    

zTelegram._disconnectF)send_requestr   c                    s.  zz`|  I d H  |  I d H  z>| j| jI d H }z| jj|| jdI d H  W n tj	j
k
r   td| j d | t| jI d H  td| j d | jj|| jdI d H  Y n tk
rV } zrdt| krBtd| j d | t| jI d H  td| j d | jj|| jdI d H  n|W 5 d }~X Y nX W W W d	S  tj	jk
rb   |sY W W d
S | jjddd4 I d H }|dI d H  | I d H j}d|ksd|krW 5 Q I d H R  Y W W "d	S d|krN|dI d H  | I d H j}d|krN|dI d H  | I d H j}d|krN|dI d H  | I d H }d|jkrNd\}}}t|dg pg D ]P}t|tr|j}tt|j}	|	dd gd }|	dd gd } qq|sW 5 Q I d H R  Y W W d
S t|I d H }
|
sHW 5 Q I d H R  Y W W d
S |
d}|svW 5 Q I d H R  Y W W d
S t|ddI d H }|sW 5 Q I d H R  Y W W rd
S t |||I d H  t!"t#$ddI d H  |d I d H  | I d H j}d!|krN| % }||I d H  | I d H j}d"|krNW 5 Q I d H R  Y W W d	S W 5 Q I d H R X Y nX W n tk
r } zt&d#|  t'j()d$| j* d%rt'+d$| j* d%d&| j* d% t'j()d$| j* d'rt'+d$| j* d'd&| j* d' W Y W d
S d }~X Y nX W 5 |   I d H  X d S )(N)entitymessagez[-] You blocked u    → Unblocking...z[+] z unblocked successfully.Zblockedu"   [-] Block detected → Unblocking z...TFz@SpamBotd   )Ztimeoutz/startzGood news, no limitsu   مژدهzUnfortunately,zThis is a mistakezIf you think the limitationsZYeszGreat! Please confirmzNo! Never did that!zPlease verify you are a human)NNNZentitiesscoper   actorZtaskIdr   rY   ZDoneu   Great! I’m very sorryz:Thank you! Your complaint has been successfully submitted.z[-] Telegram.check_spam -> r   z.sessionzinvalid_sessions/r   ),rt   rh   rs   r-   Z
get_entityr   Zsend_messager   r	   ZrpcerrorlistZUserBlockedErrorr   rN   ZUnblockRequestrm   r:   strlowerZPeerFloodErrorZconversationZget_responserw   getattr
isinstancer   urlr   r
   Zqueryr,   r   r   r   rp   rq   r(   r)   rd   r;   rD   r2   rE   r   rename)r.   ru   rv   rr   Zconvresponser   ry   rz   resultZcreate_taskZtask_idZcaptcha_tokenZrandom_textr;   r/   r/   r0   
check_spam   s    







6 zTelegram.check_spam)N)rZ   rf   )F)ro   
__module____qualname__r{   dictr1   r   boolr%   r&   rP   r    rd   rh   rI   rs   rt   r   r/   r/   r/   r0   r      s   &
	 r   )Ztelethon.tl.typesr   r   r   r   r   r   Ztelethonr   r	   Zurllib.parser
   r   rp   r(   r8   rD   r`   typingr   Zutils.captchar   r   r   utils.loggerr   r   r/   r/   r/   r0   <module>   s    