U
    VhL                     @   s   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	m
Z
 d dlmZmZ d dlmZ d dlmZ d d	lmZ d
d Zdd Zdd Zdd Zdd Zdd ZejejejejB ejB ejB ej B ej!B ej"B ej#B @ ddeedddZ$dS )    N)urlparse)	StreamBot)gen_link)Var)filtersClient)	FloodWait)Message)	ParseModec                    sn   zZ rt  tsW dS  ds&W dS t fdddD rBW dS t }t|j|jgW S    Y dS X dS )zValidate URL formatFzhttp://https://c                 3   s   | ]}| kV  qd S )N .0curlr   =/opt/bot/vods_filmes/script/WebStreamer/bot/plugins/stream.py	<genexpr>   s     zis_valid_url.<locals>.<genexpr>) 
	N)
isinstancestr
startswithanyr   allschemenetloc)r   parsedr   r   r   is_valid_url   s    
r    c              
   C   s   z~| sW dS t |  } | drH| dr:| dd } q| dd } q| dsZd|  } dd	d
 | D } t| rz| ndW S  tk
r } ztd|  W Y dS d}~X Y nX dS )zClean and standardize URLsN)https://https://zhttp://http://r!         r   r    c                 s   s   | ]}t |d kr|V  qdS )    N)ordr   r   r   r   r   /   s      zsanitize_url.<locals>.<genexpr>zURL sanitization error: )r   stripr   joinr    	Exceptionprint)r   er   r   r   sanitize_url   s    


r,   c                 C   sJ   z6| sW dS |  d}|D ]}| r|  W S qW dS    Y dS X dS )zCExtract numeric ID from URL path (e.g., 190029 from .../190029/...)N/)splitisdigit)stream_linkpartspartr   r   r   extract_path_id6   s    
r3   c              
   C   s   zr| st dt| } | s"t dd| kr:| dr:| W S t| pPttt }d| d}t|snt d|W S  tk
r } zt	d|  W Y dS d}~X Y nX dS )	z(Generate download URL using ID from pathzEmpty stream linkzInvalid URL after sanitizationztvplus.app.br/movie/z.mp4zhttp://tvplus.app.br/movie/zInvalid final URLzURL formatting error: N)

ValueErrorr,   endswithr3   r   inttimer    r)   r*   )r0   file_idZ	final_urlr+   r   r   r   format_download_linkH   s     r9   c                 C   s2   z| sW dS t j| d W S    |  Y S X dS )z-Remove .mp4 or other extensions from filenamer$   r   N)ospathsplitext)filenamer   r   r   remove_extensiond   s    r>   c              
   C   s   zTt | }tdddd4}|d| d |d| d |d W 5 Q R X W n0 tk
r } ztd	|  W 5 d
}~X Y nX d
S )z(Save to series.txt with cleaned filenamez
Filmes.txtazutf-8)encodingzID: r   zLink: r$   zError saving to series.txt: N)r>   openwriter)   r*   )	file_namedownload_urlZ
clean_namefr+   r   r   r   save_to_series_filem   s    rF      )group)r   mc                    s  z
|j tjdI d H }t||ddI d H \}}}t||jj}t|dd}t|dd}|rpt|d d	 d
nd}t|p~d}	t	||	 d|pd d| d|	 d}
|j
d|jj d|jj d|jj d| d| d|	 dtjddI d H  |j
|
tjdddI d H  W n tk
rT } z(td|j d t|jI d H  W 5 d }~X Y nz tk
r } zZtdt| dd |j
ddd I d H  | jtjd!|jj d"t| dd#I d H  W 5 d }~X Y nX d S )$N)chat_idF)rI   log_msgfrom_channelrC   r$   	file_sizer   i      z MBUnknownz&http://tvplus.app.br/movie/default.mp4z<b>File Name:</b> <code>zUnnamed Filez </code>
<b>File Size:</b> <code>z</code>
<b>Download:</b> <code>z</code>z**Request from:** [z](tg://user?id=z)
**User ID:** `z`
**File:** `z`
**Size:** `z`
**Download:** T)textdisable_web_page_preview
parse_modequote)rP   rR   rQ   rS   zFlood wait: szError in handler: )exc_infou6   ⚠️ Error generating links. Please try again later.)rS   u"   🚨 Error processing file:
User: z
Error: )rJ   rP   rQ   )forwardr   BIN_CHANNELr   getattrmediavalueroundr9   rF   
reply_text	from_user
first_nameidr
   MARKDOWNHTMLr   r*   asynciosleepr)   r   send_message)r   rI   rK   _r0   Z	file_attrrC   rM   Z
human_sizerD   message_textr+   r   r   r   private_receive_handlerx   sP    
2"rg   )%rb   r7   r:   urllib.parser   ZWebStreamer.botr   Z!WebStreamer.utils.file_propertiesr   ZWebStreamer.varsr   pyrogramr   r   pyrogram.errorsr   Zpyrogram.typesr	   Zpyrogram.enums.parse_moder
   r    r,   r3   r9   r>   rF   
on_messageprivatedocumentvideoaudio	animationvoice
video_notephotostickerrg   r   r   r   r   <module>   sJ   	