o
    kjÎ!  ã                   @   s˜   U 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	Z	d dl
Z
d dlmZ d dlmZ d dlT G dd	„ d	ƒZeed
< e	jed< G dd„ dƒZdS )é    N)Údatetime)Úcontext)ÚEvent)Úlogger)Ú	DbManager)Ú*c                   @   s*   e Zd Zdd„ Zdd„ Zdefdd„ZdS )	ÚEchoc                 C   s   d| _ tjdd| _d S )Nr   é   )Úmaxlen)Úecho_numÚcollectionsÚdequeÚ	echo_list)Úself© r   ú%/home/dore/onebot/Bot_Ero/core/api.pyÚ__init__   s   zEcho.__init__c                 C   s6   |  j d7  _ tjdd}| j | j |f¡ | j |fS )Né   )Úmaxsize)r   ÚqueueÚQueuer   Úappend)r   Úqr   r   r   Úget   s   
zEcho.getr   c                 C   s.   | j D ]}|d |d kr|d  |¡ qd S )NÚechor   r   )r   Úput)r   r   Úobjr   r   r   Úmatch   s
   
€þz
Echo.matchN)Ú__name__Ú
__module__Ú__qualname__r   r   Údictr   r   r   r   r   r      s    r   r   ÚWS_APPc                   @   s  e Zd Zdefdd„Zdededefdd„Zd	d
„ Zdd„ Zde	fdd„Z
de	fdd„Zde	fdd„Zdd„ Zdd„ Zdd„ Zdefdd„Zd3dd„Zdefdd „Zdefd!d"„Zdefd#d$„Zd%d&„ Zd'd(„ Zd)d*„ Zd+e	defd,d-„Zd+e	defd.d/„Zd+e	defd0d1„Zd2S )4Ú
ApiWrapperÚraw_contextc                 C   s   t | _t|ƒ| _tƒ | _d S ©N)r"   Úwsr   r   r   Ú	dbmanager)r   r$   r   r   r   r   !   s   
zApiWrapper.__init__ÚactionÚparamsÚreturnc                 C   sn   t  ¡ \}}t |||dœ¡}t d| ¡ | j |¡ z|jddW S  tj	y6   t 
d¡ ddi Y S w )N)r(   r)   r   u   å‘é€è°ƒç”¨ <- é   )Útimeoutu"   APIè°ƒç”¨[{echo_num}] è¶…æ—¶......ÚstatusÚfailed)r   r   Újson_Údumpsr   Úinfor&   Úsendr   ÚEmptyÚerror)r   r(   r)   r   r   Údatar   r   r   Úcall_api&   s   
þzApiWrapper.call_apic                 C   s    zE| j j |¡d d… }t|ƒdkrW dS g }ddlm} |D ]}||ƒ}|r3| d¡r3| |d ¡ qt|ƒdkr=W dS d d 	|¡¡W S  t
yO   Y dS w )Né   r   Ú )Úget_title_defÚnameu   ã€Œ{}ã€õ   Â·)r'   ÚtitlesÚequipped_allÚlenÚplugins.titler9   r   r   ÚformatÚjoinÚ	Exception)r   Úuser_idÚequipped_titlesÚnamesr9   Útidr5   r   r   r   Ú_build_title_prefix1   s"   €ÿzApiWrapper._build_title_prefixc                 C   sr   g }|D ]0}t |tƒr/| d¡dkr/| di ¡ d¡}|dkr/|  |¡}|r/| t|d ƒ¡ | |¡ qt|ƒS )NÚtypeÚatr5   ÚqqÚallú )Ú
isinstancer!   r   rG   r   ÚtextÚtuple)r   ÚmessageÚmergedÚsegrJ   Úprefixr   r   r   Ú_inject_titles_before_atB   s   
z#ApiWrapper._inject_titles_before_atc                 G   s@   |   |¡}| jjd kr| j|Ž S | jjd kr| j|Ž S | j|Ž S r%   )rT   r   Úgroup_idÚsend_group_msgrC   Úsend_private_msg©r   rP   r   r   r   Úsend_msgN   s   



