Ë
    >$ÔjI  ã                   óB  — d 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  ej,                  ed	z  j/                  «       «      d
   Zdee   fd„Zdedee   fd„ZdZdZdZ d„ Z!d„ Z"dd„Z#dd„Z$ddefd„Z%dedefd„Z&g d¢Z'y)zOSelecao das conversas relevantes, texto das midias e envio para o grupo Agente.é    N)ÚThreadPoolExecutor)Údatetimeé   )Úllm)Ú	mensagens)ÚAPI_WHATSAPPÚDADOSÚDIAS_PROJETOSÚ	DIR_MIDIAÚFUSOÚMAX_MIDIA_MBÚMODELO_MIDIAÚSEGREDOSzwhatsapp.jsonÚgrupoAgenteÚreturnc                  ó2  — t        j                  t        dz  j                  «       «      } | j	                  di «      }|j	                  d«      |j	                  d«      fD �cg c]+  }|sŒ|j                  d«      d   j                  d«      d   ‘Œ- c}S c c}w )z6Numero e LID do usuario, para achar mencoes em grupos.zwhatsapp-auth/creds.jsonÚmeÚidÚlidÚ:r   Ú@)ÚjsonÚloadsr	   Ú	read_textÚgetÚsplit)Úcredsr   Úxs      ú7/home/ubuntu/projetos/agente-tarefas/agente/whatsapp.pyÚmeus_idsr       s}   € ä�J‰JœÐ :Ñ:×EÑEÓGÓH€EØ	�‰�4˜Ó	€BØ46·F±F¸4³LÀ"Ç&Á&ÈÃ-Ñ3PÓVÑ3P¨aÒTUˆA�G‰G�C‹L˜‰O×!Ñ! #Ó& qÓ)Ð3PÑVÐVùÒVs   Á!BÁ)(BÚdesde_tsc           
      ó  — t        «       }|j                  d| f«      D �cg c]  }|d   ‘Œ	 }}|j                  d| f«      D �cg c]  }|d   ‘Œ	 }}dj                  dgt        t	        «       «      dz   z  «      }|j                  d|› d�| gt	        «       D �cg c]  }d	|› d
�‘Œ
 c}¢d‘­«      D �cg c]  }|d   ‘Œ	 }}t
        j                  ||z   |z   «      D �cg c]  }|t        k7  sŒ|‘Œ c}S c c}w c c}w c c}w c c}w c c}w )zMConversas diretas + grupos onde o usuario falou + grupos onde foi mencionado.zKSELECT DISTINCT chat FROM mensagens WHERE ts > ? AND chat NOT LIKE '%@g.us'r   zcSELECT chat FROM mensagens WHERE ts > ? AND chat LIKE '%@g.us' GROUP BY chat HAVING SUM(de_mim) > 0z OR ztexto LIKE ?r   zMSELECT DISTINCT chat FROM mensagens WHERE ts > ? AND chat LIKE '%@g.us' AND (Ú)z%@Ú%z%Penna%)r   ÚexecuteÚjoinÚlenr    ÚdictÚfromkeysÚGRUPO_AGENTE)	r!   ÚconÚrÚdiretasÚgruposÚfiltroÚiÚmencoesÚcs	            r   Úchats_relevantesr3      sO  € ä
‹+€CØ Ÿ[™[ØUÐX`ÐWbôdó eñ d˜ˆq�‹tð d€Gð eàŸK™KØmØ	ˆôó ñ �qˆa�‹dð €Fð ð �[‰[˜.Ð)¬S´³«_¸qÑ-@ÑAÓB€FØ Ÿ[™[Ø
WÐX^ÐW_Ð_`ÐaØ	Ð?¬¬
Ó3©
 1�r˜!˜˜A’Y¨
Ñ3Ð?°YÑ?ôAó Bñ A˜ˆq�‹tð A€Gð Bô —}‘} W¨vÑ%5¸Ñ%?Ô@ÓVÑ@�!ÀAÌÓDUŠAÐ@ÑVÐVùòeùòùò 4ùòBùò Ws#    C3ÁC8ÂC=Â2DÃDÃ,DzPTranscreva fielmente este audio em portugues. Responda apenas com a transcricao.z¸Extraia deste documento o que importa para a agenda de quem o recebeu: resumo em ate 12 linhas, incluindo TODAS as datas, horarios, prazos, tarefas, responsaveis e valores mencionados.z÷Descreva esta imagem em 1 a 3 linhas. Se houver texto (print de conversa, aviso, cronograma, comprovante, convite), transcreva datas, horarios, prazos e tarefas. Se for meme, figurinha ou foto sem informacao util, responda apenas: [sem informacao]c                 óâ  — | j                   j                  «       }| j                  «       }|dk(  s|dk(  rt        j                  |d«      t
        gS |dk(  rIdd l}dj                  d„ |j                  t        j                  |«      «      j                  D «       «      }nÁ|dv r¥dd l}|j                  t        j                  |«      dd¬	«      }g }	|j                  d d
 D ]T  }
