
    E0j:                         d Z ddlmZmZmZ ddlZ G d de          Z G d de          Z G d	 d
e          Z G d de          Z	 G d de          Z
dS )u;   
这里提供了一些常用的卡片模板及其封装类
   )CardReplierAICardReplierAICardStatus    Nc                   p     e Zd ZdZ fdZdedefdZdefdZ	 	 	 	 ddede	de	de
de	f
dZdefdZ xZS )MarkdownCardInstance-   
    一款超级通用的markdown卡片
    c                     t          t          |                               ||           d| _        d | _        d | _        d | _        d S )Nz+589420e2-c1e2-46ef-a5ed-b8728e654da9.schema)superr   __init__card_template_idcard_instance_idtitlelogoselfdingtalk_clientincoming_message	__class__s      e/home/rurouni/.hermes/hermes-agent/venv/lib/python3.11/site-packages/dingtalk_stream/card_instance.pyr   zMarkdownCardInstance.__init__   G    "D))22?DTUUU M $
			    r   r   c                 "    || _         || _        d S Nr   r   r   r   r   s      r   set_title_and_logoz'MarkdownCardInstance.set_title_and_logo       
			r   returnc                 ~    d|i}| j         | j         dk    r
| j         |d<   | j        | j        dk    r
| j        |d<   |S )Nmarkdown r   r   r   )r   r!   	card_datas      r   _get_card_dataz#MarkdownCardInstance._get_card_data   sT    
	 :!djB&6&6!%Ig9 TY"__ $	Ifr   FNTr!   	at_senderat_all
recipientssupport_forwardc                 v    |                      | j        |                     |          ||||          | _        dS )u   
        回复markdown内容
        :param recipients:
        :param support_forward:
        :param markdown:
        :param title:
        :param logo:
        :param at_sender:
        :param at_all:
        :return:
        )r%   r&   r'   r(   N)create_and_send_cardr   r$   r   )r   r!   r%   r&   r'   r(   s         r   replyzMarkdownCardInstance.reply(   sL    " !% 9 9$:OQUQdQdemQnQnDMV\EOJY !: ![ ![r   c                     | j         | j         dk    r| j                            d           dS |                     | j         |                     |                     dS )u   
        更新markdown内容，如果你reply了多次，这里只会更新最后一张卡片
        :param markdown:
        :return:
        Nr"   z?MarkdownCardInstance.update failed, you should send card first.)r   loggererrorput_card_datar$   )r   r!   s     r   updatezMarkdownCardInstance.update>   sc      (D,AR,G,GK_```F40$2E2Eh2O2OPPPPPr   )FFNT)__name__
__module____qualname____doc__r   strr   dictr$   boollistr+   r0   __classcell__r   s   @r   r   r      s             3    $     !&"!%&*[ [[[ [ 	[
  $[ [ [ [,
Qs 
Q 
Q 
Q 
Q 
Q 
Q 
Q 
Qr   r   c                   z     e Zd ZdZ fdZdedefdZdefdZ	 	 	 ddede	dede	de
f
dZ	 ddede	defdZ xZS )MarkdownButtonCardInstancer	   c                     t          t          |                               ||           d| _        d | _        d | _        d | _        g | _        d S )Nz+1366a1eb-bc54-4859-ac88-517c56a9acb1.schema)r   r<   r   r   r   r   r   button_listr   s      r   r   z#MarkdownButtonCardInstance.__init__P   sQ    ($//88JZ[[[ M $
	r   r   r   c                 "    || _         || _        d S r   r   r   s      r   r   z-MarkdownButtonCardInstance.set_title_and_logoX   r   r   r   c                     ||d}| j         | j         dk    r
| j         |d<   | j        | j        dk    r
| j        |d<   | j         d| j        i}t          j        |          |d<   |S )N)r!   tipsr"   r   r   
msgButtonssys_full_json_obj)r   r   r>   jsondumps)r   r!   rA   r#   rC   s        r   r$   z)MarkdownButtonCardInstance._get_card_data\   s     
 
	
 :!djB&6&6!%Ig9 TY"__ $	If'd.! .2Z8I-J-JI)*r   r"   NTr!   r>   rA   r'   r(   c                     || _         |                     | j        |                     ||          ||          | _        dS )u   
        回复markdown内容
        :param support_forward:
        :param recipients:
        :param tips:
        :param button_list: [{"text":"text", "url":"url", "iosUrl":"iosUrl", "color":"gray"}]
        :param markdown:
        :return:
        r'   r(   N)r>   r*   r   r$   r   )r   r!   r>   rA   r'   r(   s         r   r+   z MarkdownButtonCardInstance.replyq   sQ     ' $ 9 9$:OQUQdQdemosQtQtEOap !: !r !rr   c                     | j         | j         dk    r| j                            d           dS || _        |                     | j         |                     ||                     dS )u  
        更新markdown内容，如果你reply了多次，这里只会更新最后一张卡片
        :param button_list:[{"text":"text", "url":"url", "iosUrl":"iosUrl", "color":"gray"}]
        :param tips:
        :param markdown:
        :return:
        Nr"   zEMarkdownButtonCardInstance.update failed, you should send card first.)r   r-   r.   r>   r/   r$   r   r!   r>   rA   s       r   r0   z!MarkdownButtonCardInstance.update   sn      (D,AR,G,GKefffF&40$2E2EhPT2U2UVVVVVr   )r"   NT)r"   )r1   r2   r3   r4   r   r5   r   r6   r$   r8   r7   r+   r0   r9   r:   s   @r   r<   r<   K   s             3        0 !%&*r rrr r 	r
  $r r r r, W WW W W W W W W W W Wr   r<   c                        e Zd ZdZ fdZdedefdZdefdZdd	Z	ddede
