o
    eOjX                     @   s   d dl mZ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 d dlmZ d dlmZ d dlmZ d d	lmZ d
dhZdhZddedefddZG dd deZdS )    )Any	AwaitableCallable)BaseMiddleware)TelegramObjectMessageCallbackQuery)AsyncSession)settings)get_active_channels)check_user_subscriptions)build_subscription_keyboard)get_textz/startz/help	check_subNchannelsreturnc              	      sb   i }|D ])}|j s.|js.z| |jI dH }|||j< |dur#||_ W q ty-   Y qw q|S )zDYopiq kanallar uchun invite link generatsiya qilish va DB'ga saqlashN)invite_linkchannel_usernameexport_chat_invite_link
channel_id	Exception)botr   sessionurlschlink r   I/var/www/www-root/data/www/ai-bot.pdev.uz/bot/middlewares/subscription.py_get_invite_links   s   
r   c                   @   sJ   e Zd ZdZdeeeeef ge	e f dedeeef defddZ
dS )	SubscriptionMiddlewarezm
    Majburiy kanal obunasini tekshiradi.
    Adminlar va super adminlar bu middleware'dan o'tib ketadi.
    handlereventdatar   c                    s  ddl m} ddlm} |d}|d}|d}|dd}	|d}
|r-|r-|
s5| |I d H S |jtjv rC| |I d H S |rR|jd urR| |I d H S t t	ru j
ru j
d	rg j
 d nd
}|tv ru| |I d H S t tr jrt fddtD r| |I d H S t|I d H }|s| |I d H S t|
|j|dI d H }|s| |I d H S td|	}t|
||dI d H }t||	|d}t t	r݈ j||dI d H  d S t tr jj||dI d H    I d H  d S )Nr   )Userevent_from_userdb_userr   languzr   / c                 3   s    | ]	} j |V  qd S N)r"   
startswith).0bpr!   r   r   	<genexpr>K   s    z2SubscriptionMiddleware.__call__.<locals>.<genexpr>)r   user_idr   zsubscription-required)r   )channel_urls)reply_markup)aiogram.typesr#   bot.database.modelsgetidr
   super_admin_listadmin_profile
isinstancer   textr+   splitBYPASS_COMMANDSr   r"   anyBYPASS_CALLBACKSr   r   r   r   r   answermessage)selfr    r!   r"   TgUserDbUsertg_userr%   r   r&   r   cmdr   not_subscribedr:   r1   keyboardr   r.   r   __call__)   sR   







zSubscriptionMiddleware.__call__N)__name__
__module____qualname____doc__r   r   dictstrr   r   rH   r   r   r   r   r   #   s    
r   r*   )typingr   r   r   aiogramr   r3   r   r   r   sqlalchemy.ext.asyncior	   
bot.configr
   bot.database.crud.channelr   !bot.services.subscription_checkerr   bot.keyboards.user_kbr   bot.services.i18nr   r<   r>   listrM   r   r   r   r   r   r   <module>   s    