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

Commit

Permalink
Merge pull request #13 from opq-osc/beta
Browse files Browse the repository at this point in the history
Beta
  • Loading branch information
mcoo committed Jul 7, 2021
2 parents 3860499 + d74c996 commit 9eda25d
Show file tree
Hide file tree
Showing 2 changed files with 115 additions and 58 deletions.
169 changes: 111 additions & 58 deletions main.go
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ type BotManager struct {
wg sync.WaitGroup
myRecord map[string]MyRecord
myRecordLocker sync.RWMutex
onEvent map[string][]reflect.Value
onEvent map[string][][]reflect.Value
middleware []middleware
delayed int
locker sync.RWMutex
Expand Down Expand Up @@ -155,7 +155,7 @@ func NewBotManager(QQ int64, OPQUrl string) BotManager {
panic(err)
}
go s.GC()
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}
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}
go func() {
for {
select {
Expand Down Expand Up @@ -216,7 +216,7 @@ func (b *BotManager) Start() error {
// log.Println("连接成功!")
f, ok := b.onEvent[EventNameOnConnected]
if ok && len(f) >= 1 {
f[0].Call([]reflect.Value{})
f[0][0].Call([]reflect.Value{})
}
})
if err != nil {
Expand All @@ -227,7 +227,7 @@ func (b *BotManager) Start() error {
// log.Println("连接断开!")
f, ok := b.onEvent[EventNameOnDisconnected]
if ok && len(f) >= 1 {
f[0].Call([]reflect.Value{})
f[0][0].Call([]reflect.Value{})
}
b.restart <- 1
})
Expand Down Expand Up @@ -267,12 +267,17 @@ func (b *BotManager) Start() error {
b.myRecordLocker.Unlock()
}()
}
result.Bot = b
result.f = f
result.NowIndex = 0
result.MaxIndex = len(f) - 1
for _, v := range f {
if result.Ban {
return
}
result.Bot = b
result.f = v
result.NowIndex = 0
result.MaxIndex = len(v) - 1
v[0].Call([]reflect.Value{reflect.ValueOf(args.CurrentQQ), reflect.ValueOf(&result)})
}

f[0].Call([]reflect.Value{reflect.ValueOf(args.CurrentQQ), reflect.ValueOf(&result)})
}
//log.Println(args)
})
Expand All @@ -293,11 +298,16 @@ func (b *BotManager) Start() error {
log.Println("解析包错误")
return
}
result.Bot = b
result.f = f
result.NowIndex = 0
result.MaxIndex = len(f) - 1
f[0].Call([]reflect.Value{reflect.ValueOf(args.CurrentQQ), reflect.ValueOf(&result)})
for _, v := range f {
if result.Ban {
return
}
result.Bot = b
result.f = v
result.NowIndex = 0
result.MaxIndex = len(v) - 1
v[0].Call([]reflect.Value{reflect.ValueOf(args.CurrentQQ), reflect.ValueOf(&result)})
}
}
//log.Println(args)
})
Expand Down Expand Up @@ -331,11 +341,16 @@ func (b *BotManager) Start() error {
log.Println("解析包错误")
return
}
result.Bot = b
result.f = f
result.NowIndex = 0
result.MaxIndex = len(f) - 1
f[0].Call([]reflect.Value{reflect.ValueOf(args.CurrentQQ), reflect.ValueOf(&result)})
for _, v := range f {
if result.Ban {
return
}
result.Bot = b
result.f = v
result.NowIndex = 0
result.MaxIndex = len(v) - 1
v[0].Call([]reflect.Value{reflect.ValueOf(args.CurrentQQ), reflect.ValueOf(&result)})
}
}
case EventNameOnGroupAdmin:
b.locker.RLock()
Expand All @@ -348,11 +363,16 @@ func (b *BotManager) Start() error {
log.Println("解析包错误")
return
}
result.Bot = b
result.f = f
result.NowIndex = 0
result.MaxIndex = len(f) - 1
f[0].Call([]reflect.Value{reflect.ValueOf(args.CurrentQQ), reflect.ValueOf(&result)})
for _, v := range f {
if result.Ban {
return
}
result.Bot = b
result.f = v
result.NowIndex = 0
result.MaxIndex = len(v) - 1
v[0].Call([]reflect.Value{reflect.ValueOf(args.CurrentQQ), reflect.ValueOf(&result)})
}
}
case EventNameOnGroupExit:
b.locker.RLock()
Expand All @@ -365,11 +385,16 @@ func (b *BotManager) Start() error {
log.Println("解析包错误")
return
}
result.Bot = b
result.f = f
result.NowIndex = 0
result.MaxIndex = len(f) - 1
f[0].Call([]reflect.Value{reflect.ValueOf(args.CurrentQQ), reflect.ValueOf(&result)})
for _, v := range f {
if result.Ban {
return
}
result.Bot = b
result.f = v
result.NowIndex = 0
result.MaxIndex = len(v) - 1
v[0].Call([]reflect.Value{reflect.ValueOf(args.CurrentQQ), reflect.ValueOf(&result)})
}
}
case EventNameOnGroupExitSuccess:
b.locker.RLock()
Expand All @@ -382,11 +407,16 @@ func (b *BotManager) Start() error {
log.Println("解析包错误")
return
}
result.Bot = b
result.f = f
result.NowIndex = 0
result.MaxIndex = len(f) - 1
f[0].Call([]reflect.Value{reflect.ValueOf(args.CurrentQQ), reflect.ValueOf(&result)})
for _, v := range f {
if result.Ban {
return
}
result.Bot = b
result.f = v
result.NowIndex = 0
result.MaxIndex = len(v) - 1
v[0].Call([]reflect.Value{reflect.ValueOf(args.CurrentQQ), reflect.ValueOf(&result)})
}
}
case EventNameOnGroupAdminSysNotify:
b.locker.RLock()
Expand All @@ -399,11 +429,16 @@ func (b *BotManager) Start() error {
log.Println("解析包错误")
return
}
result.Bot = b
result.f = f
result.NowIndex = 0
result.MaxIndex = len(f) - 1
f[0].Call([]reflect.Value{reflect.ValueOf(args.CurrentQQ), reflect.ValueOf(&result)})
for _, v := range f {
if result.Ban {
return
}
result.Bot = b
result.f = v
result.NowIndex = 0
result.MaxIndex = len(v) - 1
v[0].Call([]reflect.Value{reflect.ValueOf(args.CurrentQQ), reflect.ValueOf(&result)})
}
}
case EventNameOnGroupRevoke:
b.locker.RLock()
Expand All @@ -416,11 +451,16 @@ func (b *BotManager) Start() error {
log.Println("解析包错误")
return
}
result.Bot = b
result.f = f
result.NowIndex = 0
result.MaxIndex = len(f) - 1
f[0].Call([]reflect.Value{reflect.ValueOf(args.CurrentQQ), reflect.ValueOf(&result)})
for _, v := range f {
if result.Ban {
return
}
result.Bot = b
result.f = v
result.NowIndex = 0
result.MaxIndex = len(v) - 1
v[0].Call([]reflect.Value{reflect.ValueOf(args.CurrentQQ), reflect.ValueOf(&result)})
}
}
case EventNameOnGroupShut:
b.locker.RLock()
Expand All @@ -433,11 +473,16 @@ func (b *BotManager) Start() error {
log.Println("解析包错误")
return
}
result.Bot = b
result.f = f
result.NowIndex = 0
result.MaxIndex = len(f) - 1
f[0].Call([]reflect.Value{reflect.ValueOf(args.CurrentQQ), reflect.ValueOf(&result)})
for _, v := range f {
if result.Ban {
return
}
result.Bot = b
result.f = v
result.NowIndex = 0
result.MaxIndex = len(v) - 1
v[0].Call([]reflect.Value{reflect.ValueOf(args.CurrentQQ), reflect.ValueOf(&result)})
}
}
case EventNameOnGroupSystemNotify:
b.locker.RLock()
Expand All @@ -450,18 +495,26 @@ func (b *BotManager) Start() error {
log.Println("解析包错误")
return
}
result.Bot = b
result.f = f
result.NowIndex = 0
result.MaxIndex = len(f) - 1
f[0].Call([]reflect.Value{reflect.ValueOf(args.CurrentQQ), reflect.ValueOf(&result)})
for _, v := range f {
if result.Ban {
return
}
result.Bot = b
result.f = v
result.NowIndex = 0
result.MaxIndex = len(v) - 1
v[0].Call([]reflect.Value{reflect.ValueOf(args.CurrentQQ), reflect.ValueOf(&result)})
}
}
default:
b.locker.RLock()
defer b.locker.RUnlock()
f, ok := b.onEvent[EventNameOnOther]
if ok && len(f) >= 1 {
f[0].Call([]reflect.Value{reflect.ValueOf(args.CurrentQQ), reflect.ValueOf(args)})
for _, v := range f {
v[0].Call([]reflect.Value{reflect.ValueOf(args.CurrentQQ), reflect.ValueOf(args)})
}

}
}
})
Expand Down Expand Up @@ -502,7 +555,7 @@ func (b *BotManager) ReCallMsg(GroupID, MsgRandom int64, MsgSeq int) error {
return err
}
if result.Ret != 0 {
return errors.New("Error ")
return errors.New("Error 撤回失败")
} else {
return nil
}
Expand All @@ -521,7 +574,7 @@ func (b *BotManager) RefreshKey() error {
return err
}
if result.Ret != 0 {
return errors.New("Error ")
return errors.New("Error 刷新Key失败")
} else {
return nil
}
Expand Down Expand Up @@ -940,7 +993,7 @@ func (b *BotManager) AddEvent(EventName string, f ...interface{}) error {
}
b.locker.Lock()
defer b.locker.Unlock()
b.onEvent[EventName] = events
b.onEvent[EventName] = append(b.onEvent[EventName], events)
return nil

}
Expand Down
4 changes: 4 additions & 0 deletions model.go
Original file line number Diff line number Diff line change
Expand Up @@ -164,13 +164,17 @@ type MyRecord struct {
Content string `json:"Content"`
}
type Context struct {
Ban bool
NowIndex int
MaxIndex int
f []reflect.Value
Bot *BotManager
}

func (ctx *Context) Next(currentQQ int64, result interface{}) {
if ctx.Ban {
return
}
if ctx.NowIndex >= ctx.MaxIndex {
return
}
Expand Down

0 comments on commit 9eda25d

Please sign in to comment.