
    8UizQ                        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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mZmZmZmZmZmZmZmZmZ d Zdefd	Z d
efdZ!defdZ"defdZ#defdZ$d Z%de&de&fdZ'd Z(d Z)defdZ*de+fdZ,d Z-d Z.d Z/dedefdZ0de&fdZ1d efd!Z2d"e&d#ed$e&fd%Z3d"e&d&ed'e&fd(Z4de&d)ed*ed+efd,Z5d"e&d-e&d$e&d&efd.Z6d&efd/Z7dS )0    N)IMDb)Celery)Elasticsearch)MovieoDatabase)ENCODERSRELEASE_TYPESMOVIEO_TELEGRAM_APIDOWNLOAD_DIRMOVIEO_SERVER_IPES_AUTHES_HOSTQUALITIES_PYRAMIDAUTO_SUB_CHARCHIVE_CHANNEL
MOVIEO_CLIc                 t    |                                  }d}t          j                    D ]\  }}||v r|} n|S N )lowerr   items)	file_namefile_name_lowerrelease_valuekeyvalues        ./var/www/html/auto_sub_bot/base/utils/funcs.pyidentify_releaser      sT    oo''OM#)++  
U/!!!ME "     r   c                    |                                                      dd                              dd                              dd                              dd                              dd          }dd	g}d }|D ]H}t          j        ||t          j                  }|r$t          |                    d
                    } nI|sd
}|S )N-._   ×x   – z[Ss](\d{1,2})z[Ss]eason[._\s-]?(\d{1,2})   )r   replaceresearch
IGNORECASEintgroup)r   
normalizedseason_patternssepatternmatchs         r   (identify_seasons_from_irregular_filenamer3      s    	c			c			s						c		  	%O
 
B"  	':r}== 	U[[^^$$BE	  Ir   filenamec                 (   |                                                      dd                              dd                              dd                              dd                              dd                              dd          }t          j        d	d
|          }t          j        dd
|          }t          j        dd|                                          }g d}d }|D ]}t          j        ||t          j                  }|r|                                }t          |          dk    r	|d         }n|d         }|	                    d          }|
                                r#t          |          }d|cxk    rdk    rn |} n|S )Nr"   r&   r    r!   r#   r$   r%   u   —zQ\b(720p|1080p|2160p|480p|4k|x265|hdr|webrip|web|bluray|bdrip|hdtv|dvdrip|remux)\br   z\b(19|20)\d{2}\bz\s+)z[Ss]\d{1,2}[Ee](\d{1,3})zepisode\s*(\d{1,3})z\bep\s*(\d{1,3})\bz\bep(\d{1,3})\bz(\d{1,2})x(\d{1,2})z[Ss]\d{1,2}[\s._-]*(\d{1,3})z^(\d{1,2})(?!\d)z[\s._-](\d{1,2})[\s._-]   r'   r   0<   )r   r(   r)   substripr*   r+   groupslenlstripisdigitr,   )r4   namepatternsepisoder1   mr;   eps           r   )identify_episodes_from_irregular_filenamerD   9   s   	c			c			c			s								 	 6fhjlpqqD6%r400D6&#t$$**,,D	 	 	H G  IgtR]33 	XXZZF6{{aAYAY3Bzz|| WW====b===== GENr   c                 "   t          j        d|           }|sd }nt|d         }t          t          |                              dd                              dd                              dd                              dd                    }|S )Nz[Ss]\d\dr   S0r   s0Ss)r)   findallr,   strr(   )r   seasonr0   s      r   identify_seasonsrM   f   s    Z