|
j                  dd¬«      D ]<  }t!        d„ |D «       «      sŒ|	j#                  dj                  d„ |D «       «      «       Œ> ŒV dj                  |	«      }n|dv r|j%                  dd«      }ny d|› d|d d › �t
        gS )Nz.pdfzapplication/pdfz.docxr   Ú
c              3   ó4   K  — | ]  }|j                   –— Œ y ­w©N)Útext)Ú.0Úps     r   Ú	<genexpr>z#_texto_documento.<locals>.<genexpr>7   s   è ø€ ÐVÑ*U Q˜!Ÿ&�&Ñ*Uùs   ‚)z.xlsxz.xlsmT)Ú	read_onlyÚ	data_onlyé   éÈ   )Úmax_rowÚvalues_onlyc              3   ó$   K  — | ]  }|d u–— Œ
 y ­wr7   © ©r9   Úvs     r   r;   z#_texto_documento.<locals>.<genexpr>>   s   è ø€ Ð2©c¨�q ”}©cùs   ‚z | c              3   ó:   K  — | ]  }|€dn
t        |«      –— Œ y ­w)NÚ )ÚstrrD   s     r   r;   z#_texto_documento.<locals>.<genexpr>?   s    è ø€ Ð,VÑRUÈQ°1°9©RÄ#ÀaÃ&Ó-HÑRUùs   ‚)z.txtz.csvz.mdzutf-8ÚreplacezDocumento 'z':
i`ê  )ÚsuffixÚlowerÚ
read_bytesr   Úparte_bytesÚ
PROMPT_DOCÚdocxr&   ÚDocumentÚioÚBytesIOÚ
paragraphsÚopenpyxlÚload_workbookÚ
worksheetsÚ	iter_rowsÚanyÚappendÚdecode)ÚcaminhoÚmimeÚnomeÚextÚdadosrO   ÚtextorT   ÚwbÚlinhasÚwsÚrows               r   Ú_texto_documentore   0   sQ  € Ø
�.‰.×
Ñ
Ó
 €CØ×ÑÓ €EØ
ˆf‚}˜Ð 1Ò1Ü—‘ Ð'8Ó9¼:ÐFÐFØ
ˆg‚~ÛØ—	‘	ÑV¨$¯-©-¼¿
¹
À5Ó8IÓ*J×*UÒ*UÓVÓV‰Ø	Ð"Ñ	"ÛØ×#Ñ#¤B§J¡J¨uÓ$5ÀÐQUÐ#ÓVˆØˆØ—-‘-  Ó#ˆBØ—|‘|¨C¸T�|ÖB�ÜÑ2©cÓ2Õ2Ø—M‘M %§*¡*Ñ,VÑRUÓ,VÓ"VÕWñ Cð $ð —	‘	˜&Ó!‰Ø	Ð'Ñ	'Ø—‘˜W iÓ0‰àØ˜$˜˜t E¨&¨5 M ?Ð3´ZÐ@Ð@ó    c                 óŠ  — t         | d   z  }|j                  «       r'|j                  «       j                  t        dz  dz  kD  ry | d   dk(  rFt        j                  |j                  «       | d   xs dj                  d«      d   «      t        g}d	}n| d   d
k(  r4t        j                  |j                  «       | d   xs d«      t        g}d}nCt        || d   | d   xs |j                  «      }d| d   xs d› �j                  «       }|€d|› d�S t        j                  t        |dd¬«      j                  «       }d|› d|› �S )NÚmidiai   ÚtipoÚaudioMessager\   z	audio/oggÚ;r   ÚaudioÚimageMessagez
image/jpegÚimagemÚnome_arquivoz
documento rG   Ú[z: formato nao lido]i   )Ú	max_saidaÚetapaú] )r   ÚexistsÚstatÚst_sizer   r   rM   rL   r   ÚPROMPT_AUDIOÚ
PROMPT_IMGre   ÚnameÚstripÚgerarr   )Úmr[   ÚconteudoÚrotulor`   s        r   Ú_processar_midiar   H   sD  € Ü˜!˜G™*Ñ$€GØ�>‰>Ô˜wŸ|™|›~×5Ñ5¼ÀtÑ8KÈdÑ8RÒRØØˆ�y�NÒ"Ü—O‘O G×$6Ñ$6Ó$8¸1¸V¹9Ò;SÈ×:ZÑ:ZÐ[^Ó:_Ð`aÑ:bÓcÔeqÐrˆØ‰Ø	
ˆ6‰�nÒ	$Ü—O‘O G×$6Ñ$6Ó$8¸!¸F¹)Ò:SÀ|ÓTÔV`ÐaˆØ‰ä# G¨Q¨v©Y¸¸.Ñ8IÒ8YÈWÏ\É\ÓZˆØ˜a Ñ/Ò5°2Ð6Ð7×=Ñ=Ó?ˆØÐØ�v�hÐ1Ð2Ð2Ü�I‰I”l H¸ÀGÔL×RÑRÓT€EØˆvˆh�b˜˜Ð Ð rf   c                 ón  — t        «       }dj                  dt        |«      z  «      }|j                  d|› d�|g|¢­«      D �cg c]  }t	        |«      ‘Œ }}| j                  d«      D �ch c]  }|d   |d   f’Œ }}|D �	cg c]  }	|	d   |	d   f|vsŒ|	‘Œ }}	d„ }
d	}t        |«      5 }|j                  |
|«      D ]A  \  }	}|sŒ	| j                  d
|	d   |	d   |f«       |dz  }|dz  d	k(  sŒ2| j                  «        ŒC 	 ddd«       | j                  «        |S c c}w c c}w c c}	w # 1 sw Y   Œ*xY w)zCTranscreve/le as midias ainda sem texto. Devolve quantas processou.Ú,Ú?z|SELECT chat, id, tipo, mime, midia, nome_arquivo FROM mensagens
            WHERE midia IS NOT NULL AND ts > ? AND chat IN (z[)
              AND tipo IN ('audioMessage', 'imageMessage', 'documentMessage') ORDER BY tsz SELECT chat, id FROM midia_textoÚchatr   c                 óŒ   — 	 | t        | «      fS # t        $ r+}| d| d   › dt        |«      j                  › d�fcY d }~S d }~ww xY w)Nrp   ri   z: erro ao ler (z)])r   Ú	ExceptionÚtypeÚ__name__)r|   Úes     r   Útarefaz processar_midias.<locals>.tarefag   sT   € ð	IØÔ& qÓ)Ð)Ð)øÜò 	IØ˜˜!˜F™)˜ O´D¸³G×4DÑ4DÐ3EÀRÐHÐHÕHûð	Iús   ‚ �	A˜ >¸A¾Ar   z3INSERT OR REPLACE INTO midia_texto VALUES (?, ?, ?)r   é   N)r   r&   r'   r%   r(   r   ÚmapÚcommit)Ú
con_agenteÚchatsr!   Úparalelor+   Úmarcasr,   Ú	pendentesÚfeitosr|   r‰   ÚnÚexr`   s                 r   Úprocessar_midiasr•   [   sq  € ä
‹+€CØ�X‰X�cœC ›JÑ&Ó'€FØ"%§+¡+ð=Ø=C¸Hð EZð	]ð 
Ð�EÑô	#ó ñ #˜Q”�a•ð #€Ið ð
 -7×,>Ñ,>Ð?aÔ,bÓcÑ,b qˆq�‰y˜!˜D™'Ò"Ð,b€FÐcÙ%ÓL™I�q¨!¨F©)°Q°t±WÐ)=ÀVÒ)K’˜I€IÐLòIð 	
€AÜ	˜HÔ	%¨ØŸ™˜v yÖ1‰HˆAˆuÚØ×"Ñ"Ð#XÐ[\Ð]cÑ[dÐfgÐhlÑfmÐotÐZuÔvØ�Q‘�Ø�r‘6˜Q“;Ø×%Ñ%Õ'ñ 2÷ 
&ð ×ÑÔØ€Hùò/ùò
 dùÚL÷ 
&Ð	%ús0   ÁDÁ+D!ÂD&ÂD&Â*D+Ã(D+Ã/D+Ä+D4c                 ó\  — t        «       }d|rdndz   dz   }g }|j                  ||r|||fn||f«      D ]õ  }|d   }|d   dv rZ| j                  d||d	   f«      j                  «       }	|	r|	d   nd
|d   j                  dd«      › d�}
d|
v r|sŒ[|
› |rd|› �ndz   }n|d   dv rŒq|sŒtt	        j
                  |d   t        «      j                  d«      }|d   xs |d   rdn|d   xs d}|d   rd|d   dd › d|› �}|j                  |d	   |d   d
