
    iW3                        d Z ddlZddlZddlZddlmZmZmZ  ej        e	          Z
 ej                    Zd Zd Zd Zd>dZdZd	d
dddddddddddddddddddddgddZdedefdZd Zd!d"dddddd#ddddddd$dddddd%dd&gddZdedefd'Zd Zd(d)dddddd*ddd+dddddd,g d-ddZdedefd.Zd/Zd0d1dddddd2dddddd3dd4gddZdedefd5Z ej        d	d6eeeg dd7d89	  	          ej        d!d6eeeg dd:d89	  	          ej        d(d6eeeg dd;d<9	  	          ej        d0d6eeeg dd=d<9	  	         dS )?a  Feishu Drive Tools -- document comment operations via Feishu/Lark API.

Provides tools for listing, replying to, and adding document comments.
Uses the same lazy-import + BaseRequest pattern as feishu_comment.py.
The lark client is injected per-thread by the comment event handler.
    N)registry
tool_errortool_resultc                     | t           _        dS )zFStore a lark client for the current thread (called by feishu_comment).N)_localclient)r   s    </home/ubuntu/.hermes/hermes-agent/tools/feishu_drive_tool.py
set_clientr
      s    FMMM    c                  .    t          t          dd          S )z7Return the lark client for the current thread, or None.r   N)getattrr    r   r	   
get_clientr      s    68T***r   c                  2    	 dd l } dS # t          $ r Y dS w xY w)Nr   TF)	lark_oapiImportError)r   s    r	   _check_feishur      s:    t   uus    
c                    ddl m} ddlm} ddlm} |dk    r|j        n|j        }	|                                	                    |	          
                    |                              |j        h          }
|r|
                    |          }
|r|
                    |          }
||
                    |          }
|
                                }|                     |          }t%          |dd          }t%          |dd	          }i }t%          |d
d          }|r]t'          |d          rM	 t)          j        |j                  }|                    di           }n# t(          j        t2          f$ r Y nw xY w|sJt%          |dd          }t5          |t6                    r|}n!|rt'          |d          rt9          |          }|||fS )z?Build and execute a BaseRequest, return (code, msg, data_dict).r   )AccessTokenType)
HttpMethod)BaseRequestGETNcodemsg rawcontentdata__dict__)r   r   lark_oapi.core.enumr   !lark_oapi.core.model.base_requestr   r   POSTbuilderhttp_methoduritoken_typesTENANTpathsqueriesbodybuildrequestr   hasattrjsonloadsr   getJSONDecodeErrorAttributeError
isinstancedictvars)r   methodr%   r(   r)   r*   r   r   r   r$   r#   r,   responser   r   r   r   	body_json	resp_datas                      r	   _do_requestr:   &   s   ))))))......======$*eOO*..K 		[	!	!	S	o,-	.	.	   '--&& +//'**,,t$$mmooG ~~g&&H8VT**D
(E2
&
&C D
(E4
(
(C
 wsI&& 	
3;//I==,,DD$n5 	 	 	D	 #Hfd33	i&& 	#DD 	#79j99 	#	??Dd?s   0/E   E98E9z./open-apis/drive/v1/files/:file_token/commentsfeishu_drive_list_commentsz[List comments on a Feishu document. Use is_whole=true to list whole-document comments only.objectstringzThe document file token.)typedescriptionzFile type (default: docx).docx)r>   r?   defaultbooleanz-If true, only return whole-document comments.Fintegerz&Number of comments per page (max 100).d   zPagination token for next page.)
file_token	file_typeis_whole	page_size
page_tokenrE   )r>   
propertiesrequired)namer?   
parametersargsreturnc                    t                      }|t          d          S |                     dd                                          }|st          d          S |                     dd          pd}|                     dd          }|                     d	d
          }|                     dd          }d|fdd	t	          |          fg}|r|                    d           |r|                    d|f           t          |dt          d|i|          \  }	}
}|	dk    rt          d|	 d|
           S t          |          S )NFeishu client not availablerE   r   zfile_token is requiredrF   r@   rG   FrH   rD   rI   user_id_typeopen_id)rG   truer   r(   r)   r   zList comments failed: code= msg=)	r   r   r0   stripstrappendr:   _LIST_COMMENTS_URIr   )rN   kwargsr   rE   rF   rG   rH   rI   r)   r   r   r   s               r	   _handle_list_commentsr]      si   \\F~7888,++1133J 42333f--7Ixx
