o
    .˜Žj :  ã                   @   sú   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 d dlm	Z	 d dl
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mZmZmZmZ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# e $e%¡Z&G dd„ dƒZ'G dd„ dƒZ(dS )é    N)Úsha1)ÚBytesIO)ÚOptional)Úraw)Ú
Connection)Úmtproto)	ÚRPCErrorÚInternalServerErrorÚAuthKeyDuplicatedÚ	FloodWaitÚFloodPremiumWaitÚServiceUnavailableÚBadMsgNotificationÚSecurityCheckMismatchÚUnauthorized)Úlayer)ÚTLObjectÚMsgContainerÚIntÚFutureSaltsé   )ÚMsgIdÚ
MsgFactoryc                   @   s   e Zd Zdd„ ZdS )ÚResultc                 C   s   d | _ t ¡ | _d S ©N)ÚvalueÚasyncioÚEventÚevent©Úself© r!   úU/var/www/kodo/Anonymous/send/lib/python3.10/site-packages/pyrogram/session/session.pyÚ__init__.   s   zResult.__init__N)Ú__name__Ú
__module__Ú__qualname__r#   r!   r!   r!   r"   r   -   s    r   c                   @   sØ   e Zd ZdZdZdZdZdZdZdZ	dddd	œZ
	
	
d0dddededededefdd„Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zd ed!fd"ed#ed$ed%efd&d'„Zd(d)„ Zeeefd*ed+ed$ed,efd-d.„Zd/S )1ÚSessioné   é   é
   é   iô  zauth key not foundztransport floodz
invalid DC)é”  i­  i¼  FÚclientzpyrogram.ClientÚdc_idÚauth_keyÚ	test_modeÚis_mediaÚis_cdnc                 C   sœ   || _ || _|| _|| _|| _|| _d | _t|ƒ ¡ dd … | _	t
 d¡| _tƒ | _d| _tƒ | _i | _g | _d | _t ¡ | _d | _t ¡ | _t ¡ | _d S )Niøÿÿÿé   r   )r-   r.   r/   r0   r1   r2   Ú
connectionr   ÚdigestÚauth_key_idÚosÚurandomÚ
session_idr   Úmsg_factoryÚsaltÚsetÚpending_acksÚresultsÚstored_msg_idsÚ	ping_taskr   r   Úping_task_eventÚ	recv_taskÚ
is_startedÚget_event_loopÚloop)r    r-   r.   r/   r0   r1   r2   r!   r!   r"   r#   B   s&   	

zSession.__init__c                 Ã   sÆ  �	 | j j| j| j| j j| j j| j j| j| j jd�| _	z| j	 
¡ I d H  | j |  ¡ ¡| _| jtjjdd�| jd�I d H  | jst| jtjjttjj| j j ¡ I d H | j j| j j| j j| j j| j j| j jtjj  !¡ d�d�| jd�I d H  | j |  "¡ ¡| _#t$ %dt¡ t$ %d	| j j| j j¡ t$ %d
| j j| j j¡ W n: t&y¯ } z	|  '¡ I d H  |‚d }~w t(t)fyÀ   |  '¡ I d H  Y n t*yÔ } z	|  '¡ I d H  |‚d }~ww nq| j+ ,¡  t$ %d¡ d S )NT)r.   r0   Úipv6Úalt_portÚproxyÚmediaÚprotocol_factoryr   )Úping_id©Útimeout)Úapi_idÚapp_versionÚdevice_modelÚsystem_versionÚsystem_lang_codeÚ	lang_codeÚ	lang_packÚquery)r   rU   zSession initialized: Layer %szDevice: %s - %szSystem: %s (%s)zSession started)-r-   Úconnection_factoryr.   r0   rF   rG   rH   r1   rJ   r4   ÚconnectrE   Úcreate_taskÚrecv_workerrB   Úsendr   Ú	functionsÚPingÚSTART_TIMEOUTr2   ÚInvokeWithLayerr   ÚInitConnectionÚstoragerN   rO   rP   rQ   rR   rS   rT   ÚhelpÚ	GetConfigÚping_workerr@   ÚlogÚinfor
   ÚstopÚOSErrorr   Ú	ExceptionrC   r<   ©r    Úer!   r!   r"   Ústartj   sf   €ù
 
øþò€€þÎ
4zSession.startc              
   Ã   sÊ   �| j  ¡  | j ¡  | j ¡  | jd ur| jI d H  | j ¡  | j ¡ I d H  | jr1| jI d H  | j	s^t
