Skip to content
This repository was archived by the owner on Jul 27, 2024. It is now read-only.

Commit 9eda25d

Browse files
authored
Merge pull request #13 from opq-osc/beta
Beta
2 parents 3860499 + d74c996 commit 9eda25d

File tree

2 files changed

+115
-58
lines changed

2 files changed

+115
-58
lines changed

main.go

Lines changed: 111 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -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
}

model.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -164,13 +164,17 @@ type MyRecord struct {
164164
Content string `json:"Content"`
165165
}
166166
type Context struct {
167+
Ban bool
167168
NowIndex int
168169
MaxIndex int
169170
f []reflect.Value
170171
Bot *BotManager
171172
}
172173

173174
func (ctx *Context) Next(currentQQ int64, result interface{}) {
175+
if ctx.Ban {
176+
return
177+
}
174178
if ctx.NowIndex >= ctx.MaxIndex {
175179
return
176180
}

0 commit comments

Comments
 (0)