fdZ	 ddede
fdZ	 	 	 ddededefdZ	 	 	 ddededefdZd Z xZS )AIMarkdownCardInstanceuu   
    一款超级通用的AI Markdown卡片
    ai_start --> ai_streaming --> ai_streaming --> ai_finish/ai_fail
    c                     t          t          |                               ||           d| _        d | _        d | _        d | _        d| _        d| _        d | _	        d| _
        g d| _        d S )N+382e4302-551d-4880-bf29-a30acfab2e71.schemar"   F)msgTitle
msgContentstaticMsgContentmsgTextList	msgImages	msgSliderrB   )r   rK   r   r   r   r   r   r!   static_markdownr>   inputing_statusorderr   s      r   r   zAIMarkdownCardInstance.__init__   sy    $d++44_FVWWW M $
	!$
 
 



r   r   r   c                 "    || _         || _        d S r   r   r   s      r   r   z)AIMarkdownCardInstance.set_title_and_logo   r   r   rV   c                     || _         d S r   )rV   )r   rV   s     r   	set_orderz AIMarkdownCardInstance.set_order   s    


r   Nc                    | j         | j        d}|||d<   | j        | j        dk    r
| j        |d<   | j        | j        dk    r
| j        |d<   d| j        i}| j        "t          | j                  dk    r
| j        |d<   | j        j        *d	d
	                    | j        j        j
                  i|d<   t          j        |          |d<   |S )N)rO   rP   
flowStatusr"   rN   r   rV   r   rB   textu   由{nick}的数字助理回答)nicksourcerC   )r!   rT   r   r   rV   r>   lenr   hosting_contextformatr]   rD   rE   )r   flow_statusr#   rC   s       r   get_card_dataz$AIMarkdownCardInstance.get_card_data   s    - $ 4
 
	
 "&1Il#:!djB&6&6$(JIj!9 TY"__ $	If TZ
 'C0@,A,AA,E,E.2.>l+ 0<8??TEZEjEo?pp+h' *.4E)F)F	%&r   Tr'   r(   c                     | j         | j         dk    rdS |                     | j        i ||          | _         d| _        dS )2   
        开始执行中
        :return:
        Nr"   rG   F)r   startr   rU   )r   r'   r(   s      r   ai_startzAIMarkdownCardInstance.ai_start   sW    
  ,1F"1L1LF $