E**Hc**I,++J 
i #	c)nn%G
  -+,,, 3j1222!)Z(  OD#t
 qyyHHH3HHIIItr   zB/open-apis/drive/v1/files/:file_token/comments/:comment_id/replies!feishu_drive_list_comment_repliesz:List all replies in a comment thread on a Feishu document.z#The comment ID to list replies for.z%Number of replies per page (max 100).)rE   
comment_idrF   rH   rI   r_   c                    t                      }|t          d          S |                     dd                                          }|                     dd                                          }|r|st          d          S |                     dd          pd}|                     dd	          }|                     d
d          }d|fddt	          |          fg}|r|                    d
|f           t          |dt          ||d|          \  }	}
}|	dk    rt          d|	 d|
           S t          |          S )NrQ   rE   r   r_   z&file_token and comment_id are requiredrF   r@   rH   rD   rI   rR   r   rE   r_   rV   r   zList replies failed: code=rW   )	r   r   r0   rX   rY   rZ   r:   _LIST_REPLIES_URIr   )rN   r\   r   rE   r_   rF   rH   rI   r)   r   r   r   s               r	   _handle_list_repliesrc      sf   \\F~7888,++1133J,++1133J DZ DBCCCf--7Ic**I,++J 
i #	c)nn%G
  3j1222!('zBB  OD#t
 qyyGtGG#GGHHHtr   feishu_drive_reply_commentzReply to a local comment thread on a Feishu document. Use this for local (quoted-text) comments. For whole-document comments, use feishu_drive_add_comment instead.zThe comment ID to reply to.z6The reply text content (plain text only, no markdown).)rE   r_   r   rF   )rE   r_   r   c                 B   t                      }|t          d          S |                     dd                                          }|                     dd                                          }|                     dd                                          }|r|r|st          d          S |                     dd          pd}dd	d
d|idgii}t	          |dt
          ||dd|fg|          \  }}	}
|dk    rt          d| d|	           S t          d|
          S )NrQ   rE   r   r_   r   z0file_token, comment_id, and content are requiredrF   r@   elementstext_runtext)r>   rg   r"   ra   )r(   r)   r*   r   zReply comment failed: code=rW   Tsuccessr   )r   r   r0   rX   r:   _REPLY_COMMENT_URIr   )rN   r\   r   rE   r_   r   rF   r*   r   r   r   s              r	   _handle_reply_commentrl     sd   \\F~7888,++1133J,++1133Jhhy"%%++--G NZ Nw NLMMMf--7I 	&!' 1 
	D "*'zBBy)*	  OD#t qyyHHH3HHIIIt$////r   z2/open-apis/drive/v1/files/:file_token/new_commentsfeishu_drive_add_commentzAdd a new whole-document comment on a Feishu document. Use this for whole-document comments or as a fallback when reply_comment fails with code 1069302.z8The comment text content (plain text only, no markdown).)rE   r   rF   r   c                    t                      }|t          d          S |                     dd                                          }|                     dd                                          }|r|st          d          S |                     dd          pd}|d|d	gd
}t	          |dt
          d|i|          \  }}}	|dk    rt          d| d|           S t          d|	          S )NrQ   rE   r   r   z#file_token and content are requiredrF   r@   rh   )r>   rh   )rF   reply_elementsr"   )r(   r*   r   zAdd comment failed: code=rW   Tri   )r   r   r0   rX   r:   _ADD_COMMENT_URIr   )
rN   r\   r   rE   r   rF   r*   r   r   r   s
             r	   _handle_add_commentrq   ]  s"   \\F~7888,++1133Jhhy"%%++--G AW A?@@@f--7I W--
 D "(Z(  OD#t
 qyyFdFFFFGGGt$////r   feishu_drivezList document commentsu   💬)	rL   toolsetschemahandlercheck_fnrequires_envis_asyncr?   emojizList comment replieszReply to a document commentu   ✉️zAdd a whole-document comment)NNN) __doc__r.   logging	threadingtools.registryr   r   r   	getLogger__name__loggerlocalr   r
   r   r   r:   r[   !FEISHU_DRIVE_LIST_COMMENTS_SCHEMAr4   rY   r]   rb    FEISHU_DRIVE_LIST_REPLIES_SCHEMArc   rk   FEISHU_DRIVE_REPLY_SCHEMArl   rp   FEISHU_DRIVE_ADD_COMMENT_SCHEMArq   registerr   r   r	   <module>r      s~          < < < < < < < < < <		8	$	$ 
		  
+ + +
  . . . .j F  )	B  !9 
 !;!  "N   "G  !@ )
 
2 "N7 #% #% !L   3        N Y  0O !9 
 !D 
 !;!  "F  !@ '
 
0 "<05 $ $  Dt #    J Z  )	M
  !9 
 !< 
 !W 
 !;! 
 
& <;;+   B!0 !03 !0 !0 !0 !0P H  '	1
  !9 
 !Y 
 !;! 
 
 "9-# # # :0d 0 0 0 0 0D  	%,!(

 
 
 
  	,+ &

 
 
 
  	%$!-

 
 
 
  	#*.

 
 
 
 
 
r   