zApiWrapper.send_msgc                 G   s@   | j j|dœ}|  d|¡}| d¡dkrdS | di ¡ dd¡S )N)rC   rP   rW   r-   Úokr   r5   Ú
message_id)r   rC   r6   r   ©r   rP   r)   Úretr   r   r   rW   Y   s   &zApiWrapper.send_private_msgc           	      G   sÚ   | j j}|s	tj}||dœ}|  d|¡}| d¡dkrdn	| di ¡ dd¡}|rk|rkt |¡rkt |¡}|rkddlm	} d	d
t
|ƒt|ƒtt ¡  ¡ ƒdœ}|d  |¡ t
|ƒ|d vrkd
t
|ƒdœ|d t
|ƒ< |S )N)rU   rP   rV   r-   rZ   r   r5   r[   )ÚBOT_QQÚbotu   å°åŸƒåŒå­¦)rH   ÚnicknamerC   rP   ÚtimeÚmessagesÚparticipants)r`   rC   )r   rU   Úruntime_contextÚDEFAULT_GROUP_IDr6   r   Úis_group_recordingÚget_recording_sessionÚ	core.baser^   ÚstrÚlistÚintr   ÚnowÚ	timestampr   )	r   rP   rU   r)   r]   Úmsg_idÚsessionr^   Úentryr   r   r   rV   _   s(   
&
ûzApiWrapper.send_group_msgc                 C   s&   | j j|dœ}|  d|¡}| di ¡S )N)rU   rC   Úget_group_member_infor5   )r   rU   r6   r   )r   rC   r)   r]   r   r   r   rq   z   s   z ApiWrapper.get_group_member_infoc                 C   s:   d|i}|   d|¡}| d¡dkr| di ¡ dd¡S dS )NÚfileÚ	get_imager-   rZ   r5   r8   ©r6   r   ©r   rr   r)   r]   r   r   r   rs   €   ó
   zApiWrapper.get_imagec                 C   s:   d|i}|   d|¡}| d¡dkr| di ¡ dd¡S dS )Nrr   rs   r-   rZ   r5   Úurlr8   rt   ru   r   r   r   Úget_image_url‰   rv   zApiWrapper.get_image_urlc                 C   sP   d|i}|   d|¡}|r| d¡dkrdS | d¡}t|tƒs!dS | d¡p'dS )uG   OneBot `get_qq_avatar`ï¼ŒæˆåŠŸè¿”å›žå¤´åƒ URLï¼Œå¤±è´¥è¿”å›žç©ºä¸²ã€‚rC   Úget_qq_avatarr-   rZ   r8   r5   rw   )r6   r   rM   r!   )r   rC   r)   r]   r5   r   r   r   ry   “   s   

zApiWrapper.get_qq_avatarTc                 C   s   ||ddœ}|   d|¡ d S )Nr8   )ÚflagÚapproveÚremarkÚset_friend_add_request©r6   )r   rz   r{   r)   r   r   r   r}   ž   s   z!ApiWrapper.set_friend_add_requestrP   c                 C   s    | j jd kr|  |¡S |  |¡S r%   )r   rU   Úsend_group_forward_msgÚsend_private_forward_msgrX   r   r   r   Úsend_forward_msg¢   s   

zApiWrapper.send_forward_msgc                 C   sB   | j j}|s	tj}|t|ƒdœ}|  d|¡}| d¡dkrdS dS )N)rU   rb   r   r-   rZ   r   r   )r   rU   rd   re   Úforwardr6   r   )r   rP   rU   r)   r]   r   r   r   r   ¨   s   z!ApiWrapper.send_group_forward_msgc                 C   s4   | j jt|ƒdœ}|  d|¡}| d¡dkrdS dS )N)rC   rb   r€   r-   rZ   r   r   )r   rC   r‚   r6   r   r\   r   r   r   r€   °   s   z#ApiWrapper.send_private_forward_msgc                 C   s    d|i}|   d|¡}| di ¡S )NrU   Úget_group_album_listr5   rt   )r   rU   r)   r]   r   r   r   rƒ   µ   s   zApiWrapper.get_group_album_listc                 C   s   |||dœ}|   d|¡}dS )N)rU   rC   Úspecial_titleÚset_group_special_titler   r~   )r   rU   rC   Útitler)   r]   r   r   r   r…   º   s   z"ApiWrapper.set_group_special_titlec                 C   s6   d|i}|   d|¡}|r| d¡dkr| di ¡S i S )Nr[   Úget_msgr-   rZ   r5   rt   )r   r[   r)   r]   r   r   r   r‡   ¿   s
   zApiWrapper.get_msgr[   c                 C   ó*   |   ddt|ƒi¡}t|o| d¡dkƒS )NÚ
delete_msgr[   r-   rZ   ©r6   rk   Úboolr   ©r   r[   r]   r   r   r   r‰   Æ   ó   zApiWrapper.delete_msgc                 C   rˆ   )NÚset_essence_msgr[   r-   rZ   rŠ   rŒ   r   r   r   rŽ   Ë   r   zApiWrapper.set_essence_msgc                 C   rˆ   )NÚdelete_essence_msgr[   r-   rZ   rŠ   rŒ   r   r   r   r   Ð   s   zApiWrapper.delete_essence_msgN)T)r   r   r    r!   r   ri   r6   rG   rT   rk   rY   rW   rV   rq   rs   rx   ry   r}   rj   r   r   r€   rƒ   r…   r‡   r‹   r‰   rŽ   r   r   r   r   r   r#       s,    	

r#   )Újsonr/   r   r   Úcorer   rd   Ú
core.eventr   Ú	websocketr   Úcore.loggerr   Úcore.database_managerr   Úcore.cqr   Ú__annotations__ÚWebSocketAppr#   r   r   r   r   Ú<module>   s   
 