I..F `AYRr**224<<DDS"MMUUVY[]^^__Ir   c                    t          j        d|           }d}d}d}|s?t          j        d|           }|st          j        d|           }|sd}n|D ]n}||z  }t          |                              dd                              dd                              d	d                              d
d          }||dz   z  }on[|D ]}||z  }t          |                              dd                              dd                              dd                              dd                              d	d                              d
d          }||dz   z  }n|D ]}||z  }t          |                              dd                              dd                              dd                              dd                              dd                              dd                              d	d                              d
d          }||dz   z  }|||                    d          t          |                    d                    dz
           fS )Nz[Ee]\d\d\d\dr   Tz
[Ee]\d\d\dz[Ee]\d\dFE0e0Ee,E00e00E000e000r6   )r)   rJ   rK   r(   splitr<   )r   rA   ep_sepisodes
permissionrC   s         r   identify_episodesr\   o   s   j33GDHJ *\955 	!jY77G %"

! % %BNHRr22::4DDLLSRTUU]]^aceffBBH$DD%
  ! !BWW__UB//77rBBJJ4QSTT\\]aceffnnorsuvv~~  @C  EG  H  HS !
  	 	BNHR,,44VR@@HHPRSS[[\aceffnnostvww  AE  GI  J  J  R  R  SV  XZ  [  [  c  c  dg  ik  l  lBBHDDhtzz#s4::c??/C/CA/EFFFr   c                 d   d}t          j        d|           }|sDt          j        d|           }|sd}nSt          |d                   }|                                }n)t          |d                   }|                                }|r%t          j        d|           }|r|d         }| | }||fS )NTz\d\d\d\d[Pp]z
\d\d\d[Pp]Fr   z[Xx]265)r)   rJ   rK   r   )r   r[   qualitycodecs       r   identify_qualityr`      s    Jj33G 	"*\955 	&JJ'!*ooGmmooGGgaj//--// *
9i00 	*!HE )%))Ggr   c                     |                                  }d}d}t          j                    D ]\  }}||v r|} nt          j                    D ]\  }}||v r|} n||fS r   )r   r   r   r   )r   r   r   encoder_valuer   r   s         r   identify_encoder_and_releaserc      s    oo''OMMn&&  
U/!!!ME " $)++  
U/!!!ME " &&r   
request_idstatusc                 x   t          t          j                              }t                      5 }|                    d| d          }|                    | d|           |                    | d|           |                    | d|           d d d            n# 1 swxY w Y   |d         d         }|d         d         }t                      5 }|                    d|d          }d d d            n# 1 swxY w Y   |s|dk    r^t                      }|                    t          |	                    d	d
                              }	d }
|	d          d|	d          }||
|fS t                      5 }|                    d|d          }d d d            n# 1 swxY w Y   ||d         d         |d         d         fS )Nidzchat_id,title_idresponse_timere   r   r'   zmovieo_id,en_name   ttr   titler&   yearimdb_id)
r,   timer   get_users_requestsupdate_admins_requestsupdate_users_requests	get_titler   	get_movier(   )rd   re   current_timedbusers_requests_dbchat_idtitle_idtitle_dbiark   	movieo_iden_names               r   log_requestr}      s   ty{{##L			 ?R11$
DVWW
!!*o|LLL
!!*h???
  Xv>>>	? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
  "1%G #A&H			 ER<<h0CDDE E E E E E E E E E E E E E E 	RQ;;BLLX%5%5d2%>%>!?!?@@EIw99%-99GIw..!! RR<<	8=PQQR R R R R R R R R R R R R R R8A;q>(1+a.00s6   ABBBC11C58C50FFFc                 @    |                      d |D                       S )Nc              3   <   K   | ]}|d vt          |          V  dS ))NNULLN)rK   ).0as     r   	<genexpr>zconcat_ws.<locals>.<genexpr>   s2      BBQ!>*A*A#a&&*A*A*A*ABBr   )join)separgss     r   	concat_wsr      s#    	BB$BBB	B	BBr   c                     t          d|             t          j        | ddd          }|j        dk    r+t          d|            t          d|j                    dS dS )Nz--- executing command: T)shellcapture_outputtextr   z--- Error executing command: z--- STDERR: F)print
subprocessrun
returncodestderr)commanderror_messageresults      r   run_commandr      sy    	
-G
-
-...^G44PPPFA=m==>>>,V],,---u4r   
video_pathc                     ddddddd| g}t          j        |t           j        t           j        dd	          }t          j        |j                  }t          |d
         d                   S )Nffprobez-verrorz-show_entrieszformat=durationz-ofjsonT)stdoutr   r   checkformatduration)r   r   PIPEr   loadsr   float)r   cmdr   datas       r   get_video_duration_secondsr      st    g*vC ^  F :fm$$Dh
+,,,r   secc                     t          |           } | dk    rdS | dk    rdnd}| dk    r| dz
  n| dz
  }t          j        ||          S )Nx   r   iX  i,  r8   )r,   randomrandint)r   startends      r   get_random_secondr      sW    
c((C
czzq99CC!ESyy#))cBhC>%%%%r   c                 ~    |dk    rt          j        |  | |d          }nt          j        |  | |          }|S )NgetFilei  )r   timeout)r   )requestspost)urlmethodr   responses       r   send_requestr      sT    =C!1!1!1cJJJ=C!1!1!1===Or   c                 L   d}d}t          d|dz             D ]}	 t          j        |  | ||d          }	 |                                }	n$# t          $ r t          j        |           Y Uw xY w|	                    dd          st          j        |           |	c S # t          j        j	        $ r}
t          j        |           Y d }
~
d }
~
wt          $ r}
t          j        |           Y d }
~
d }
~
ww xY wdd	| d
| d|j         d}t          t          d|           d S )N   
   r'   i  )r   filesr   okF)zFailed to upload  after  attempts. rw   r   sendMessage)ranger   r   r   