| jjƒr^z| j | j¡I d H  W n ty] } zt |¡ W Y d }~nd }~ww t d¡ d S )NzSession stopped)rC   Úclearr?   rA   r<   r@   r4   ÚcloserB   r1   Úcallabler-   Údisconnect_handlerrh   rd   Ú	exceptionre   ri   r!   r!   r"   rf   £   s$   €




€ÿzSession.stopc                 Ã   s"   �|   ¡ I d H  |  ¡ I d H  d S r   )rf   rk   r   r!   r!   r"   Úrestart¼   s   €zSession.restartc                 Ã   s  �z| j  tjtjt|ƒ| j| j| j	¡I d H }W n  t
y8 } zt |¡ | j  |  ¡ ¡ W Y d }~d S d }~ww t|jtƒrC|jjn|g}t d|¡ |D �]}|jd dkrf|j| jv r_qN| j |j¡ zDt| jƒtjkrx| jd tjd …= | jr©|j| jd k r‡tdƒ‚|j| jv r‘tdƒ‚|jtƒ  d }|dkr¡tdƒ‚|d	k r©td
ƒ‚W n" tyÌ } zt d|¡ | j ¡ I d H  W Y d }~ d S d }~ww t  !| j|j¡ t|jt"j#j$t"j#j%fƒrê| j |jj&¡ qNt|jt"j#j'ƒróqNd }t|jt"j#j(t"j#j)fƒ�r|jj*}n/t|jt+t"j#j,fƒ�r|jj-}nt|jt"j#j.ƒ�r%|jj}n| j/d u�r6| j  | j/ 0|j¡¡ || j1v �rPt2|jd|jƒ| j1| _3| j1| j4 5¡  qNt| jƒ| j6k�r‰t dt| jƒ¡ z|  7t"j#j8t9| jƒd�d¡I d H  W n t:�y�   Y d S w | j ;¡  d S d S )NzReceived: %sr(   r   z.The msg_id is lower than all the stored valuesz/The msg_id is equal to any of the stored valuesl        é   zhThe msg_id belongs to over 30 seconds in the future. Most likely the client time has to be synchronized.iÔþÿÿzgThe msg_id belongs to over 300 seconds in the past. Most likely the client time has to be synchronized.zDiscarding packet: %sÚresultzSending %s acks)Úmsg_idsF)<rE   Úrun_in_executorÚpyrogramÚcrypto_executorr   Úunpackr   r9   r/   r6   Ú
ValueErrorrd   ÚdebugrX   rq   Ú
isinstanceÚbodyr   ÚmessagesÚseq_noÚmsg_idr=   ÚaddÚlenr?   r'   ÚSTORED_MSG_IDS_MAX_SIZEr   r   re   r4   rm   ÚbisectÚinsortr   ÚtypesÚMsgDetailedInfoÚMsgNewDetailedInfoÚanswer_msg_idÚNewSessionCreatedr   ÚBadServerSaltÚ
bad_msg_idr   Ú	RpcResultÚ
req_msg_idÚPongr-   Úhandle_updatesr>   Úgetattrr   r   r<   ÚACKS_THRESHOLDrZ   ÚMsgsAckÚlistrg   rl   )r    ÚpacketÚdatarj   r}   ÚmsgÚ	time_diffr   r!   r!   r"   Úhandle_packetÀ   s”   €ú
€ý

ÿý
€€ý


€&ÿøzSession.handle_packetc                 Ã   s°   �t  d¡ 	 zt | j ¡ | j¡I d H  W n
 tjy    Y nw n/z|  t	j
jd| jd d�d¡I d H  W n tyG   | j |  ¡ ¡ Y n
 tyO   Y nw qt  d¡ d S )NzPingTask startedTr   r*   )rK   Údisconnect_delayFzPingTask stopped)rd   re   r   Úwait_forrA   ÚwaitÚPING_INTERVALÚTimeoutErrorrZ   r   r[   ÚPingDelayDisconnectÚWAIT_TIMEOUTrg   rE   rX   rq   r   r   r!   r!   r"   rc     s0   €
ÿ
ÿýÿïzSession.ping_workerc                 Ã   s¬   �t  d¡ 	 | j ¡ I d H }|d u st|ƒdkrE|r7t t|ƒ¡ }|dkr+tdƒ‚t  	d|t
j |d¡¡ | j ¡ rD| j |  ¡ ¡ n
| j |  |¡¡ qt  d¡ d S )	NzNetworkTask startedTé   r,   zyAuth key not found in the system. You must delete your session file and log in again with your phone number or bot token.z$Server sent transport error: %s (%s)zunknown errorzNetworkTask stopped)rd   re   r4   Úrecvr�   r   Úreadr   r   Úwarningr'   ÚTRANSPORT_ERRORSÚgetrC   Úis_setrE   rX   rq   r˜   )r    r”   Ú
error_coder!   r!   r"   rY   3  s*   €
ÿþ
ézSession.recv_workerTr   r•   Úwait_responserM   Úretryc           
   
   Ã   s¢  �|   |¡}|j}|rtƒ | j|< t d|¡ | j tj	t
