@@ -174,6 +174,33 @@ export class NapCat {
174174 }
175175 }
176176
177+ /** 安全的 JSON 序列化,处理循环引用和不可序列化的值 */
178+ #safeStringify( obj : any ) : string {
179+ const seen = new WeakSet ( )
180+ return JSON . stringify ( obj , ( key , value ) => {
181+ // 过滤掉内部的 timeout 引用
182+ if ( key === '__timeout_id__' ) {
183+ return undefined
184+ }
185+ // 过滤掉函数
186+ if ( typeof value === 'function' ) {
187+ return undefined
188+ }
189+ // 过滤掉 napcat 实例引用
190+ if ( key === 'napcat' ) {
191+ return undefined
192+ }
193+ // 处理对象类型的循环引用
194+ if ( typeof value === 'object' && value !== null ) {
195+ if ( seen . has ( value ) ) {
196+ return '[Circular]'
197+ }
198+ seen . add ( value )
199+ }
200+ return value
201+ } )
202+ }
203+
177204 /** 标准化可发送消息元素 */
178205 normalizeSendable ( msg : Arrayable < Sendable > ) : NormalizedElementToSend [ ] {
179206 return [ msg ] . flat ( 2 ) . map ( ( item ) => {
@@ -354,7 +381,7 @@ export class NapCat {
354381 if ( data . post_type ) {
355382 switch ( data . post_type ) {
356383 case 'meta_event' : {
357- this . logger . trace ( `收到 meta_event: ${ JSON . stringify ( data ) } ` )
384+ this . logger . trace ( `收到 meta_event: ${ this . #safeStringify ( data ) } ` )
358385
359386 this . #event. emit ( 'meta_event' , data )
360387
@@ -409,23 +436,21 @@ export class NapCat {
409436 case 'private' : {
410437 this . #event. emit ( 'message.private' , data )
411438 this . #event. emit ( `message.private.${ data . sub_type } ` , data )
412- const { friend : _ , ...rest } = data
413- this . logger . trace ( `收到私聊消息: ${ JSON . stringify ( rest ) } ` )
439+ this . logger . trace ( `收到私聊消息: ${ this . #safeStringify( data ) } ` )
414440 this . logger . info ( `[私:${ sender } ] ${ msg } ` )
415441 break
416442 }
417443
418444 case 'group' : {
419445 this . #event. emit ( 'message.group' , data )
420446 this . #event. emit ( `message.group.${ data . sub_type } ` , data )
421- const { group : _ , ...rest } = data
422- this . logger . trace ( `收到群消息: ${ JSON . stringify ( rest ) } ` )
447+ this . logger . trace ( `收到群消息: ${ this . #safeStringify( data ) } ` )
423448 this . logger . info ( `[群:${ group } ] ${ sender } : ${ msg } ` )
424449 break
425450 }
426451
427452 default : {
428- this . logger . debug ( `收到未知消息类型: ${ JSON . stringify ( data ) } ` )
453+ this . logger . debug ( `收到未知消息类型: ${ this . #safeStringify ( data ) } ` )
429454
430455 break
431456 }
@@ -444,8 +469,7 @@ export class NapCat {
444469 }
445470
446471 this . #event. emit ( 'message_sent' , data )
447- const { group : _ , friend : __ , ...rest } = data
448- this . logger . trace ( `收到 message_sent: ${ JSON . stringify ( rest ) } ` )
472+ this . logger . trace ( `收到 message_sent: ${ this . #safeStringify( data ) } ` )
449473
450474 if ( data . message_type ) {
451475 this . #event. emit ( `message_sent.${ data . message_type } ` , data )
@@ -467,10 +491,10 @@ export class NapCat {
467491 }
468492
469493 case 'notice' : {
470- this . logger . trace ( `收到通知: ${ JSON . stringify ( data ) } ` )
494+ this . logger . trace ( `收到通知: ${ this . #safeStringify ( data ) } ` )
471495
472496 if ( ! data . notice_type ) {
473- this . logger . debug ( `收到未知通知类型: ${ JSON . stringify ( data ) } ` )
497+ this . logger . debug ( `收到未知通知类型: ${ this . #safeStringify ( data ) } ` )
474498 break
475499 }
476500
@@ -512,7 +536,7 @@ export class NapCat {
512536 }
513537
514538 case 'request' : {
515- this . logger . trace ( `收到请求: ${ JSON . stringify ( data ) } ` )
539+ this . logger . trace ( `收到请求: ${ this . #safeStringify ( data ) } ` )
516540
517541 if ( data . request_type === 'friend' ) {
518542 data . reject = ( reason ?: string ) =>
@@ -539,7 +563,7 @@ export class NapCat {
539563 }
540564
541565 default : {
542- this . logger . debug ( `收到: ${ JSON . stringify ( data ) } ` )
566+ this . logger . debug ( `收到: ${ this . #safeStringify ( data ) } ` )
543567 this . #event. emit ( data . post_type , data )
544568 return
545569 }
0 commit comments