
    i                         d dl Z d dlmZmZ d dlmZmZ d dlmZ d dlm	Z	m
Z
m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 d
ededee   fdZ	 dded
ededee   def
dZdedededdfdZy)    N)datetimetimezone)ListOptional)Bot)TelegramForbiddenErrorTelegramRetryAfterTelegramBadRequest)logger)selectupdate)AsyncSession)BroadcastMessageBroadcastStatusBroadcastTarget	MediaTypeUserLanguagesessiontargetreturnc                 R  K   ddl m} t        t        j                        j                  t        j                  dk(  t        j                  dk(        }|t        j                  k(  rQt        j                  t        j                         |d      z
  }|j                  t        j                  |k\        }n.|t        j                  k(  rPt        j                  t        j                         |d      z
  }|j                  t        j                  |k\        }n|t        j                  k(  r1|j                  t        j                   t"        j$                  k(        }n|t        j&                  k(  r1|j                  t        j                   t"        j(                  k(        }nC|t        j*                  k(  r0|j                  t        j                   t"        j,                  k(        }| j/                  |       d{   }|j1                         D cg c]  }|d   	 c}S 7 %c c}w w)	z-Target ga qarab user Telegram ID larini olishr   )	timedeltaFT   )days   N)r   r   r   r   telegram_idwhere	is_banned	is_activer   	ACTIVE_7Dnowr   utclast_active_at
ACTIVE_30DLANG_UZlanguager   UZLANG_RURULANG_ENENexecuteall)r   r   r   qsinceresultrows          F/home/empty/Documents/pet_projects/kinoBot/bot/services/broadcaster.pyget_target_user_idsr4      sp    
 #t &&t~~'>RV@VWA***X\\*YA->>GGD''501	?--	-X\\*YB-??GGD''501	?**	*GGDMMX[[01	?**	*GGDMMX[[01	?**	*GGDMMX[[01??1%%F$jjl+sCF++ &+s$   G8H':H ;H'H"H'"H'bot	broadcastuser_idsc                    K   t        |      }d}d}t        j                  |_        t	        j
                  t        j                        |_        ||_	        |j                          d{    t        j                  d|j                   d| d       t        |      D ]  \  }}		 t        | |	|       d{    |dz  }|r |dz   dz  dk(  r	  |||z   |       d{    t5        j6                  d       d{    |dz   dz  dk(  sl||_        ||_        |j                          d{     t        j@                  |_        ||_        ||_        t	        j
                  t        j                        |_!        |j                          d{    t        j                  d|j                   d| d|        |S 7 W7 # t         $ r` |j#                  t%        t&              j)                  t&        j*                  |	k(        j-                  d             d{  7   |dz  }Y nt.        $ r}
t        j0                  d	|
j2                   d
       t5        j6                  |
j2                         d{  7   	 t        | |	|       d{  7   |dz  }n# t8        $ r |dz  }Y nw xY wY d}
~
d}
~
wt8        $ r+}
t        j:                  d|	 d|
        |dz  }Y d}
~
*d}
~
ww xY w7 # t8        $ r Y w xY w7 7 7 zw)u   
    Broadcast xabarini yuborish.
    Telegram rate limit: 30 msg/sec — biz 25 ta/sek yuboramiz.

    Args:
        progress_callback: async funksiya (sent, total) — progress bildirish uchun
    r   NzBroadcast #z boshlandi. Jami: z user   F)r    zRate limit! zs kutilyapti...zUser z ga yuborishda xatolik: 2   g{Gz?d   z yakunlandi. Yuborildi: z, Xato: )"lenr   RUNNINGstatusr   r"   r   r#   
started_attotal_userscommitr   infoid	enumerate_send_to_userr   r-   r   r   r   r   valuesr	   warningretry_afterasynciosleep	Exceptionerror
total_senttotal_failedDONEfinished_at)r5   r   r6   r7   progress_callbacktotalsentfailediuser_ides              r3   run_broadcastrX   /   s     MEDF '..I#<<5I!I
..

KK+ill^+=eWEJK) '#
7	Wi888AID. !a%2!2'vu===
 mmD!!! ES=A#'I %+I".."""O'#T '++II#I$LL6I
..

KK
ill^ $V8F8	-
 s  9% 	//tt''723%(  
 aKF! 	NN\!--HI--...#C)<<<	 ! 	LL5	)A!EFaKF	 >  	" # s#  A'L)G *;L&G6G7	G LK5K2K5"L:L;L!L,L-A$LL/LGAK/ H#!
K/+L.K/6AJ8;I><J8JJ
JJ8J/,J8.J//J82L8K/ K*$L*K//L2K55	L>LLLLLrV   c                 6  K   |j                   xs d}|j                  }|j                  }|t        j                  k(  r|r| j                  |||       d{    y|t        j                  k(  r|r| j                  |||       d{    y|t        j                  k(  r|r| j                  |||       d{    y|t        j                  k(  r|r| j                  |||       d{    y| j                  ||       d{    y7 7 7 W7 '7 w)u   Bitta usergа xabar yuborish )chat_idphotocaptionN)r[   videor]   )r[   documentr]   )r[   	animationr]   )r[   text)ra   media_file_id
media_typer   PHOTO
send_photoVIDEO
send_videoDOCUMENTsend_document	ANIMATIONsend_animationsend_message)r5   rV   r6   ra   file_idrc   s         r3   rE   rE      s     >>RD%%G%%JY__$nnWGTnJJJ	y	&7nnWGTnJJJ	y))	)g'4PPP	y**	*w  GT RRR wT::: 	KJPR 	;sZ   ADD1D	D
1D;D<1D-D.D	D
DDDDD)N)rI   r   r   typingr   r   aiogramr   aiogram.exceptionsr   r	   r
   logurur   
sqlalchemyr   r   sqlalchemy.ext.asyncior   bot.database.modelsr   r   r   r   r   r   intr4   rX   rE        r3   <module>rx      s     ' !  ] ]  % / ,,, 
#Y,F O	OO  O 3i	O Od;	;;  ; 
	;rw   