j|| j| j| j| j¡I d H }z| j |¡I d H  W n tyL } z	| j |d ¡ |‚d }~ww |rÏzt | j| j ¡ |¡I d H  W n
 tjyj   Y nw | j |¡j}	|	d u rztdƒ‚t|	tjjƒr—t|tjjtjj fƒr�|j!}t" #|	t$|ƒ¡ t|	tjj%ƒr¸|dkr§t%|	j&ƒ‚|  '¡  |  ||||d ¡I d H  t|	tjj(ƒrÍ|	j)| _|  |||¡I d H S |	S d S )NzSent: %szRequest timed outr   )*r:   r   r   r>   rd   rz   rE   ru   rv   rw   r   Úpackr;   r9   r/   r6   r4   rZ   rg   Úpopr   rš   r   r›   r�   r   r{   r   r…   ÚRpcErrorr[   ÚInvokeWithoutUpdatesÚInvokeWithTakeoutrU   r   Úraise_itÚtyper   r§   Ú_handle_bad_notificationrŠ   Únew_server_salt)
r    r•   r¨   rM   r©   Úmessager   Úpayloadrj   rs   r!   r!   r"   rZ   Q  sZ   €

ù
€þ"ÿ
äzSession.sendc                 C   sl   t ƒ }| jt| jƒd  |kr*| jt| jƒd  d }t d| jt| jƒd  |¡ || jt| jƒd < d S )Nr   r    zChanging msg_id old=%s new=%s)r   r?   r�   rd   rz   )r    Ú
new_msg_idr!   r!   r"   r±   ˆ  s
   z Session._handle_bad_notificationrU   ÚretriesÚsleep_thresholdc           	   
   Ã   sˆ  �zt  | j ¡ | j¡I d H  W n
 t jy   Y nw t|tjj	tjj
fƒr*|j}n|}d |j d¡dd … ¡}	 z| j||d�I d H W S  ttfyy } z&|j}||  kr\dkr]‚  t d| jj||¡ t  |¡I d H  W Y d }~nNd }~w tttfyÂ } z;|dkrŠ|d ‚|dk r‘tjntjdtj| d |t|ƒp¢t|ƒƒ t  d	¡I d H  |   ||d |¡I d H W  Y d }~S d }~ww q:)
NÚ.r   TrL   r   z@[%s] Waiting for %s seconds before continuing (required by "%s")r(   z[%s] Retrying "%s" due to: %sg      à?)!r   rš   rC   r›   rŸ   r�   r{   r   r[   r­   r®   rU   ÚjoinÚQUALNAMEÚsplitrZ   r   r   r   rd   r£   r-   ÚnameÚsleeprg   r	   r   re   r'   ÚMAX_RETRIESÚstrÚreprÚinvoke)	r    rU   r¶   rM   r·   Úinner_queryÚ
query_namerj   Úamountr!   r!   r"   rÁ   �  sH   €ÿÿ
ÿ€ý$€ôózSession.invokeN)FF)r$   r%   r&   r]   rŸ   ÚSLEEP_THRESHOLDr¾   r‘   rœ   r‚   r¤   ÚintÚbytesÚboolr#   rk   rf   rq   r˜   rc   rY   r   ÚfloatrZ   r±   rÁ   r!   r!   r!   r"   r'   3   s^    ýùþýüûú
ù(9Z"7
ûþýüûr'   ))r   rƒ   Úloggingr7   Úhashlibr   Úior   Útypingr   rv   r   Úpyrogram.connectionr   Úpyrogram.cryptor   Úpyrogram.errorsr   r	   r
   r   r   r   r   r   r   Úpyrogram.raw.allr   Úpyrogram.raw.corer   r   r   r   Ú	internalsr   r   Ú	getLoggerr$   rd   r   r'   r!   r!   r!   r"   Ú<module>   s$   ,