4+@"Q[;J !+ !L !L$r   Fr!   appendc                 j   | j         | j         dk    r| j                            d           dS | j        s?|                     | j         |                     t          j                             d| _        |r| j        |z   | _        n|| _        | 	                    | j         d| j        ddd           dS )u   
        打字机模式
        :param append: 两种更新模式，append=true，追加的方式；append=false，全量替换。
        :param markdown:
        :return:
        Nr"   zGAIMarkdownCardInstance.ai_streaming failed, you should send card first.TrO   F)rh   finishedfailed)
r   r-   r.   rU   r/   rc   r   INPUTINGr!   	streaming)r   r!   rh   s      r   ai_streamingz#AIMarkdownCardInstance.ai_streaming   s      (D,AR,G,GKghhhF# 	(t4d6H6HI^6_6_```#'D  	% MH4DMM$DMt,lDMRWbg# 	 	% 	% 	% 	% 	%r   r"   r>   rA   c                     | j         | j         dk    r| j                            d           dS ||| _        ||| _        |                     | j         |                                            dS )uv   
        完成态
        :param tips:
        :param button_list:
        :param markdown:
        :return:
        Nr"   zDAIMarkdownCardInstance.ai_finish failed, you should send card first.)r   r-   r.   r!   r>   finishrc   rI   s       r   	ai_finishz AIMarkdownCardInstance.ai_finish   sz      (D,AR,G,GKdeeeF$DM"*DD)4+=+=+?+?@@@@@r   rT   c                     | j         | j         dk    r| j                            d           dS ||| _        ||| _        |                     | j         |                                            dS )u   
        非流式内容输出
        :param static_markdown:
        :param button_list:
        :param tips:
        :return:
        Nr"   zAAIMarkdownCardInstance.update failed, you should send card first.)r   r-   r.   r>   rT   rp   rc   )r   rT   r>   rA   s       r   r0   zAIMarkdownCardInstance.update  s{      (D,AR,G,GKabbbF"*D&#2D D)4+=+=+?+?@@@@@r   c                    | j         | j         dk    r| j                            d           dS i }| j        | j        dk    r
| j        |d<   | j        | j        dk    r
| j        |d<   |                     | j         |           dS )u,   
        失败态
        :return:
        Nr"   zBAIMarkdownCardInstance.ai_fail failed, you should send card first.rN   r   )r   r-   r.   r   r   fail)r   r#   s     r   ai_failzAIMarkdownCardInstance.ai_fail+  s      (D,AR,G,GKbcccF	:!djB&6&6$(JIj!9 TY"__ $	If		$'33333r   r   NT)F)NNr"   )r1   r2   r3   r4   r   r5   r   r8   rY   rc   r7   rg   rn   rq   r0   ru   r9   r:   s   @r   rK   rK      s        

 
 
 
 
( 3    t       >
% 
%4 
% 
% 
% 
% 
% %*% %"%!% % % %6 #'&* A AA#A A A A A0 '+#'A A #A A A A A A.4 4 4 4 4 4 4r   rK   c                   \     e Zd ZdZ fdZdedefdZd Z	 	 	 dd
edededede	f
dZ
 xZS )CarouselCardInstanceu   
    轮播图卡片
    c                     t          t          |                               ||           d| _        d | _        d | _        d | _        d S )NrM   )r   rx   r   r   r   r   r   r   s      r   r   zCarouselCardInstance.__init__E  r   r   r   r   c                 "    || _         || _        d S r   r   r   s      r   r   z'CarouselCardInstance.set_title_and_logoL  r   r   c                 F    |                      | j        i           | _        dS )re   N)rf   r   r   )r   s    r   rg   zCarouselCardInstance.ai_startP  s#    
 !%

4+@" E Er   submitNTr!   image_slider_listbutton_textr'   r(   c                    g dg |ddddgd}||dk    r||d	         d
         d<   |D ],}|d                              |d
         |d         d           -|t          j        |          d}| j        | j        dk    r