ValueErrorrn   sleepget
exceptionsRequestException	Exceptionr   r   r	   )r   r   r   r   r   MAX_RETRIESRETRY_DELAYattemptr   res_jsonrR   s              r   upload_videor      s   KKK!O,,  	}   	  H#==??   
;''' <<e,, 
;'''OOO"3 	 	 	J{###HHHH 	 	 	J{###HHHH	
 ]I]]k]]hm]] D $mT:::::sL   B AB A.+B -A..-B B  C84CC8C33C8c                    d}d}t          d|dz             D ]}d|i}t          | d|          }|j        dk    rtt          j        |j                  }|d         d         }	t          j                            |           \  }
}| | }t          j
        |	t           |            ||fc S t          j        |           dd	| d
| d|j         d}t          t          d|           dS )N2   r'   file_idr      r   	file_pathr   zFailed to download r   r   r   r   F)r   r   status_coder   r   contentospathsplitextshutilmover
   rn   r   r   r	   )r   r   r   r   r   r   r   r   	json_data	save_pathr"   file_formatserver_file_names                r   download_videor   "  s-   KKK!O,, $ $w
  Y553&&
8#344I!(+K8IW--n==NA{")8;88K	l#F4D#F#FGGG#K////J{####_i____PXP]__ D $mT:::5r   r   r   c           	          dt            |  dt            |                     |d           d}t          |d           t          j        t            |             |                     |d          } | S )Nzffmpeg -y -fflags +genpts -i "zI"  -map 0 -c copy -copy_unknown -ignore_unknown -max_interleave_delta 0 "z.mkv"z6something went wrong when trying convert video to mkv.)r
   r(   r   r   remove)r   r   r   s      r   convert_to_mkvr   ;  s     W|  W=M  W  W  Ye  W  gw  g  g  @K  MS  gT  gT  W  W  WGQRRRI1/11222'//VDDr   c                    t                      5 }|                    d| d          }|                    d| d          }d d d            n# 1 swxY w Y   |d         d         }|d         d         }|d         d         }|d         d         }|dk    rht                      5 }|                    d|d          }d d d            n# 1 swxY w Y   |d         d         }	|d         d         }
|d         d         }n|}	d }d }d }
|||||	|
|fS )	Nrg   admin_idztitle_id,request_type,seasonr   r'   r6   ztitle requestzimdb_id,en_name,type)r   get_admins_requestsro   rr   )rd   ru   admin_request_dbuser_request_dbadmin_user_idrx   request_type_strrL   ry   rm   
title_name
title_types               r   get_all_request_infor   B  s   			 `R11$
JOO//Z@^__` ` ` ` ` ` ` ` ` ` ` ` ` ` ` %Q'*Mq!!$H&q)!,Q"F?** 	J||D2HIIH	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J1+a.a[^
a[^



*FHgzS]]]s#   /A

AA!CC	C	rm   c                 t   t          j        dd          }t          j        d|dz
  z  d|z  dz
            }t                      5 }|                    |           }|                    |dd|            |                    |d|           d d d            n# 1 swxY w Y   t          dd	t           d
d           }|                    d| ||g           |                    d| |g           |                    d| |g           |                    d| |g           |                    d| |g           |                    d| g           |                    d| g           |dk    r3|                    d| |g           |                    d| |g           n2|                    d| |g           |                    d| |g           t          j	        d           t                      5 }|
                    d|d          }d d d            n# 1 swxY w Y   |d         d         }||fS )N   	   r   r'   r{   motypemovieo_taskszamqp://admin:13990909_MVO@z:5672//)brokerbackendz6celery_tasks.tasks.get_title_info.fetch_title_metadata)r   z5celery_tasks.tasks.get_title_info.fetch_title_trailerz3celery_tasks.tasks.get_title_info.fetch_imdb_ratingz6celery_tasks.tasks.get_title_info.fetch_parental_guidez4celery_tasks.tasks.get_title_info.fetch_persian_plotz4celery_tasks.tasks.get_title_info.fetch_title_actorsz7celery_tasks.tasks.get_title_info.fetch_title_directorsz7celery_tasks.tasks.get_title_info.fetch_movie_metascorez9celery_tasks.tasks.get_title_info.fetch_movie_tomatometerz8celery_tasks.tasks.get_title_info.fetch_series_metascorez:celery_tasks.tasks.get_title_info.fetch_series_tomatometer   rg   r|   r   )r   r   r   	add_titleupdate_titler   r   	send_taskrn   r   rr   )	rm   r   
