
    \d                     "   d dl mZ d dlZd dlmZ d dlmZmZ d dl	m
Z
mZ d dlmZ d dl d dlmZ  G d	 d
e      Z G d de      Zej&                  j)                         Zej/                   ed             ej1                   ed             y)    )DictN)	Namespace)AsyncClientNamespaceClientNamespace)before_requestcmf_context)commit_all_ds)*)CmfMainNamespacec                       e Zd ZdZd Zd Zy)CmfWhatsappNamespaceu<   
    Отправляем события на messenger
    c                 p    t         j                  j                  |d         }|r|j                          yy)u   
        Отправляем запрос на подключение к web.whatsapp.com через whatsapp.active360.ru
        :param data:
        :param args:
        :param kwargs:
        :return:
        idr   N)modelsCmfWhatsappgetconnectselfdataargskwargssessions        ./modules/crm/views/whatsapp.pyon_whatsapp_connectz(CmfWhatsappNamespace.on_whatsapp_connect   s3     $$((DJ(7OO     c                 p    t         j                  j                  |d         }|r|j                          y y )Nr   r   )r   r   r   check_statusr   s        r   on_whatsapp_statusz'CmfWhatsappNamespace.on_whatsapp_status   s3    $$((DJ(7  " r   N)__name__
__module____qualname____doc__r   r     r   r   r   r      s    
#r   r   c                        e Zd ZdZed        Z fdZd ZdefdZ	d Z
dedd	fd
Zd Zd Zd Zd Zd Zd Zd Z xZS )CmfWhatsappClientNamespaceu   
    Для получения и обработки событий с whatsapp.active360.ru отправленных через прокси
    c                 "    t         j                  S )N)APPlogger)r   s    r   r*   z!CmfWhatsappClientNamespace.logger(   s    zzr   c                 B   t        d      5  t        j                  d|        	 t        t        |   |g| }|cd d d        S # t        $ rB}t        |       t        j                         }|j                  |       Y d }~d d d        yd }~ww xY w# 1 sw Y   y xY w)NFinit_views_and_dszEvent from messenger error)r   gdebugsuperr'   trigger_event	Exceptionr	   logging	getLogger	exception)r   eventr   reser*   	__class__s         r   r2   z(CmfWhatsappClientNamespace.trigger_event,   s    51 		GG+E7346KEYTXY			 		
  a  **,  #		 		
		 		s.   BA	B0B BBBBc                 B    t        dt        j                   d|        y)u[   
        Читаем событие message
        :param data:
        :return:
        u   Событие с z: N)printconfigWHATSAPP_MESSENGER_URLr   r   s     r   
on_messagez%CmfWhatsappClientNamespace.on_message8   s!     	"6#@#@"AD6JKr   r   c                     t        ||       y)u   
        Метод отправки событий на фронтэнд
        :param event: имя события
        :param data: данные в dict
        :return:
        N)cmf_emit_event)r   r7   r   s      r   send_to_frontz(CmfWhatsappClientNamespace.send_to_front@   s     	ud#r   c                 (    | j                  d|       y)u   
        При получении qr кода, перенаправляем его во фронт
        :param data:
        :param args:
        :param kwargs:
        :return:
        zwhatsapp-generated_qr_codeNrC   r   r   r   r   s       r   on_generated_qr_codez/CmfWhatsappClientNamespace.on_generated_qr_codeI   s     	7>r   returnNc                 (    | j                  d|       y)u   
        При получении ошибки сканирования QRcode без бета режима, перенаправляем на фронт
        :param data: данные ответа из whatsapp
        zerr-scanned-without-multideviceNrE   r?   s     r   on_scanned_without_multidevicez9CmfWhatsappClientNamespace.on_scanned_without_multideviceS   s    
 	<dCr   c                 (    | j                  d|       y )Nwhatsapp_qrcode_timeoutrE   r?   s     r   on_whatsapp_qrcode_timeoutz5CmfWhatsappClientNamespace.on_whatsapp_qrcode_timeoutZ   s    4d;r   c                     t         j                  j                  |d         }|rAd|_        |j	                          | j                  d|j                  j                   |       y y )Ncrm_message_idr   r.   zsend_message_error-)r   CmfChannelMessager   message_statussaverC   parentr   r   r   channel_msgs      r   on_whatsapp_send_message_errorz9CmfWhatsappClientNamespace.on_whatsapp_send_message_error]   sb    ..22d;K6L2M)0K&!4[5G5G5J5J4KLdS r   c                     t         j                  j                  |d         }|rK|d   |_        d|_        |j                          | j                  d|j                  j                   |       y y )NrO   r   
