This commit is contained in:
cdle
2021-10-11 21:29:30 +08:00
parent 31d1292a46
commit 704535e4e9
4 changed files with 50 additions and 48 deletions
+1 -2
View File
@@ -84,8 +84,7 @@ func handleMessage(sender Sender) {
if v, ok := waits.Load(key); ok { if v, ok := waits.Load(key); ok {
c := v.(*Carry) c := v.(*Carry)
if m := regexp.MustCompile(c.Pattern).FindString(sender.GetContent()); m != "" { if m := regexp.MustCompile(c.Pattern).FindString(sender.GetContent()); m != "" {
c.Sender = sender c.Chan <- sender
c.Chan <- m
sender.Reply(<-c.Result) sender.Reply(<-c.Result)
return return
} }
+7 -7
View File
@@ -30,7 +30,7 @@ type Sender interface {
Finish() Finish()
Continue() Continue()
IsContinue() bool IsContinue() bool
Await(Sender, func(string, Sender, error) interface{}, ...interface{}) Await(Sender, func(Sender, error) interface{}, ...interface{})
} }
type Edit int type Edit int
@@ -224,7 +224,7 @@ type Carry struct {
Sender Sender 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{} c := &Carry{}
timeout := time.Second * 20 timeout := time.Second * 20
for _, param := range params { for _, param := range params {
@@ -237,7 +237,7 @@ func (_ *BaseSender) Await(sender Sender, callback func(string, Sender, error) i
timeout = du timeout = du
} }
case func() string: case func() string:
callback = param.(func(string, Sender, error) interface{}) callback = param.(func(Sender, error) interface{})
} }
} }
if callback == nil { if callback == nil {
@@ -255,16 +255,16 @@ func (_ *BaseSender) Await(sender Sender, callback func(string, Sender, error) i
select { select {
case result := <-c.Chan: case result := <-c.Chan:
switch result.(type) { switch result.(type) {
case string: case Sender:
waits.Delete(key) waits.Delete(key)
c.Result <- callback(result.(string), c.Sender, nil) c.Result <- callback(c.Sender, nil)
return return
case error: case error:
waits.Delete(key) waits.Delete(key)
c.Result <- callback("", c.Sender, result.(error)) c.Result <- callback(nil, result.(error))
} }
case <-time.After(timeout): case <-time.After(timeout):
waits.Delete(key) waits.Delete(key)
c.Result <- callback("", c.Sender, TimeOutError) c.Result <- callback(nil, TimeOutError)
} }
} }
+35 -35
View File
@@ -165,41 +165,41 @@ func init123() {
v, _ := otto.ToValue(s.GetUsername()) v, _ := otto.ToValue(s.GetUsername())
return v return v
}) })
vm.Set("Await", func(call otto.Value) interface{} { // vm.Set("Await", func(call otto.Value) interface{} {
patternV, _ := call.Object().Get("pattern") // patternV, _ := call.Object().Get("pattern")
timeoutV, _ := call.Object().Get("timeout") // timeoutV, _ := call.Object().Get("timeout")
timeout, _ := timeoutV.ToInteger() // timeout, _ := timeoutV.ToInteger()
pattern, _ := patternV.ToString() // pattern, _ := patternV.ToString()
s.Await(s, func(s1 string, s2 Sender, e error) interface{} { // s.Await(s, func(s1 string, s2 Sender, e error) interface{} {
s.Reply("-----") // s.Reply("-----")
if e != nil { // if e != nil {
s.Reply(e) // s.Reply(e)
return nil // return nil
} // }
v, err := call.Object().Call("callback", s1) // v, err := call.Object().Call("callback", s1)
s.Reply("-+-+-+") // s.Reply("-+-+-+")
if err != nil { // if err != nil {
s.Reply(err) // s.Reply(err)
return nil // return nil
} // }
deleteV, _ := v.Object().Get("delete") // deleteV, _ := v.Object().Get("delete")
delete, _ := deleteV.ToBoolean() // delete, _ := deleteV.ToBoolean()
if delete { // if delete {
s2.Delete() // s2.Delete()
} // }
disappearV, _ := call.Object().Get("disappear") // disappearV, _ := call.Object().Get("disappear")
disappear, _ := disappearV.ToInteger() // disappear, _ := disappearV.ToInteger()
fmt.Println(disappear, "====") // fmt.Println(disappear, "====")
s2.Disappear(time.Millisecond * time.Duration(disappear)) // s2.Disappear(time.Millisecond * time.Duration(disappear))
replyV, _ := v.Object().Get("reply") // replyV, _ := v.Object().Get("reply")
reply, _ := replyV.ToString() // reply, _ := replyV.ToString()
if reply != "" { // if reply != "" {
return reply // return reply
} // }
return nil // return nil
}, pattern, time.Millisecond*time.Duration(timeout)) // }, pattern, time.Millisecond*time.Duration(timeout))
return otto.Value{} // return otto.Value{}
}) // })
vm.Set("GetUserID", func() otto.Value { vm.Set("GetUserID", func() otto.Value {
v, _ := otto.ToValue(s.GetUserID()) v, _ := otto.ToValue(s.GetUserID())
return v return v
+7 -4
View File
@@ -166,7 +166,7 @@ func initSys() {
old := b.Get(s.Get(1)) old := b.Get(s.Get(1))
b.Set(s.Get(1), s.Get(2)) b.Set(s.Get(1), s.Get(2))
go func() { go func() {
s.Await(s, func(_ string, _ Sender, e error) interface{} { s.Await(s, func(_ Sender, e error) interface{} {
if e != nil { if e != nil {
return nil return nil
} }
@@ -261,7 +261,7 @@ Alias=sillyGirl.service`
Handle: func(s Sender) interface{} { Handle: func(s Sender) interface{} {
s.Reply("你已涉黄永久禁言。") s.Reply("你已涉黄永久禁言。")
for { for {
s.Await(s, func(_ string, s2 Sender, _ error) interface{} { s.Await(s, func(s2 Sender, _ error) interface{} {
s2.Disappear(time.Millisecond * 50) s2.Disappear(time.Millisecond * 50)
return "你已被禁言。" return "你已被禁言。"
}, `[\s\S]*`, time.Duration(time.Second*300)) }, `[\s\S]*`, time.Duration(time.Second*300))
@@ -278,8 +278,11 @@ Alias=sillyGirl.service`
} }
s.Reply(data) s.Reply(data)
for { for {
s.Await(s, func(s1 string, s2 Sender, _ error) interface{} { s.Await(s, func(s2 Sender, err error) interface{} {
cy := regexp.MustCompile("^[一-龥]{4}$").FindString(s1) if err != nil {
s2.Reply(err)
}
cy := regexp.MustCompile("^[一-龥]{4}$").FindString(s2.GetContent())
if cy == "" { if cy == "" {
s2.Disappear(time.Millisecond * 500) s2.Disappear(time.Millisecond * 500)
return "请认真接龙,一站到底!。" return "请认真接龙,一站到底!。"