+
    kHàjá"  ã                   óv  € R t ^ RIt^ RIHtHtHtHt ^ RIHt RRRR/t	RR	R
RRRRRRRRRRRRRRRRRRRRRRR R!R"R#R$/t
RR]P                  3R%R%]P                  3R&R']P                  3/tR( R) ltR* R+ ltR, R- ltR. R/ ltR0 R1 ltR2 R3 ltR4 R5 ltRR6 R&R7 R8]R9]/tR: R; ltR< R= ltR> R? ltR@ RA ltR# )BzYPure parsers for inbound DingTalk ``ChatbotMessage`` payloads (no I/O, no adapter state).N)ÚAnyÚListÚOptionalÚTuple)ÚMessageTypeÚpictureÚimageÚvoiceÚaudioÚpdfzapplication/pdfÚdoczapplication/mswordÚxlszapplication/vnd.ms-excelÚdocxzGapplication/vnd.openxmlformats-officedocument.wordprocessingml.documentÚxlsxzAapplication/vnd.openxmlformats-officedocument.spreadsheetml.sheetÚpngz	image/pngÚjpgz
image/jpegÚjpegÚgifz	image/gifÚwebpz
image/webpÚmdztext/markdownÚtxtz
text/plainÚcsvztext/csvÚzipzapplication/zipÚmp4z	video/mp4ÚvideoÚfileúapplication/octet-streamc                ó0   € V ^8„  d   QhR\         R\         /# ©é   ÚmessageÚreturn)r   )Úformats   "ÚG/home/ubuntu/.hermes/hermes-agent/plugins/platforms/dingtalk/inbound.pyÚ__annotate__r$      s   € ÷ 4ñ 4œð 4¤ñ 4ó    c                 ó0   € \        V R / 4      ;'       g    / # )Ú
extensions)Úgetattr)r    s   &r#   Ú_extensionsr)      s   € Ü�7˜L¨"Ó-×3Ð3°Ð3r%   c                óF   € V ^8„  d   QhR\         R\        \        ,          /# r   )r   r   Údict)r"   s   "r#   r$   r$      s   € ÷ :ñ :œ#ð :¤(¬4¥.ñ :r%   c                ól   € \        V 4      P                  R/ 4      p\        V\        4      '       d   V# R# )z7``extensions['content']`` when it is a dict, else None.ÚcontentN)r)   ÚgetÚ
isinstancer+   )r    r-   s   & r#   Ú_ext_contentr0      s0   € ä˜'Ó"×&Ñ& y°"Ó5€GÜ  ¬$×/Ò/ˆ7Ð9°TÐ9r%   c                óF   € V ^8„  d   QhR\         R\        \        ,          /# r   )r   r   Úlist)r"   s   "r#   r$   r$   #   s   € ÷ >ñ >œð >¤¬¥ñ >r%   c                ó¼   € \        V RR4      ;'       g    \        V RR4      pV'       g   R# \        VRR4      ;'       g    Tp\        V\        4      '       d   V# R# )ziRich-text item list from either SDK shape (``rich_text_content.rich_text_list`` or legacy ``rich_text``).Úrich_text_contentNÚ	rich_textÚrich_text_list)r(   r/   r2   )r    r5   Ú	rich_lists   &  r#   Ú
_rich_listr8   #   sX   € ä˜Ð!4°dÓ;×bÐb¼wÀwÐP[Ð]aÓ?b€IßÙÜ˜	Ð#3°TÓ:×GÐG¸i€IÜ" 9¬d×3Ò3ˆ9Ð=¸Ð=r%   c                ó0   € V ^8„  d   QhR\         R\        /# )r   Úrawr!   ©r   Ústr)r"   s   "r#   r$   r$   ,   s   € ÷ Zñ Z”ð Zœñ Zr%   c                 óŠ   € \        V \        4      '       d-   V P                  R R4      ;'       g    V P                  RR4      # R# )ÚurlÚ ÚdocUrl)r/   r+   r.   )r:   s   &r#   Ú_url_ofrA   ,   s8   € Ü<FÀsÌD×<QÒ<QˆC�G‰G�E˜2Ó×7Ð7 #§'¡'¨(°BÓ"7ÐYÐWYÐYr%   c                ó0   € V ^8„  d   QhR\         R\        /# r   r;   )r"   s   "r#   r$   r$   0   s   € ÷ jñ jœð j¤ñ jr%   c                óÌ  € \        V 4      pVP                  R/ 4      pRp\        V\        4      '       dº   VP                  RR4      VP                  RR4      rT\	        V4      p\        V\
        4      '       dE   VP                  4       '       d/    \	        \        P                  ! VP                  4       4      4      pRP                  V'       d   RV 2.M. V'       d   V.M. ,           4      pVP                  R/ 4      pT;'       gC    \        V\        4      '       d+   VP                  RR4      ;'       g    RP                  4       # R#   \        \        3 d    Tp L¤i ; i)uc   msgtype='card' (é’‰é’‰æ–‡æ¡£åˆ†äº«å�¡ç‰‡ / link card): title + doc URL from ``extensions['card']``.Úcardr?   Útitler-   Ú u	   [æ–‡æ¡£] Útext)r)   r.   r/   r+   rA   r<   ÚstripÚjsonÚloadsÚ