message_idsentzsend_message_success-)	r   rP   r   rX   rQ   rR   rC   rS   r   rT   s      r    on_whatsapp_send_message_successz;CmfWhatsappClientNamespace.on_whatsapp_send_message_successd   sp    ..22d;K6L2M%),%7K")/K&!6{7I7I7L7L6MNPTU	 r   c                 (    | j                  d|       y)u   
        Успешно подключились к web.whatsapp.com
        :param data:
        :param args:
        :param kwargs:
        :return:
        zwhatsapp-connectedNrE   rF   s       r   on_whatsapp_connectedz0CmfWhatsappClientNamespace.on_whatsapp_connectedl   s     	/6r   c                    |d   D ]|  }t         j                  j                  |d   j                  d      d   dg      }|s=|j                  rJ|d   xs |d   }|sY||_        |j                  sm|j                          ~ y )	NcontactsJid@r   
user_local)fieldsNotifyName)r   	CmfPersonget_by_phonesplitra   name
is_changedrR   )r   r   contactpersonnew_names        r   on_whatsapp_contactsz/CmfWhatsappClientNamespace.on_whatsapp_contactsv   s    J' 	&G%%2275>3G3G3LQ3OYeXf2gFf//"8,?"*FK((	&r   c                 (    | j                  d|       y)u   
        Отключились от web.whatsapp.com
        :param data:
        :param args:
        :param kwargs:
        :return:
        zwhatsapp-disconnectedNrE   rF   s       r   on_whatsapp_disconnectedz3CmfWhatsappClientNamespace.on_whatsapp_disconnected   s     	2D9r   c                     d }| j                   j                  d       t        j                  ||       | j                   j                  d       y)u   
        Получаем сообщение из ватсапп
        :param data:
        :param args:
        :param kwargs:
        :return:
        c                     t        d      5  t        j                  j                  dd| d   gdg      }|j	                  |        d d d        y # 1 sw Y   y xY w)NFr,   r   z==crm_idload_from_date)filterrb   )r   r   r   r   receive_message)r   channels     r   runnerzGCmfWhatsappClientNamespace.on_whatsapp_message_received.<locals>.runner   sW    u5 . ,,00tT(^8T^n]o0p''-. . .s   :AAz"on_whatsapp_message_received startz on_whatsapp_message_received endN)r*   infogeventspawn)r   r   r   r   rw   s        r   on_whatsapp_message_receivedz7CmfWhatsappClientNamespace.on_whatsapp_message_received   s=    	. 	=>VT";<r   )r!   r"   r#   r$   propertyr*   r2   r@   dictrC   rG   r   rJ   rM   rV   rZ   r\   rm   ro   r{   __classcell__)r:   s   @r   r'   r'   #   ss      
L$ $?D4 DD D<TV7	&:=r   r'   z	/whatsapp/)typingr   gevent.lockry   flask_socketior   socketior   r   cmf.appr   r   cmf.data_providers.baser	   cmf.include)cmf.modules.socketio.views.main_namespacer   r   r'   lockRLock_MESSAGE_LOCKwhatsapp_sioregister_namespaceon_namespacer%   r   r   <module>r      su      $ : / 1  F#+ #,y= y=x !!#    :; G H   *3/ 0r   