
    ii                     n    d Z ddlZddlZddlmZ ddlZddlmZ ddlm	Z	 ddl
mZ  G d de	          ZdS )	   NapCatQQ WebSocket 网关。    N)Optional)WebSocketClientProtocol)BaseGateway)NapCatEventc                   v     e Zd ZdZdZddedef fdZdd
Zdedd	fdZ	de
defdZdededd	fdZddZ xZS )NapCatGatewayr   napcatws://localhost:3001 ws_urlaccess_tokenc                     t                                                       || _        || _        d | _        d| _        d S )NF)super__init__r   r   _ws_running)selfr   r   	__class__s      4/root/projects/qq-shell/src/butler/gateway/napcat.pyr   zNapCatGateway.__init__   s:    (6:    returnNc                   K   i }| j         rd| j          |d<   d| _        | j        r	 t          j        | j        |dd          4 d{V 	 }|| _        t          d| j                    |                     |           d{V  ddd          d{V  n# 1 d{V swxY w Y   nY# t          $ rL}t          d	|            t          d
           | j        rt          j
        d           d{V  Y d}~nd}~ww xY w| j        dS dS )u   连接 NapCat WebSocket。zBearer AuthorizationT   
   )additional_headersping_intervalping_timeoutNz[napcat] Connected to z[napcat] Connection error: z$[napcat] Will retry in 30 seconds...)r   r   
websocketsconnectr   r   print_listen	Exceptionasynciosleep)r   headerswses       r   startzNapCatGateway.start   s      	E'D1B'D'DGO$m 	,,%-K'."$!#	   + + + + + + + +
 !DH@4;@@AAA,,r*********+ + + + + + + + + + + + + + + + + + + + + + + + + + +  , , ,7A77888<==== ,!-+++++++++	, m 	, 	, 	, 	, 	,s<   #B* :BB* 
B""B* %B"&B* *
D 4AC;;D r(   c                   K   |2 3 d {V }	 t          j        |          }t          |t                    rt	          |                    dd          |                    dd          |                    dd          |                    dd          |                    dd          |                     |          t          |                    }|j        rb| j	        r[| 	                    t          |j
                  |j        | j                  }t          j        |          rt          j        |           7# t           $ r}t#          d	|            Y d }~Yd }~ww xY w6 d S )
Ntimer   self_id	post_typer   message_typeuser_id)r,   r-   r.   r/   r0   messageraw_messagez#[napcat] Error processing message: )jsonloads
isinstancedictr   get_extract_messagestris_private_message_message_handlerr0   r1   namer%   iscoroutineensure_futurer$   r"   )r   r(   r2   dataeventresultr)   s          r   r#   zNapCatGateway._listen3   s     !# 	A 	A 	A 	A 	A 	A 	A+Az+..dD)) :'!XXfa00 $A 6 6"&((;";";%)XXnb%A%A $A 6 6 $ 5 5d ; ;$'II  E / :D4I :!%!6!6..ty" " #.v66 :#1&999 A A A?A??@@@@@@@@A- "$s   E&D-D<<
E#EE#r?   c                    |                     dd          }t          |t                    r|S t          |t                    rg }|D ]m}t          |t                    rV|                     d          dk    r=|                    |                     di                                dd                     nd                    |          S t          |          S )Nr1   r   typetextr?   )r7   r5   r9   listr6   appendjoin)r   r?   r1   textssegs        r   r8   zNapCatGateway._extract_messageM   s    ((9b))gs## 	"N&& 	"E F Fc4(( FSWWV__-F-FLL!4!4!8!8!D!DEEE775>>!7||r   r0   rD   c                    K   | j         sdS dt          |          |dd}| j                             t          j        |                     d{V  dS )u#   通过 NapCat 发送私聊消息。Nsend_private_msg)r0   r1   )actionparams)r   intsendr3   dumps)r   r0   rD   payloads       r   send_messagezNapCatGateway.send_messageY   so      x 	F )"%g,,4@@
 
 hmmDJw//00000000000r   c                 h   K   d| _         | j        r!| j                                         d{V  dS dS )u   停止网关。FN)r   r   close)r   s    r   stopzNapCatGateway.stopd   sK      8 	#(.."""""""""""	# 	#r   )r   r   )r   N)__name__
__module____qualname____doc__r<   r9   r   r*   r   r#   r6   r8   rR   rU   __classcell__)r   s   @r   r	   r	      s        &&D s #      , , , ,2A 7 AD A A A A4
T 
c 
 
 
 
	1# 	1S 	1T 	1 	1 	1 	1# # # # # # # #r   r	   )rY   r%   r3   typingr   r    websockets.clientr   butler.gateway.baser   butler.session.stater   r	    r   r   <module>r`      s    " "             5 5 5 5 5 5 + + + + + + , , , , , ,Z# Z# Z# Z# Z#K Z# Z# Z# Z# Z#r   