num_digitsr{   ru   rx   
celery_appry   r|   s	            r   fetch_title_metadatar   X  s   1%%Jrj1n5rZ7G!7KLLI			 6R<<((
+/?I/?/?@@@
&*5556 6 6 6 6 6 6 6 6 6 6 6 6 6 6 E,<EEE  J
 QY`bjlvXwxxxPX_aiWjkkkNV]_gUhiiiQY`bjXklllOW^`hVijjjOW^V_```RZaYbcccQV^ego]pqqqX`giq_rssssW_fhp^qrrrYahjr`stttJrNNN			 ;R<<h	::; ; ; ; ; ; ; ; ; ; ; ; ; ; ;qk!nGWs%   ABBB9HH!$H!rx   r|   r   c                 z    t          t          t          d          }| |d|d}|                    d|           d S )NF)hosts
basic_authverify_certsr   )rx   r|   fa_namer   titles)indexbody)r   r   r   r   )rx   r|   r   esdocs        r   add_title_to_elasticsearchr  w  sL    	Wu	M	M	MB	 C HH8#H&&&&&r   requested_qualityrequested_seasonc           $         d }t          j                    D ]}|                                t           |         v r|dk    rjt                      5 }|                    d| dd| d| d|  d| d| d	|  d| d| d
|  d| d| d|  d| d| d          }d d d            n# 1 swxY w Y   nZt                      5 }|                    d| dd| d|  d| d	|  d| d
|  d| d|  d| d          }d d d            n# 1 swxY w Y   |r|c S |S )Nd   rx   zid,archive_idzAND quality = "zX" 
                             AND type = 1 
                             AND season = z} 
                             AND (
                                 (encoder = (SELECT encoder FROM files WHERE title_id = z AND type = 1 AND season = z AND quality = "zq" LIMIT 1)
                                  OR (encoder IS NULL AND (SELECT encoder FROM files WHERE title_id = z" LIMIT 1) IS NULL))
                                 AND
                                 (release_type = (SELECT release_type FROM files WHERE title_id = z{" LIMIT 1)
                                  OR (release_type IS NULL AND (SELECT release_type FROM files WHERE title_id = z3" LIMIT 1) IS NULL))
                             )z" 
                             AND type = 1 
                             AND (
                                 (encoder = (SELECT encoder FROM files WHERE title_id = z AND type = 1 AND quality = ")r   keysr:   r   	get_files)rx   r  r  files_dbr^   ru   s         r    finding_best_quality_for_convertr    s   H$)++ $  $ ""$$(9'(BBB3&&#%% !||" '	"G 	" 	"+;	" 	" Zb		" 	" O		" 	" ah		" 	"
 hp	" 	"
 M]	" 	"
 ov	" 	" dl	" 	" IY	" 	" kr	" 	" rz	" 	" Wg	" 	" y@	" 	" 	"	   H              " $%% !||" '"G " " Zb" " AH" " hp	" " OV	" " dl" " KR" " rz" " Y`" " "	   H                 Os%   ABB!	$B!	75C88C<	?C<	r   qu
combo_hashc                 &   |                     d          d                                         }t                      5 }|                    | d|           |                    | d|           |                    | d|           |                    | dd            d d d            n# 1 swxY w Y   |dv rt                      5 }|                    d|dd	          x}|_        d d d            n# 1 swxY w Y   |rCd
dlm} |D ]<}t          t          |d
         | d|  d}|                    t          d|           ;d S d S |                    d|dd          }	|	d
         d
         }
d|  d| }t          |
|d}t          t          d|           d S )N+r'   r   request_typesource_file)zPersian SoftSubzEnglish SoftSubzPersian HardSubzEnglish HardSubcombo_hash_sha256
archive_idzORDER BY `files`.`ep` ASCr   )send_batch_messagerS   )rw   from_chat_id
message_idcaptioncopyMessager   zORDER BY RAND() LIMIT 1zcompress_video,)rw   documentr  sendDocument)rX   r:   r   rq   rp   r	  file_dbcelery_tasks.tasks.batch_senderr  r   r   delayr	   r   r   )rd   r   r  r  ru   r
  r  fr   r  filer  s               r   resolve_2_part_requestr     s   '--c2215;;==			 CR
  Wb999
  ^=MNNN
!!*n>NOOO
!!*mTBBB	C C C C C C C C C C C C C C C
 ggg 	}$&LL1DjR^_{$|$||Hrz	} 	} 	} 	} 	} 	} 	} 	} 	} 	} 	} 	} 	} 	} 	} 		SJJJJJJ S S*$3"#A$"2AAZAA	  #(()<mTRRRR		S 		SS S ,,2J	Keffqz!}5J5555!
 

 	(.$?????s$   AB%%B),B) C..C25C2movieo_file_idc           	      R   t                      5 }|                    d|d          }|                    d| d          }d d d            n# 1 swxY w Y   |d         d         }|d k    rd}nd| }|d         d         }|d         d         }	|d         d         }
|d         d         }|
                    d	          d         }|                    d
          d         }|                    dd          }|                    dd          }|                    | d                                          }d}t          |                    d                    dk    rW|                                                    d          D ]"}||d                                          dz  }#|dk    r| | }n#|                    dd          }|dk    r| d| }|dk    rG| d| | d}d| |                    dd           d}t          j	        
                    |          }nY|dk     r|	dk     rR| d| d|	 d| | d	}t          j	        
                    d|
                    d	          d          d| d|	           }n| d| d|	 d| | d	}t          j	        
                    d|
                    d	          d          d| d|	           }n|	dk     rR| d| d|	 d| | d	}t          j	        
                    d|
                    d	          d          d| d|	           }nQ| d| d|	 d| | d	}t          j	        
                    d|
                    d	          d          d| d|	           }|||                                                    dd          ||	fS )Nrg   zrelease_type,season,epzen_name,yearr   r   r!   r'   r6   (:'r&      z.MVO.mkvu   📥 z MVOr   z.S0rO   rF   rQ   z.SrH   )r   r	  rr   rX   r(   r:   r<   
capitalizeurllibparsequote)rx   r!  r   r  ru   r
  ry   release_typerL   rC   full_en_namerl   r|   file_en_namer?   new_file_namebtns                    r   create_new_file_namer0    s   			 @R<<n6NOO<<h??@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ A;q>Lt)<))a[^F	!QBA;q>LA;q>D  %%a(GmmC  #Gooc2&&Gooc2&&Gooi,,2244GL
7==""MMOO))#.. 	7 	7DtAw11336666LL??*2D22LsC00??*33T33LQ'SS*;S\SSSM'M)=)=c3)G)GMMMl  %%B;;Bww#/ l lF l lb l lCT lVb l l ll(()]1C1CC1H1H1K)])]v)])]Y[)])]^^#/ k kF k kR k kBS kUa k k kl(()\1C1CC1H1H1K)\)\v)\)\XZ)\)\]]Bww#/ k k6 k kR k kBS kUa k k kl(()\1C1CC1H1H1K)\)\f)\)\XZ)\)\]]#/ j j6 j jB j jAR jT` j j jl(()[1C1CC1H1H1K)[)[f)[)[WY)[)[\\#|1133;;CCCVROOs   /A

AAc                     d| v rd}d}d}n+d| v rd}d}d}n d	| v rd
}d}d}nd| v rd}d}d}n
d| v rd}d}d}d| v rd}nd}||||fS )N360p360ki  ih  480p480kiV  i  540p540ki  i  720p720ki   i  1080p1080ki  i8  x265libx265libx264 )r  bit_rateheightwidthr_   s        r   determine_encoding_settingsrC    s    """	$	$	$	$	$	$	$	$	$	%	%	%"""VUE))r   )8r)   r   rn   r   r   r   r   r   urllib.parser(  imdbr   celeryr   elasticsearchr   
base.utilsr   configr   r   r	   r
   r   r   r   r   r   r   r   r   rK   r3   rD   rM   r\   r`   rc   r,   r}   r   r   r   r   r   r   r   r   r   r   r   r  r  r   r0  rC  r?  r   r   <module>rJ     s   				       				                    ' ' ' ' ' ' % % % % % % o  o  o  o  o  o  o  o  o  o  o  o  o  o  o  o  o  o  o  o  o  o  o  o  o  o	 	 	    8+ + + + +Z    G G G G G8    (' ' '"1C 1 1 1 1 1.C C C  -3 - - - -(	&5 	& 	& 	& 	&  &; &; &;P  2S s    ^S ^ ^ ^ ^,#    >' 's ' ' ' ' ''s 's '^a ' ' ' 'R@s @c @s @X[ @ @ @ @>/P3 /P /P /Pad /P /P /P /Pb*3 * * * * * *r   