@@ -37,7 +37,7 @@ type BotManager struct {
3737 wg sync.WaitGroup
3838 myRecord map [string ]MyRecord
3939 myRecordLocker sync.RWMutex
40- onEvent map [string ][]reflect.Value
40+ onEvent map [string ][][] reflect.Value
4141 middleware []middleware
4242 delayed int
4343 locker sync.RWMutex
@@ -155,7 +155,7 @@ func NewBotManager(QQ int64, OPQUrl string) BotManager {
155155 panic (err )
156156 }
157157 go s .GC ()
158- b := BotManager {restart : make (chan int , 1 ), Session : s , Done : make (chan int , 10 ), MaxRetryCount : 10 , wg : sync.WaitGroup {}, QQ : QQ , OPQUrl : OPQUrl , SendChan : make (chan SendMsgPack , 1024 ), onEvent : make (map [string ][]reflect.Value ), myRecord : map [string ]MyRecord {}, myRecordLocker : sync.RWMutex {}, locker : sync.RWMutex {}, delayed : 1000 }
158+ b := BotManager {restart : make (chan int , 1 ), Session : s , Done : make (chan int , 10 ), MaxRetryCount : 10 , wg : sync.WaitGroup {}, QQ : QQ , OPQUrl : OPQUrl , SendChan : make (chan SendMsgPack , 1024 ), onEvent : make (map [string ][][] reflect.Value ), myRecord : map [string ]MyRecord {}, myRecordLocker : sync.RWMutex {}, locker : sync.RWMutex {}, delayed : 1000 }
159159 go func () {
160160 for {
161161 select {
@@ -216,7 +216,7 @@ func (b *BotManager) Start() error {
216216 // log.Println("连接成功!")
217217 f , ok := b .onEvent [EventNameOnConnected ]
218218 if ok && len (f ) >= 1 {
219- f [0 ].Call ([]reflect.Value {})
219+ f [0 ][ 0 ] .Call ([]reflect.Value {})
220220 }
221221 })
222222 if err != nil {
@@ -227,7 +227,7 @@ func (b *BotManager) Start() error {
227227 // log.Println("连接断开!")
228228 f , ok := b .onEvent [EventNameOnDisconnected ]
229229 if ok && len (f ) >= 1 {
230- f [0 ].Call ([]reflect.Value {})
230+ f [0 ][ 0 ] .Call ([]reflect.Value {})
231231 }
232232 b .restart <- 1
233233 })
@@ -267,12 +267,17 @@ func (b *BotManager) Start() error {
267267 b .myRecordLocker .Unlock ()
268268 }()
269269 }
270- result .Bot = b
271- result .f = f
272- result .NowIndex = 0
273- result .MaxIndex = len (f ) - 1
270+ for _ , v := range f {
271+ if result .Ban {
272+ return
273+ }
274+ result .Bot = b
275+ result .f = v
276+ result .NowIndex = 0
277+ result .MaxIndex = len (v ) - 1
278+ v [0 ].Call ([]reflect.Value {reflect .ValueOf (args .CurrentQQ ), reflect .ValueOf (& result )})
279+ }
274280
275- f [0 ].Call ([]reflect.Value {reflect .ValueOf (args .CurrentQQ ), reflect .ValueOf (& result )})
276281 }
277282 //log.Println(args)
278283 })
@@ -293,11 +298,16 @@ func (b *BotManager) Start() error {
293298 log .Println ("解析包错误" )
294299 return
295300 }
296- result .Bot = b
297- result .f = f
298- result .NowIndex = 0
299- result .MaxIndex = len (f ) - 1
300- f [0 ].Call ([]reflect.Value {reflect .ValueOf (args .CurrentQQ ), reflect .ValueOf (& result )})
301+ for _ , v := range f {
302+ if result .Ban {
303+ return
304+ }
305+ result .Bot = b
306+ result .f = v
307+ result .NowIndex = 0
308+ result .MaxIndex = len (v ) - 1
309+ v [0 ].Call ([]reflect.Value {reflect .ValueOf (args .CurrentQQ ), reflect .ValueOf (& result )})
310+ }
301311 }
302312 //log.Println(args)
303313 })
@@ -331,11 +341,16 @@ func (b *BotManager) Start() error {
331341 log .Println ("解析包错误" )
332342 return
333343 }
334- result .Bot = b
335- result .f = f
336- result .NowIndex = 0
337- result .MaxIndex = len (f ) - 1
338- f [0 ].Call ([]reflect.Value {reflect .ValueOf (args .CurrentQQ ), reflect .ValueOf (& result )})
344+ for _ , v := range f {
345+ if result .Ban {
346+ return
347+ }
348+ result .Bot = b
349+ result .f = v
350+ result .NowIndex = 0
351+ result .MaxIndex = len (v ) - 1
352+ v [0 ].Call ([]reflect.Value {reflect .ValueOf (args .CurrentQQ ), reflect .ValueOf (& result )})
353+ }
339354 }
340355 case EventNameOnGroupAdmin :
341356 b .locker .RLock ()
@@ -348,11 +363,16 @@ func (b *BotManager) Start() error {
348363 log .Println ("解析包错误" )
349364 return
350365 }
351- result .Bot = b
352- result .f = f
353- result .NowIndex = 0
354- result .MaxIndex = len (f ) - 1
355- f [0 ].Call ([]reflect.Value {reflect .ValueOf (args .CurrentQQ ), reflect .ValueOf (& result )})
366+ for _ , v := range f {
367+ if result .Ban {
368+ return
369+ }
370+ result .Bot = b
371+ result .f = v
372+ result .NowIndex = 0
373+ result .MaxIndex = len (v ) - 1
374+ v [0 ].Call ([]reflect.Value {reflect .ValueOf (args .CurrentQQ ), reflect .ValueOf (& result )})
375+ }
356376 }
357377 case EventNameOnGroupExit :
358378 b .locker .RLock ()
@@ -365,11 +385,16 @@ func (b *BotManager) Start() error {
365385 log .Println ("解析包错误" )
366386 return
367387 }
368- result .Bot = b
369- result .f = f
370- result .NowIndex = 0
371- result .MaxIndex = len (f ) - 1
372- f [0 ].Call ([]reflect.Value {reflect .ValueOf (args .CurrentQQ ), reflect .ValueOf (& result )})
388+ for _ , v := range f {
389+ if result .Ban {
390+ return
391+ }
392+ result .Bot = b
393+ result .f = v
394+ result .NowIndex = 0
395+ result .MaxIndex = len (v ) - 1
396+ v [0 ].Call ([]reflect.Value {reflect .ValueOf (args .CurrentQQ ), reflect .ValueOf (& result )})
397+ }
373398 }
374399 case EventNameOnGroupExitSuccess :
375400 b .locker .RLock ()
@@ -382,11 +407,16 @@ func (b *BotManager) Start() error {
382407 log .Println ("解析包错误" )
383408 return
384409 }
385- result .Bot = b
386- result .f = f
387- result .NowIndex = 0
388- result .MaxIndex = len (f ) - 1
389- f [0 ].Call ([]reflect.Value {reflect .ValueOf (args .CurrentQQ ), reflect .ValueOf (& result )})
410+ for _ , v := range f {
411+ if result .Ban {
412+ return
413+ }
414+ result .Bot = b
415+ result .f = v
416+ result .NowIndex = 0
417+ result .MaxIndex = len (v ) - 1
418+ v [0 ].Call ([]reflect.Value {reflect .ValueOf (args .CurrentQQ ), reflect .ValueOf (& result )})
419+ }
390420 }
391421 case EventNameOnGroupAdminSysNotify :
392422 b .locker .RLock ()
@@ -399,11 +429,16 @@ func (b *BotManager) Start() error {
399429 log .Println ("解析包错误" )
400430 return
401431 }
402- result .Bot = b
403- result .f = f
404- result .NowIndex = 0
405- result .MaxIndex = len (f ) - 1
406- f [0 ].Call ([]reflect.Value {reflect .ValueOf (args .CurrentQQ ), reflect .ValueOf (& result )})
432+ for _ , v := range f {
433+ if result .Ban {
434+ return
435+ }
436+ result .Bot = b
437+ result .f = v
438+ result .NowIndex = 0
439+ result .MaxIndex = len (v ) - 1
440+ v [0 ].Call ([]reflect.Value {reflect .ValueOf (args .CurrentQQ ), reflect .ValueOf (& result )})
441+ }
407442 }
408443 case EventNameOnGroupRevoke :
409444 b .locker .RLock ()
@@ -416,11 +451,16 @@ func (b *BotManager) Start() error {
416451 log .Println ("解析包错误" )
417452 return
418453 }
419- result .Bot = b
420- result .f = f
421- result .NowIndex = 0
422- result .MaxIndex = len (f ) - 1
423- f [0 ].Call ([]reflect.Value {reflect .ValueOf (args .CurrentQQ ), reflect .ValueOf (& result )})
454+ for _ , v := range f {
455+ if result .Ban {
456+ return
457+ }
458+ result .Bot = b
459+ result .f = v
460+ result .NowIndex = 0
461+ result .MaxIndex = len (v ) - 1
462+ v [0 ].Call ([]reflect.Value {reflect .ValueOf (args .CurrentQQ ), reflect .ValueOf (& result )})
463+ }
424464 }
425465 case EventNameOnGroupShut :
426466 b .locker .RLock ()
@@ -433,11 +473,16 @@ func (b *BotManager) Start() error {
433473 log .Println ("解析包错误" )
434474 return
435475 }
436- result .Bot = b
437- result .f = f
438- result .NowIndex = 0
439- result .MaxIndex = len (f ) - 1
440- f [0 ].Call ([]reflect.Value {reflect .ValueOf (args .CurrentQQ ), reflect .ValueOf (& result )})
476+ for _ , v := range f {
477+ if result .Ban {
478+ return
479+ }
480+ result .Bot = b
481+ result .f = v
482+ result .NowIndex = 0
483+ result .MaxIndex = len (v ) - 1
484+ v [0 ].Call ([]reflect.Value {reflect .ValueOf (args .CurrentQQ ), reflect .ValueOf (& result )})
485+ }
441486 }
442487 case EventNameOnGroupSystemNotify :
443488 b .locker .RLock ()
@@ -450,18 +495,26 @@ func (b *BotManager) Start() error {
450495 log .Println ("解析包错误" )
451496 return
452497 }
453- result .Bot = b
454- result .f = f
455- result .NowIndex = 0
456- result .MaxIndex = len (f ) - 1
457- f [0 ].Call ([]reflect.Value {reflect .ValueOf (args .CurrentQQ ), reflect .ValueOf (& result )})
498+ for _ , v := range f {
499+ if result .Ban {
500+ return
501+ }
502+ result .Bot = b
503+ result .f = v
504+ result .NowIndex = 0
505+ result .MaxIndex = len (v ) - 1
506+ v [0 ].Call ([]reflect.Value {reflect .ValueOf (args .CurrentQQ ), reflect .ValueOf (& result )})
507+ }
458508 }
459509 default :
460510 b .locker .RLock ()
461511 defer b .locker .RUnlock ()
462512 f , ok := b .onEvent [EventNameOnOther ]
463513 if ok && len (f ) >= 1 {
464- f [0 ].Call ([]reflect.Value {reflect .ValueOf (args .CurrentQQ ), reflect .ValueOf (args )})
514+ for _ , v := range f {
515+ v [0 ].Call ([]reflect.Value {reflect .ValueOf (args .CurrentQQ ), reflect .ValueOf (args )})
516+ }
517+
465518 }
466519 }
467520 })
@@ -502,7 +555,7 @@ func (b *BotManager) ReCallMsg(GroupID, MsgRandom int64, MsgSeq int) error {
502555 return err
503556 }
504557 if result .Ret != 0 {
505- return errors .New ("Error " )
558+ return errors .New ("Error 撤回失败 " )
506559 } else {
507560 return nil
508561 }
@@ -521,7 +574,7 @@ func (b *BotManager) RefreshKey() error {
521574 return err
522575 }
523576 if result .Ret != 0 {
524- return errors .New ("Error " )
577+ return errors .New ("Error 刷新Key失败 " )
525578 } else {
526579 return nil
527580 }
@@ -940,7 +993,7 @@ func (b *BotManager) AddEvent(EventName string, f ...interface{}) error {
940993 }
941994 b .locker .Lock ()
942995 defer b .locker .Unlock ()
943- b .onEvent [EventName ] = events
996+ b .onEvent [EventName ] = append ( b . onEvent [ EventName ], events )
944997 return nil
945998
946999}
0 commit comments