diff --git a/core/function.go b/core/function.go index be47246..3ead126 100644 --- a/core/function.go +++ b/core/function.go @@ -84,8 +84,7 @@ func handleMessage(sender Sender) { if v, ok := waits.Load(key); ok { c := v.(*Carry) if m := regexp.MustCompile(c.Pattern).FindString(sender.GetContent()); m != "" { - c.Sender = sender - c.Chan <- m + c.Chan <- sender sender.Reply(<-c.Result) return } diff --git a/core/im.go b/core/im.go index 2227b89..0d60cb8 100644 --- a/core/im.go +++ b/core/im.go @@ -30,7 +30,7 @@ type Sender interface { Finish() Continue() IsContinue() bool - Await(Sender, func(string, Sender, error) interface{}, ...interface{}) + Await(Sender, func(Sender, error) interface{}, ...interface{}) } type Edit int @@ -224,7 +224,7 @@ type Carry struct { Sender Sender } -func (_ *BaseSender) Await(sender Sender, callback func(string, Sender, error) interface{}, params ...interface{}) { +func (_ *BaseSender) Await(sender Sender, callback func(Sender, error) interface{}, params ...interface{}) { c := &Carry{} timeout := time.Second * 20 for _, param := range params { @@ -237,7 +237,7 @@ func (_ *BaseSender) Await(sender Sender, callback func(string, Sender, error) i timeout = du } case func() string: - callback = param.(func(string, Sender, error) interface{}) + callback = param.(func(Sender, error) interface{}) } } if callback == nil { @@ -255,16 +255,16 @@ func (_ *BaseSender) Await(sender Sender, callback func(string, Sender, error) i select { case result := <-c.Chan: switch result.(type) { - case string: + case Sender: waits.Delete(key) - c.Result <- callback(result.(string), c.Sender, nil) + c.Result <- callback(c.Sender, nil) return case error: waits.Delete(key) - c.Result <- callback("", c.Sender, result.(error)) + c.Result <- callback(nil, result.(error)) } case <-time.After(timeout): waits.Delete(key) - c.Result <- callback("", c.Sender, TimeOutError) + c.Result <- callback(nil, TimeOutError) } } diff --git a/core/otto.go b/core/otto.go index 2f503f3..d69b624 100644 --- a/core/otto.go +++ b/core/otto.go @@ -165,41 +165,41 @@ func init123() { v, _ := otto.ToValue(s.GetUsername()) return v }) - vm.Set("Await", func(call otto.Value) interface{} { - patternV, _ := call.Object().Get("pattern") - timeoutV, _ := call.Object().Get("timeout") - timeout, _ := timeoutV.ToInteger() - pattern, _ := patternV.ToString() - s.Await(s, func(s1 string, s2 Sender, e error) interface{} { - s.Reply("-----") - if e != nil { - s.Reply(e) - return nil - } - v, err := call.Object().Call("callback", s1) - s.Reply("-+-+-+") - if err != nil { - s.Reply(err) - return nil - } - deleteV, _ := v.Object().Get("delete") - delete, _ := deleteV.ToBoolean() - if delete { - s2.Delete() - } - disappearV, _ := call.Object().Get("disappear") - disappear, _ := disappearV.ToInteger() - fmt.Println(disappear, "====") - s2.Disappear(time.Millisecond * time.Duration(disappear)) - replyV, _ := v.Object().Get("reply") - reply, _ := replyV.ToString() - if reply != "" { - return reply - } - return nil - }, pattern, time.Millisecond*time.Duration(timeout)) - return otto.Value{} - }) + // vm.Set("Await", func(call otto.Value) interface{} { + // patternV, _ := call.Object().Get("pattern") + // timeoutV, _ := call.Object().Get("timeout") + // timeout, _ := timeoutV.ToInteger() + // pattern, _ := patternV.ToString() + // s.Await(s, func(s1 string, s2 Sender, e error) interface{} { + // s.Reply("-----") + // if e != nil { + // s.Reply(e) + // return nil + // } + // v, err := call.Object().Call("callback", s1) + // s.Reply("-+-+-+") + // if err != nil { + // s.Reply(err) + // return nil + // } + // deleteV, _ := v.Object().Get("delete") + // delete, _ := deleteV.ToBoolean() + // if delete { + // s2.Delete() + // } + // disappearV, _ := call.Object().Get("disappear") + // disappear, _ := disappearV.ToInteger() + // fmt.Println(disappear, "====") + // s2.Disappear(time.Millisecond * time.Duration(disappear)) + // replyV, _ := v.Object().Get("reply") + // reply, _ := replyV.ToString() + // if reply != "" { + // return reply + // } + // return nil + // }, pattern, time.Millisecond*time.Duration(timeout)) + // return otto.Value{} + // }) vm.Set("GetUserID", func() otto.Value { v, _ := otto.ToValue(s.GetUserID()) return v diff --git a/core/test.go b/core/test.go index 482037d..0fe6ff8 100644 --- a/core/test.go +++ b/core/test.go @@ -166,7 +166,7 @@ func initSys() { old := b.Get(s.Get(1)) b.Set(s.Get(1), s.Get(2)) go func() { - s.Await(s, func(_ string, _ Sender, e error) interface{} { + s.Await(s, func(_ Sender, e error) interface{} { if e != nil { return nil } @@ -261,7 +261,7 @@ Alias=sillyGirl.service` Handle: func(s Sender) interface{} { s.Reply("你已涉黄永久禁言。") for { - s.Await(s, func(_ string, s2 Sender, _ error) interface{} { + s.Await(s, func(s2 Sender, _ error) interface{} { s2.Disappear(time.Millisecond * 50) return "你已被禁言。" }, `[\s\S]*`, time.Duration(time.Second*300)) @@ -278,8 +278,11 @@ Alias=sillyGirl.service` } s.Reply(data) for { - s.Await(s, func(s1 string, s2 Sender, _ error) interface{} { - cy := regexp.MustCompile("^[一-龥]{4}$").FindString(s1) + s.Await(s, func(s2 Sender, err error) interface{} { + if err != nil { + s2.Reply(err) + } + cy := regexp.MustCompile("^[一-龥]{4}$").FindString(s2.GetContent()) if cy == "" { s2.Disappear(time.Millisecond * 500) return "请认真接龙,一站到底!。"