U
    !j                     @  s   d Z ddlm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 edZddd	d
dZddd	ddZdddddZddddZdS )u   Фоновый поллер: по каждому порталу читает свежие входящие сообщения,
генерирует черновик и отправляет оператору карточку на согласование.    )annotationsN)draft_reply)settingspollerdictbool)dialogreturnc                 C  s*   |  dpi }|  ddkp(| ddkS )u   Фильтр обслуживаемых диалогов. По умолчанию — личные чаты (1-на-1).
    Расширь под свои нужды (например, по конкретным chat_id или группам).chattypeuser)getr   r
    r   -/var/www/spa-bitrix.ru/bitrix_asist/poller.pySHOULD_HANDLE   s    r   z
str | Nonec                 C  sT   |  ddkr*|  dr*t| d  dS |  dp6i }| drPd|d  S d S )Nr   r   idr
   )r   strr   r   r   r   
_dialog_id   s    
r   r   None)domainr	   c                   s~  t | }|r|dsd S |d }t| I d H }|D ]>}t|sHq8t|}|sVq8t| |tj	I d H }|srq8t
|dd d}t | |}t|d dd}	|	|krq8|d }
t|
dt|krt | ||	 q8zt||I d H }W n< tk
r* } ztd	| || W Y q8W 5 d }~X Y nX t j| ||
d
pBd d d |d}t| ||I d H  t | ||	 q8d S )Noperator_idc                 S  s   t | ddS )Nr   r   )intr   )mr   r   r   <lambda>4       z!_process_portal.<locals>.<lambda>)keyr   r   Z	author_idzdraft failed for %s/%s: %stext i  )r   	dialog_idincomingdraft)store
get_portalr   bitrixrecent_dialogsr   r   dialog_messagesr   context_limitsorted
get_cursorr   r   
set_cursorr   	Exceptionlogwarningcreate_pendingstripapprovalpresent_draft)r   portalr   Zdialogsdr    ZmsgsZmsgs_sortedZ	last_seenZ	newest_idZlast_msgr"   ependingr   r   r   _process_portal"   sH    

r7   )r	   c                    sx   t dtj t D ]H} zt| I d H  W q tk
r\ } zt d| | W 5 d }~X Y qX qt	
tjI d H  qd S )Nzpoller started, interval=%sszportal %s poll error: %s)r-   infor   poll_intervalr#   all_portal_domainsr7   r,   r.   asynciosleep)r   r5   r   r   r   	poll_loopR   s    "r=   )__doc__
__future__r   r;   loggingr%   r#   r1   Zclaude_drafterr   configr   	getLoggerr-   r   r   r7   r=   r   r   r   r   <module>   s   
	0