|› d|› d|› �|d   |d   dœ«       Œ÷ |S )zQMensagens de um chat como dicts com o texto final (incluindo midias transcritas).z3SELECT * FROM v_mensagens WHERE chat = ? AND ts > ?z AND ts <= ?rG   z ORDER BY tsr`   ri   )rj   rm   ÚdocumentMessagez7SELECT texto FROM midia_texto WHERE chat = ? AND id = ?r   rp   ÚMessagez
 nao lido]z[sem informacao]z | legenda: )ÚstickerMessageÚtsz%a %d/%m %H:%MÚ
autor_nomeÚem_grupoÚalguemÚ	chat_nomeÚcontatoÚcitadaz(respondendo a: "Néx   z") rs   z: )r   rš   r`   rž   rœ   )	r   r%   ÚfetchonerI   r   Úfromtimestampr   ÚstrftimerY   )r�   rƒ   r!   Úate_tsr+   Úqrb   r,   r`   Úmtrh   ÚquandoÚautors                r   Úlinhas_conversarª   z   sž  € ä
‹+€CØ=ÑSYÁÐ_aÑbÐesÑs€AØ€FØ�[‰[˜¹˜T 8¨VÑ4ÀTÈ8ÐDTÖUˆØ�'‘
ˆØˆV‰9ÐKÑKØ×#Ñ#Ð$]Ð`dÐfgÐhlÑfmÐ_nÓo×xÑxÓzˆBÙ#%�B�w’K¨Q¨q°©y×/@Ñ/@ÀÈBÓ/OÐ.PÐPZÐ+[ˆEØ! UÑ*±5ØØ�g¹E L°°Ñ"8ÀrÑJ‰EØˆv‰YÐ-Ñ-ØÙØÜ×'Ñ'¨¨$©´Ó6×?Ñ?Ð@PÓQˆØ�,‘Òa°°*²¡HÀAÀkÁNÒD_ÐV_ˆØˆXŠ;Ø(¨¨8©°T°cÐ):Ð(;¸4À¸wÐGˆEØ�‰˜Q˜t™W¨A¨d©GÀÀ&ÀÈÈEÈ7ÐRTÐUZÐT[Ð>\Ø$% k¡NÀÀ*ÁñOõ 	Pð! Vð$ €Mrf   r`   c           	      ó  — | j                  dd«      } t        j                  j                  t        › d�t        j                  d| i«      j                  «       ddid¬«      }t        d	«      D ]8  }	 t        j                  t        j                  j                  |d
¬«      «      } n |�5j                  d«      r$ddlm}m}  ||d ||dg «      |d   gz   dd «       S # t        $ r |dk(  r‚ t        j                  d«       Y Œšw xY w)z^Envia ao grupo Agente. Com `con`, registra o id para os comandos nao lerem a propria mensagem.z**Ú*z/enviarr`   zContent-Typezapplication/jsonÚPOST)ÚdataÚheadersÚmethodé   é   )Útimeouté   é
   Nr   r   )Ú	progressoÚsalvar_progressozwa:enviadasiÔþÿÿ)rI   ÚurllibÚrequestÚRequestr   r   ÚdumpsÚencodeÚrangeÚloadÚurlopenr…   ÚtimeÚsleepr   Úbancor¶   r·   )r`   r+   ÚreqÚ	tentativar,   r¶   r·   s          r   ÚenviarrÅ   •   sÿ   € à�M‰M˜$ Ó$€EÜ
�.‰.×
 Ñ
 ¤L >°Ð!9ÄÇ
Á
ÈGÐUZÐK[Ó@\×@cÑ@cÓ@eØ*8Ð:LÐ)MÐV\ð !ó ^€Cä˜1–Xˆ	ð	Ü—	‘	œ&Ÿ.™.×0Ñ0°¸bÐ0ÓAÓBˆAÙð ð €˜1Ÿ5™5 œ;ß6Ù˜˜m©i¸¸]ÈBÓ.OÐSTÐUYÑSZÐR[Ñ.[Ð]aÐ]bÐ-cÔdØ€Høô ò 	Ø˜AŠ~ØÜ�J‰J�rŽNð	ús   Á14C!Ã!$DÄDÚdiasc                 óH   — t        t        j                  «       «      | dz  z
  S )Ni€Q )ÚintrÀ   )rÆ   s    r   ÚdesderÉ   ¨   s   € ÜŒt�y‰y‹{Ó˜d U™lÑ*Ð*rf   )r3   r•   rª   rÅ   rÉ   r
   )é   r7   )(Ú__doc__rQ   r   rÀ   Úurllib.requestr¸   Úconcurrent.futuresr   r   rG   r   rÂ   r   Úconfigr   r	   r
   r   r   r   r   r   r   r   r*   ÚlistrH   r    rÈ   r3   rw   rN   rx   re   r   r•   rª   rÅ   rÉ   Ú__all__rC   rf   r   Ú<module>rÑ      sÔ   ðÙ UÛ 	Û Û Û Ý 1Ý å Ý ÷÷ ó ð ˆt�z‰z˜8 oÑ5×@Ñ@ÓBÓCÀMÑR€ðW�$�s‘)ó WðW˜sð W t¨C¡yó Wð  b€ði€
ðL€
ò
Aò0!ó&ó>ñ6�#ó ð&+�ð +˜ó +ò j�rf   