| j        |d<   | j        | j        dk    r
| j        |d<   |                     | j        dt          j        id||          | _	        | 
                    | j	        |           dS )u   
        回复卡片
        :param support_forward:
        :param recipients:
        :param button_text:
        :param image_slider_list:
        :param markdown:
        :return:
        )rN   rP   rS   rR   rQ   rB   blueimage_slider_select_buttonT)r\   coloridrequest)rV   rS   rB   Nr"   rB   r   r\   rS   r   )r   image)rP   rC   rN   r   r[   STREAM)callback_typer'   r(   )rh   rD   rE   r   r   r*   r   r   
PROCESSINGr   rp   )	r   r!   r}   r~   r'   r(   rC   image_sliderr#   s	            r   r+   zCarouselCardInstance.replyW  sf   "    (#6#	 
 
( "{b'8'89Dl+A.v6- 	 	Lk*11%a%a3 3     !)!%,=!>!>
 
	
 :!djB&6&6$(JIj!9 TY"__ $	If $ 9 9$:O;GI`:aHP]gJY !: ![ ![
 	D)955555r   )r|   NT)r1   r2   r3   r4   r   r5   r   rg   r8   r7   r+   r9   r:   s   @r   rx   rx   @  s              3    F F F "*!%&*=6 =6=6!%=6 =6 	=6
  $=6 =6 =6 =6 =6 =6 =6 =6r   rx   c                   `     e Zd Z fdZdefdZdefdZ	 	 dded	ed
edededede	fdZ
 xZS )RPAPluginCardInstancec                     t          t          |                               ||           d| _        d | _        d| _        d| _        d S )Nz+7f538f6d-ebb7-4533-a9ac-61a32da094cf.schemar"   )r   r   r   r   r   goalcorp_idr   s      r   r   zRPAPluginCardInstance.__init__  sG    #T**33OEUVVV M $	r   r   c                     || _         d S r   )r   )r   r   s     r   set_goalzRPAPluginCardInstance.set_goal  s    			r   r   c                     || _         d S r   )r   )r   r   s     r   set_corp_idz!RPAPluginCardInstance.set_corp_id  s    r   NT	plugin_idplugin_versionplugin_nameability_nameplugin_argsr'   r(   c           
      >   | j         | j        d|d|dt          j        |          ddd|z   |dgd}| j        d	t          j        |          d
}	|                     | j        dt          j        i||          | _        | 	                    | j        |	           dS )u   
        回复markdown内容
        :param support_forward:
        :param ability_name:
        :param recipients:
        :param plugin_version:
        :param plugin_args:
        :param plugin_name:
        :param plugin_id:
        :return:
        z)(function(){dd.callPlugin({'pluginName':'z','abilityName':'z	','args':z });})()jsCodezAGI-EXTENSION-)r   version)corpIdr   planplanTypepluginInstancestrue)r   processFlagr   r[   rG   N)
r   r   rD   rE   r*   r   r   r   r   rp   )
r   r   r   r   r   r   r'   r(   r   r#   s
             r   r+   zRPAPluginCardInstance.reply  s    * lII\\\4:k+B+B+B+BD &2)! !  

 

 I!Jt$$
 
	 !% 9 9$:O;GI`:aEOap !: !r !r 	D)955555r   rv   )r1   r2   r3   r   r5   r   r   r6   r8   r7   r+   r9   r:   s   @r   r   r     s            S    3     "&&**6 *6*6!*6 *6  	*6
  *6 *6  $*6 *6 *6 *6 *6 *6 *6 *6r   r   )r4   card_replierr   r   r   rD   r   r<   rK   rx   r    r   r   <module>r      sA    C B B B B B B B B B =Q =Q =Q =Q =Q; =Q =Q =Q@IW IW IW IW IW IW IW IWXf4 f4 f4 f4 f4] f4 f4 f4RT6 T6 T6 T6 T6= T6 T6 T6n96 96 96 96 96M 96 96 96 96 96r   