o
    -˜Žjì@  ã                   @   sº  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 d dl	m	Z	m
Z
 d dlmZ d dlmZmZmZmZmZmZmZ d dlmZ d dlZd dlmZmZmZ d dlmZ d d	lmZmZmZmZ eddd
d
dd�Z dzddœde!de"fdd„Z#			d{de!dede$de"ded f
dd„Z%			d|ddde$d e!d!e"ded" f
d#d$„Z&d}d e!ded" fd%d&„Z'd~d)d*„Z(d+e!dd(fd,d-„Z)d.Z*d/Z+d0Z,d1Z-d2Z.d3Z/d4eej0j1ej0j2ej0j3f dee$ fd5d6„Z4d4eej0j1ej0j3f de$fd7d8„Z5d9e$de!fd:d;„Z6d9e$de$fd<d=„Z7d>e8de$fd?d@„Z9dAe$de8fdBdC„Z:dDe8de8fdEdF„Z;dGe8d>e8de8fdHdI„Z<dJejj=dKe!de8fdLdM„Z>dNejj?j@dKe!dejjAfdOdP„ZBdQdRdSe!dTejCdUedV dee!ee!eej0jD f f f
dWdX„ZEde	fdYdZ„ZFd[ee$ dee	 fd\d]„ZGd^ee	 dee$ fd_d`„ZHdaedbedcƒf ddedeededcƒfdfdg„ZIddjdk„ZJ										d€dQdRdlee$e!f dme$dne$doe$dpee$e!f dqee$e!f dre!dsedV dte$dTdufdvdw„ZKdxdy„ ZLdS )�é    N)ÚThreadPoolExecutor)ÚdatetimeÚtimezone)Úgetpass)ÚUnionÚListÚDictÚOptionalÚAnyÚCallableÚTypeVar)ÚSimpleNamespace)ÚrawÚenumsÚtypes)ÚStr)ÚFileIdÚFileTypeÚPHOTO_TYPESÚDOCUMENT_TYPESTz3[pyromod] You're not expected to click this button.)Útimeout_handlerÚstopped_handlerÚthrow_exceptionsÚunallowed_click_alertÚunallowed_click_alert_textÚ F)ÚhideÚpromptr   c                Ã   sX   �t dƒ�}t |rtnt| ¡}t ¡  ||¡I dH W  d  ƒ S 1 s%w   Y  dS )z'Just like the built-in input, but asyncé   N)r   Ú	functoolsÚpartialr   ÚinputÚasyncioÚget_event_loopÚrun_in_executor)r   r   ÚexecutorÚfunc© r'   úK/var/www/kodo/Anonymous/send/lib/python3.10/site-packages/pyrogram/utils.pyÚainput0   s
   €
$þr)   Úfile_idÚexpected_file_typeÚttl_secondsÚhas_spoilerÚreturn)zraw.types.InputMediaPhotozraw.types.InputMediaDocumentc                 C   sæ   zt  | ¡}W n ty   td| › d�ƒ‚w |j}|d ur/||kr/td|j› d|j› d�ƒ‚|tjtjfv r>td| › �ƒ‚|t	v rUt
jjt
jj|j|j|jd�||d�S |tv rlt
jjt
jj|j|j|jd�||d�S td	| › �ƒ‚)
NzFailed to decode "zS". The value does not represent an existing local file, HTTP URL, or valid file id.z	Expected z, got z file id insteadz,This file id can only be used for download: )ÚidÚaccess_hashÚfile_reference)r/   Úspoilerr,   zUnknown file id: )r   ÚdecodeÚ	ExceptionÚ
ValueErrorÚ	file_typeÚnamer   Ú	THUMBNAILÚ
CHAT_PHOTOr   r   r   ÚInputMediaPhotoÚ
InputPhotoÚmedia_idr0   r1   r   ÚInputMediaDocumentÚInputDocument)r*   r+   r,   r-   Údecodedr6   r'   r'   r(   Úget_input_media_from_file_id7   sB   
ÿÿýù
ýù
r@   r   Úmessageszraw.types.messages.MessagesÚrepliesÚbusiness_connection_idÚis_scheduledztypes.Messagec                 Ã   sè  �dd„ |j D ƒ}dd„ |jD ƒ}t|dƒrdd„ |jD ƒ}nd }|js(t ¡ S g }|jD ]}	| tjj	| |	|||d|d�I d H ¡ q-|rï|sÓdd„ |jD ƒ}
d	d„ |jD ƒ}|
r”|D ]}|j
rf|j
j} nq[d}| j||
 ¡ |d
 d�I d H }|D ]}	|
 |	jd ¡}|D ]}|j|kr’|js’||	_q…qz|rÒ|D ]}|j
r£|j
j} nq˜d}i }| ¡ D ]}|  || d || d ¡I d H ||< q¬|D ]}	|	j|v rÑ||	j |	_qÄn|D ]}	|	jrî|	jsî| j|	j
j|	j|d
 d�I d H |	_qÕt |¡S )Nc                 S   ó   i | ]}|j |“qS r'   ©r/   ©Ú.0Úir'   r'   r(   Ú
<dictcomp>m   ó    z"parse_messages.<locals>.<dictcomp>c                 S   rE   r'   rF   rG   r'   r'   r(   rJ   n   rK   Útopicsc                 S   rE   r'   rF   rG   r'   r'   r(   rJ   p   rK   r   )rB   rC   c                 S   sH   i | ] }t |tjjƒs"|jr"t |jtjjƒr"|jjd ur|j|jj“qS ©N)Ú
isinstancer   r   ÚMessageEmptyÚreply_toÚMessageReplyHeaderÚreply_to_msg_idr/   rG   r'   r'   r(   rJ   }   s    üûú
úc                 S   sF   i | ]}t |tjjƒs|jrt |jtjjƒr|j|jj|jjd œ“qS ))Úuser_idÚstory_id)	rN   r   r   rO   rP   ÚMessageReplyStoryHeaderr/   rS   rT   rG   r'   r'   r(   rJ   ˆ   s    ýýýÿr   )Úreply_to_message_idsrB   rS   rT   )Úmessage_idsrB   )ÚusersÚchatsÚhasattrrL   rA   r   r   ÚappendÚMessageÚ_parseÚchatr/   Úget_messagesÚkeysÚgetÚforum_topic_createdÚreply_to_messageÚget_storiesÚreply_to_storyÚreply_to_message_idÚexternal_reply)ÚclientrA   rB   rC   rD   rX   rY   rL   Úparsed_messagesÚmessageÚmessages_with_repliesÚmessage_reply_to_storyÚmÚchat_idÚreply_messagesÚreply_idÚreplyÚmsg_idr'   r'   r(   Úparse_messagesf   sˆ   €

(þþþý
€ýþ

þ
€ÿþý€
rs   c              
   C   sb   |j }t|dd ƒ}g }|D ]}| tj||d ur$tjt|ƒtjj	| d�nd || d�¡ qt 
|¡S )NÚ
channel_id)r/   Útyperh   )r/   r^   rC   rh   )rA   Úgetattrr[   r   r\   ÚChatÚget_channel_idr   ÚChatTypeÚCHANNELr   )rh   ÚupdaterC   rA   rt   ri   rj   r'   r'   r(   Úparse_deleted_messagesÆ   s&   üýøÿ
r|   rr   ú raw.base.InputBotInlineMessageIDc                 C   sT   t | tjjƒrt d| j| j| j¡}nt d| j| j	| j| j¡}t
 |¡ ¡  d¡S )Nú<iqqú<iqiqú=)rN   r   r   ÚInputBotInlineMessageIDÚstructÚpackÚdc_idr/   r0   Úowner_idÚbase64Úurlsafe_b64encoder3   Úrstrip)rr   Úinline_message_id_packedr'   r'   r(   Úpack_inline_message_idÝ   s   üûrŠ   Úinline_message_idc                 C   s†   | dt | ƒ d   }t |¡}t |ƒdkr+t d|¡}tjj|d |d |d d�S t d	|¡}tjj|d |d |d |d
 d�S )Nr€   é   é   r~   r   r   é   )r„   r/   r0   r   é   )r„   r…   r/   r0   )	Úlenr†   Úurlsafe_b64decoder‚   Úunpackr   r   r�   ÚInputBotInlineMessageID64)r‹   Úpaddedr?   Úunpackedr'   r'   r(   Úunpack_inline_message_idñ   s    
ýür–   lýÿÿÿÿJ)¥lüÿÿÿÿO>Joo lýÿÿÿ J)£lýÿÿÿÿJ)£iÿÿÿl   ÿJ)£Úpeerc                 C   s”   t | tjjƒst | tjjƒst | tjjƒr| jS t | tjjƒs-t | tjjƒs-t | tjj	ƒr0| j
S t | tjjƒsEt | tjjƒsEt | tjjƒrH| jS dS )z&Get the raw peer id from a Peer objectN)rN   r   r   ÚPeerUserÚRequestedPeerUserÚInputPeerUserrS   ÚPeerChatÚRequestedPeerChatÚInputPeerChatrn   ÚPeerChannelÚRequestedPeerChannelÚInputPeerChannelrt   ©r—   r'   r'   r(   Úget_raw_peer_id  s,   	ÿþýÿþýÿþýr¢   c                 C   sz   t | tjjƒst | tjjƒr| jS t | tjjƒst | tjjƒr#| j S t | tjj	ƒs1t | tjj
ƒr6t| j S td| › �ƒ‚)z*Get the non-raw peer id from a Peer objectzPeer type invalid: )rN   r   r   r˜   rš   rS   r›   r�   rn   rž   r    ÚMAX_CHANNEL_IDrt   r5   r¡   r'   r'   r(   Úget_peer_id0  s    ÿþÿþÿþ
r¤   Úpeer_idc                 C   sV   | dk rt | kr
dS t|   krtk rdS  nnd|   k r#tkr$dS  td| › �ƒ‚)Nr   r^   ÚchannelÚuserzPeer id invalid: )ÚMIN_CHAT_IDÚMIN_CHANNEL_IDr£   ÚMAX_USER_IDr5   ©r¥   r'   r'   r(   Úget_peer_typeG  s   ÿÿr¬   c                 C   s   t |  S rM   )r£   r«   r'   r'   r(   rx   T  s   rx   Úbc                 C   s   t  | d¡S )NÚbig)ÚintÚ
from_bytes)r­   r'   r'   r(   ÚbtoiX  ó   r±   rI   c                 C   s   |   dd¡S )Né   r®   )Úto_bytes)rI   r'   r'   r(   Úitob\  r²   rµ   Údatac                 C   s   t  | ¡ ¡ S rM   )ÚhashlibÚsha256Údigest)r¶   r'   r'   r(   r¸   `  ó   r¸   Úac                 C   s   t dd„ t| |ƒD ƒƒS )Nc                 s   s   � | ]	\}}||A V  qd S rM   r'   )rH   rI   Újr'   r'   r(   Ú	<genexpr>e  ó   € zxor.<locals>.<genexpr>)ÚbytesÚzip)r»   r­   r'   r'   r(   Úxord  s   rÁ   ÚalgoÚpasswordc                 C   sR   t | j| ¡  | j ƒ}t | j| | j ƒ}t d|| jd¡}t | j| | j ƒS )NÚsha512i † )r¸   Úsalt1ÚencodeÚsalt2r·   Úpbkdf2_hmac)rÂ   rÃ   Úhash1Úhash2Úhash3r'   r'   r(   Úcompute_password_hashh  s   rÌ   Úrc                 C   s<  | j }|j}t|jƒ}t|jƒ}|j}| j}t|ƒ}| j}	t||ƒ}
t|
ƒ}t|||ƒ}t	|| ƒ}t|ƒ}|| | }	 t
 d¡}t|ƒ}t|||ƒ}t|ƒ}tt	|| ƒƒ}|dkr]nq=|| | }|| }|| }t|||ƒ}t|ƒ}t	|ƒ}t	tt	|ƒt	|ƒƒt	|jƒ t	|jƒ | | | ƒ}tjj|	||d�S )NTr³   r   )Úsrp_idÚAÚM1)Úcurrent_algoÚpr±   rµ   ÚgÚsrp_BrÎ   rÌ   Úpowr¸   ÚosÚurandomrÁ   rÅ   rÇ   r   r   ÚInputCheckPasswordSRP)rÍ   rÃ   rÂ   Úp_bytesrÒ   Úg_bytesrÓ   ÚB_bytesÚBrÎ   Úx_bytesÚxÚg_xÚk_bytesÚkÚkg_xÚa_bytesr»   rÏ   ÚA_bytesÚuÚg_bÚuxÚa_uxÚSÚS_bytesÚK_bytesÚM1_bytesr'   r'   r(   Úcompute_password_checkt  sV   



öÿþýüûÿ	rí   rh   zpyrogram.ClientÚtextÚ
parse_modeÚentitiesztypes.MessageEntityc                 Ã   s\   �|r|D ]}| |_ q|dd„ |D ƒI d H pd }}n| j ||¡I d H  ¡ \}}||dœS )Nc                 Ó   s   �g | ]	}|  ¡ I d H ‘qS rM   )Úwrite©rH   Úentityr'   r'   r(   Ú
<listcomp>»  r¾   z'parse_text_entities.<locals>.<listcomp>)rj   rð   )Ú_clientÚparserÚparseÚvalues)rh   rî   rï   rð   ró   r'   r'   r(   Úparse_text_entities°  s   € þrù   c                   C   s   t  dtj¡S )Nr   )r   Úfromtimestampr   Úutcr'   r'   r'   r(   Úzero_datetimeÅ  rº   rü   Útsc                 C   s   | rt  | ¡S d S rM   )r   rú   )rý   r'   r'   r(   Útimestamp_to_datetimeÉ  s   rþ   Údtc                 C   s   | rt |  ¡ ƒS d S rM   )r¯   Ú	timestamp)rÿ   r'   r'   r(   Údatetime_to_timestampÍ  s   r  r&   .ÚResultÚargsÚkwargsc                 Ï   s0   �t  ¡ }| d tj| g|¢R i |¤Ž¡I d H S rM   )r"   r#   r$   r   r    )r&   r  r  Úloopr'   r'   r(   Úrun_syncÐ  s   €&r  rj   úraw.types.TextWithEntitiesc              	      sP   t  tdd„ ‡ ‡fdd„t|dg ƒD ƒƒ¡}tt|ddƒƒ |¡p"d |p%d dœS )	Nc                 S   s   | d uS rM   r'   )rÞ   r'   r'   r(   Ú<lambda>×  s    z*parse_text_with_entities.<locals>.<lambda>c                    s   g | ]
}t j ˆ |ˆ¡‘qS r'   )r   ÚMessageEntityr]   rò   ©rh   rX   r'   r(   rô   Ø  s    ÿÿz,parse_text_with_entities.<locals>.<listcomp>rð   rî   r   )rî   rð   )r   r   Úfilterrv   r   Úinit)rh   rj   rX   rð   r'   r
  r(   Úparse_text_with_entitiesÔ  s   
þþÿþr  rn   rf   Úreply_to_story_idÚmessage_thread_idÚreply_to_monoforum_idÚreply_to_chat_idÚ
quote_textÚquote_entitiesÚquote_offsetzenums.ParseModec                 Ã   sª   �d }d }|r|   |¡I d H }tj|d�}|S |s|rBt| ||
|ƒI d H  ¡ \}}|d ur5|   |¡I d H }tj||||||	d�}|S |rS|   |¡I d H }tj||d�}|S )N)Úmonoforum_peer)rf   r  Úreply_to_chatr  r  r  )r—   rT   )Úresolve_peerr   ÚInputReplyToMonoforumrù   rø   ÚInputReplyToMessageÚInputReplyToStory)rh   rn   rf   r  r  r  r  r  r  r  rï   rP   r  r—   rî   rð   r'   r'   r(   Úget_reply_toä  s:   €ÿîúúþr  c                 C   sZ   t  dd| ¡} t  dd| ¡} t  d| ¡}|r+|d d › d|d d › |d d › �S d S )	Nz^\s*(<[\w<>=\s\"]*>)\s*z\1z\s*(</[\w</>]*>)\s*$zN(https?):\/\/([\w_-]+(?:(?:\.[\w_-]+)+))([\w.,@?^=%&:\/~+#-]*[\w@?^=%&\/~+#-])r   z://r   rŽ   )ÚreÚsubÚfindall)rî   Úmatchesr'   r'   r(   Úget_first_url  s   2r   )r   )NNN)r   NFrM   )rr   r}   )rj   r  )
NNNNNNNNNN)Mr"   r†   r   r·   r  rÖ   r‚   Úconcurrent.futures.threadr   r   r   r   Útypingr   r   r   r	   r
   r   r   r   r   Úpyrogramr   r   Ú)pyrogram.types.messages_and_media.messager   Úpyrogram.file_idr   r   r   r   ÚPyromodConfigÚstrÚboolr)   r¯   r@   rs   r|   rŠ   r–   ÚMIN_CHANNEL_ID_OLDr©   r£   r¨   ÚMAX_USER_ID_OLDrª   ÚbaseÚPeerÚRequestedPeerÚ	InputPeerr¢   r¤   r¬   rx   r¿   r±   rµ   r¸   rÁ   ÚAPasswordKdfAlgoSHA256SHA256PBKDF2HMACSHA512iter100000SHA256ModPowrÌ   ÚaccountÚPasswordrØ   rí   Ú	ParseModer	  rù   rü   rþ   r  r  r  r  r   r'   r'   r'   r(   Ú<module>   s  $û		üÿþýü
û2ûþýüû
ú`
þÿÿ
ú" ÿþ
ýÿþ
ý<ÿþýü
û*
õÿ
þýüû
ú
ùø	÷
ö
õ(