ValueErrorÚ	TypeErrorÚjoin)r    r'   rD   r-   rE   Úraw_contentÚdoc_urlÚext_texts   &       r#   Ú
_card_textrQ   0   s%  € ä˜WÓ%€JØ�>‰>˜& "Ó%€DØ€GÜ�$œ×ÒØ!ŸX™X g¨rÓ2°D·H±H¸YÈÓ4Kˆ{Ü˜+Ó&ˆÜ�k¤3×'Ò'¨K×,=Ñ,=×,?Ò,?ð&Ü!¤$§*¢*¨[×->Ñ->Ó-@Ó"AÓB�ð —(‘(·U˜y¨¨Ð0Ñ1À×T[ÈÁyÐacÕdÓeˆØ�~‰~˜f bÓ)€HØ×iÐiÄjÐQYÔ[_×F`ÒF`˜Ÿ™ Y°Ó3×9Ð9°r×@Ñ@ÓBÐiÐfhÐiøô	 ¤	Ð*ô &Ø%’ð&ús   Â-E ÅE#Å"E#c                ó0   € V ^8„  d   QhR\         R\        /# r   r;   )r"   s   "r#   r$   r$   B   s   € ÷ Oñ O¤Cð O¬Cñ Or%   c                ó  € \        V 4      ;'       g    / pVP                  RR4      VP                  RR4      r2V'       g	   V'       d<   RP                  V'       d   RV 2MR.V'       d   V.,           4      # . ,           4      # R# )z[msgtype='interactiveCard': ``extensions['content']`` carries title + biz_custom_action_url.Úbiz_custom_action_urlr?   rE   rF   u   [æ–‡æ¡£å�¡ç‰‡] u   [æ–‡æ¡£å�¡ç‰‡])r0   r.   rM   )r    Úext_contentrO   rE   s   &   r#   Ú_interactive_card_textrV   B   s†   € ä˜wÓ'×-Ð-¨2€KØ —_‘_Ð%<¸bÓAÀ;Ç?Á?ÐSZÐ\^ÓC_ˆUßu|÷  AFˆ3�8‰8·%� u gÑ.Ð=MÐN×_fÐSZÐR[ÕoÓpð  OÐlnÕoÓpð  Oð  MOð  Or%   c                ó<   € V ^8„  d   QhR\         R\        R\         /# )r   r    Úfieldr!   r;   )r"   s   "r#   r$   r$   I   s!   € ÷ =ñ =œð =¤Cð =¬Cñ =r%   c                 óP   € \        V 4      pV'       d   VP                  VR 4      # R # )r?   )r0   r.   )r    rX   rU   s   && r#   Ú
_ext_fieldrZ   I   s$   € Ü˜wÓ'€Kß)4ˆ;�?‰?˜5 "Ó%Ð<¸"Ð<r%   c                 óJ   € \        V R 4      ;'       g    RP                  4       # )Úrecognitionr?   )rZ   rH   ©Úms   &r#   Ú<lambda>r_   Q   s   € œ
 1 mÓ4×:Ð:¸×AÑAÔCr%   c                 óH   € \        V R 4      '       d   R\        V R 4       2# R# )ÚfileNameu	   [æ–‡ä»¶] r?   )rZ   r]   s   &r#   r_   r_   R   s(   € ÄÈAÈz×AZÒAZ˜	¤*¨Q°
Ó";Ð!<Ð=ÐbÐ`bÐbr%   rD   ÚinteractiveCardc                ó0   € V ^8„  d   QhR\         R\        /# )r   Úitemr!   r;   )r"   s   "r#   r$   r$   X   s   € ÷ +ñ +œ#ð +¤#ñ +r%   c                 óÄ   € \        V \        4      '       d5   V P                  R 4      ;'       g    V P                  R4      ;'       g    R# \        V R R4      ;'       g    R# )rG   r-   r?   )r/   r+   r.   r(   )rd   s   &r#   Ú_rich_item_textrf   X   sN   € Ü�$œ×ÒØ�x‰x˜Ó×<Ð< 4§8¡8¨IÓ#6×<Ð<¸"Ð<Ü�4˜ Ó$×*Ð*¨Ð*r%   c                ó0   € V ^8„  d   QhR\         R\        /# r   r;   )r"   s   "r#   r$   r$   ^   s   € ÷ 6ñ 6œ#ð 6¤#ñ 6r%   c                ó  € \        V RR4      ;'       g    Rp\        VR4      '       d   VP                  ;'       g    RM2\        V\        4      '       d   VP                  RR4      M
\        V4      P                  4       pV'       g   \        V 4      MRpVe5   RP                  R \        \        V4       4       4      P                  4       pV'       g!   \        P                  \        V RR4      4      MRpV'       d	   V! V 4      # T# )uô   Extract plain text from a DingTalk chatbot message. Handles both SDK shapes: legacy ``message.text`` dict ``{"content": ...}`` and >= 0.20 ``TextContent``
(whose ``__str__`` is ``"TextContent(content=...)"`` â€” always read ``.content`` first).rG   Nr?   r-   rF   c              3   ó8   "  € T F  q'       g   K  Vx € K  	  R # 5i©N© ©Ú.0Úts   & r#   Ú	<genexpr>Úextract_text.<locals>.<genexpr>e   s   é € ÐKÑ&E ËŸ1š1Ó&Eùs   ‚	�
Úmessage_type)r(   Úhasattrr-   r/   r+   r.   r<   rH   r8   rM   Úmaprf   Ú_EMPTY_TEXT_FALLBACKS)r    rG   r-   r7   Úfallbacks   &    r#   Úextract_textrv   ^   sã   € ô �7˜F DÓ)×/Ð/¨R€DÜ%,¨T°9×%=Ò%=ˆt�|‰|×!Ð!˜røÔ^hÐimÔos×^tÒ^tÀ4Ç8Á8ÈIÐWYÔCZÔz}ð  Có  {D÷  Kñ  Kó  M€Gß+2”
˜7Ô#¸€IØÒØ—(‘(ÑK¤c¬/¸9Ô&EÓKÓK×QÑQÓSˆßV]Ô$×(Ñ(¬°¸.È"Ó)MÔNÐcg€H÷ !)‰8�GÓÐ5¨gÐ5r%   c                óˆ   € V ^8„  d   QhR\         R\        \        \        \        ,          \        \        ,          3,          /# r   )r   Útupler   r2   r<   )r"   s   "r#   r$   r$   l   s.   € ÷ .-ñ .-œ3ð .-¤5¬´d¼3µiÄÄcÅÐ)JÕ#Kñ .-r%   c                óØ  € \         P                  p. p. p\        V RR4      pV'       d   \        VRR4      MR;p'       d3   VP                  V4       VP                  R4       \         P                  p\        V 4      ;'       g    R Fû  p\        V\        4      '       g   K  VP                  R4      ;'       g    VP                  R4      ;'       g    RpV'       g   KY  VP                  RR4      p\        P                  VR4      p	V	R	8X  d*   R	VR
8X  d   \         P                  M\         P                  3M\        V	,          w  r«VP                  V4       VP                  V
4       V\         P                  8X  g   Kù  TpKý  	  \        V RR4      ;'       g    RpVR8X  d   V'       g   \         P                  pEM©VR8X  db   V\         P                  8X  dK   \        ;QJ d    R V 4       F  '       g   K   RM	  RM! R V 4       4      '       d   \         P                  pEMAVR	8X  d(   V\         P                  8X  d   \         P                  pEMVR9   Ed   \        V 4      ;'       g    / pVP                  R4      ;'       g    R;p'       dÔ   VP                  RR4      p\        P                  V'       d/   RV9   d(   VP!                  R^4      R,          P#                  4       MRR4      p
VP                  V4       VP                  V
4       V\         P                  8X  d?   VR8X  g   V
P%                  R4      '       d   \         P                  M\         P&                  pWV3# )zLReturn ``(MessageType, [download codes/urls], [mime types])`` for a message.Úimage_contentNÚdownload_coder   ÚdownloadCoder?   Útyper   r
   r	   rq   r   ÚrichTextc              3   ó,   "  € T F
  pR V9   x € K  	  R# 5i)r   Nrk   rl   s   & r#   ro   Ú extract_media.<locals>.<genexpr>Š   s   é € Ð/RÁkÀ°¸1¶Ãkùs   ‚TFra   Ú.r   zimage/rk   ©r   r   éÿÿÿÿ)r   ÚTEXTr(   ÚappendÚPHOTOr8   r/   r+   r.   ÚDINGTALK_TYPE_MAPPINGÚVOICEÚAUDIOÚ_RICH_MEDIAÚanyr0   ÚEXT_MAPÚrsplitÚlowerÚ
startswithÚDOCUMENT)r    Úmsg_typeÚ
media_urlsÚmedia_typesrz   r{   rd   Údl_codeÚ	item_typeÚmappedÚmimeÚpromotedÚmsg_type_strrU   Úfnames   &              r#   Úextract_mediar›   l   sÅ  € ä×Ñ€HØ€JØ€KÜ˜G _°dÓ;€MßJWœ °ÀÔFÐ]aÐb€}ÖbØ×Ñ˜-Ô(Ø×Ñ˜7Ô#Ü×$Ñ$ˆÜ˜7Ó#×)Ð) rÒ)ˆÜ˜$¤×%Ò%ÙØ—(‘(˜>Ó*×MÐM¨d¯h©h°Ó.G×MÐMÈ2ˆßÙØ—H‘H˜V RÓ(ˆ	Ü&×*Ñ*¨9°fÓ=ˆàhnÐryÔhy˜'¸	ÀWÔ8L¤;×#4Ò#4ÔR]×RcÑRcÑdô  @Kð  LRõ  @S‰ˆØ×Ñ˜'Ô"Ø×Ñ˜4Ô Ø”{×'Ñ'Ö'ØŠHñ *ô ˜7 N°BÓ7×=Ð=¸2€LØ�yÔ ¯Ü×$Ñ$ŠØ	˜Ô	#ð ”{×'Ñ'Ô'¯C«CÑ/RÁkÓ/R¯C¯CªCÑ/RÁkÓ/R×,RÒ,RÜ"×(Ñ(ˆHùØ	˜Ô	 ð ”{×'Ñ'Ô'Ü"×(Ñ(ˆHùØ	Ð*Õ	*Ü" 7Ó+×1Ð1¨rˆØ!—o‘o nÓ5×;Ð;¸Ð;ˆ7Ö;Ø—O‘O J°Ó3ˆEÜ—;‘;Ç5ÈSÐTYÌ\˜uŸ|™|¨C°Ó3°BÕ7×=Ñ=Ô?Ð_aÐc}Ó~ˆDØ×Ñ˜gÔ&Ø×Ñ˜tÔ$Øœ;×+Ñ+Ô+Ø1=ÀÔ1HÈDÏOÉOÐ\d×LeÒLeœ;×,Ò,Ôlw÷  mAñ  mA�Ø Ð,Ð,r%   c                óh   € V ^8„  d   QhR\         R\        \        \         \        3,          ,          /# r   )r   r2   rx   r<   )r"   s   "r#   r$   r$   �   s'   € ÷ ñ ¤Cð ¬D´´s¼C°xµÕ,Añ r%   c                ó  a€ . p\        V RR4      pV'       d'   \        VRR4      '       d   VP                  VR34       \        V RR4      pV'       d   \        VR. 4      ;'       g    . M.  F6  o\        S\        4      '       g   K  VP	                  V3R lR
 4       4       K8  	  \        V RR	4      ;'       g    R	R9   d>   \        V 4      pV'       d+   VP                  R4      '       d   VP                  VR34       V# )zRReturn ``(container, key)`` pairs whose download code should be resolved to a URL.rz   Nr{   r4   r6   c              3   ó^   <"  € T F"  pSP                  V4      '       g   K  SV3x € K$  	  R # 5irj   )r.   )rm   Úkeyrd   s   & €r#   ro   Ú)collect_download_codes.<locals>.<genexpr>¦   s(   øé € ÐzÑ0h¨Ðlp×ltÑltÐux×lyœ˜$ �Ó0hùs   ƒ-¡-r|   rq   r?   )r|   ÚpictureDownloadCoder{   r‚   )r(   r…   r/   r+   Úextendr0   r.   )r    ÚcodesÚimg_contentr5   rU   rd   s   &    @r#   Úcollect_download_codesr¥   �   sÚ   ø€ à#%€EÜ˜' ?°DÓ9€Kß”w˜{¨O¸T×BÒBØ�‰�k ?Ð3Ô4Ü˜Ð!4°dÓ;€IßDM”˜Ð$4°bÓ9×?Ð?¸RøÐSUÒUˆÜ�dœD×!Ô!Ø�L‰LÔzÑ0hÓzÖzñ Vô 	�˜¨Ó,×2Ð2°Ð7HÔHÜ" 7Ó+ˆß˜;Ÿ?™?¨>×:Ò:Ø�L‰L˜+ ~Ð6Ô7Ø€Lr%   )Ú__doc__rI   Útypingr   r   r   r   Úgateway.platforms.eventr   r‡   rŒ   r†   ÚVIDEOr�   rŠ   r)   r0   r8   rA   rQ   rV   rZ   rt   rf   rv   r›   r¥   rk   r%   r#   Ú<module>rª      s$  ðÙ _ã ß -Ó -å /ð # G¨W°gÐ>Ð ð
 
Ð˜eÐ%9¸5ÐB\Ø
ÐUØ
ÐOØ	ˆ;˜˜|¨V°\À5È+ÐW]Ð_kØˆ/˜5 ,°°zÀ5ÐJ[Ð]bÐdoð€ð ˜ +×"3Ñ"3Ð4°gÀÈ×IZÑIZÐ?[Ð]cð  gAð  CN÷  CWñ  CWð  fXð  Y€õ4õ:õ>õZõjõ$Oõ=ð ÑCØ
ÑbØ
ˆJØÐ-ð	Ð õ+õ6õ.-÷br%   