update
This commit is contained in:
+36
-3
@@ -2,6 +2,7 @@ package core
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"net/url"
|
||||||
"os"
|
"os"
|
||||||
"regexp"
|
"regexp"
|
||||||
"strings"
|
"strings"
|
||||||
@@ -80,15 +81,47 @@ func AddCommand(prefix string, cmds []Function) {
|
|||||||
|
|
||||||
func handleMessage(sender Sender) {
|
func handleMessage(sender Sender) {
|
||||||
defer sender.Finish()
|
defer sender.Finish()
|
||||||
key := fmt.Sprintf("u=%v&c=%v&i=%v", sender.GetUserID(), sender.GetChatID(), sender.GetImType())
|
u, g, i := fmt.Sprint(sender.GetUserID()), fmt.Sprint(sender.GetChatID()), fmt.Sprint(sender.GetImType())
|
||||||
if v, ok := waits.Load(key); ok {
|
con := true
|
||||||
|
mtd := false
|
||||||
|
waits.Range(func(k, v interface{}) bool {
|
||||||
c := v.(*Carry)
|
c := v.(*Carry)
|
||||||
|
vs, _ := url.ParseQuery(k.(string))
|
||||||
|
userID := vs.Get("u")
|
||||||
|
chatID := vs.Get("c")
|
||||||
|
imType := vs.Get("i")
|
||||||
|
forGroup := vs.Get("f")
|
||||||
|
if imType != i {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
if chatID != g {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
if userID != u && forGroup == "" {
|
||||||
|
return true
|
||||||
|
}
|
||||||
if m := regexp.MustCompile(c.Pattern).FindString(sender.GetContent()); m != "" {
|
if m := regexp.MustCompile(c.Pattern).FindString(sender.GetContent()); m != "" {
|
||||||
|
mtd = true
|
||||||
c.Chan <- sender
|
c.Chan <- sender
|
||||||
sender.Reply(<-c.Result)
|
sender.Reply(<-c.Result)
|
||||||
|
if !sender.IsContinue() {
|
||||||
|
con = false
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true
|
||||||
|
})
|
||||||
|
if mtd && !con {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
}
|
// if v, ok := waits.Load(key); ok {
|
||||||
|
// c := v.(*Carry)
|
||||||
|
// if m := regexp.MustCompile(c.Pattern).FindString(sender.GetContent()); m != "" {
|
||||||
|
// c.Chan <- sender
|
||||||
|
// sender.Reply(<-c.Result)
|
||||||
|
// return
|
||||||
|
// }
|
||||||
|
// }
|
||||||
for _, function := range functions {
|
for _, function := range functions {
|
||||||
for _, rule := range function.Rules {
|
for _, rule := range function.Rules {
|
||||||
var matched bool
|
var matched bool
|
||||||
|
|||||||
+11
@@ -224,10 +224,15 @@ type Carry struct {
|
|||||||
Sender Sender
|
Sender Sender
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type forGroup string
|
||||||
|
|
||||||
|
var ForGroup forGroup
|
||||||
|
|
||||||
func (_ *BaseSender) Await(sender Sender, callback func(Sender) interface{}, params ...interface{}) {
|
func (_ *BaseSender) Await(sender Sender, callback func(Sender) interface{}, params ...interface{}) {
|
||||||
c := &Carry{}
|
c := &Carry{}
|
||||||
timeout := time.Second * 20
|
timeout := time.Second * 20
|
||||||
var handleErr func(error)
|
var handleErr func(error)
|
||||||
|
var fg *forGroup
|
||||||
for _, param := range params {
|
for _, param := range params {
|
||||||
switch param.(type) {
|
switch param.(type) {
|
||||||
case string:
|
case string:
|
||||||
@@ -242,6 +247,9 @@ func (_ *BaseSender) Await(sender Sender, callback func(Sender) interface{}, par
|
|||||||
|
|
||||||
case func(error):
|
case func(error):
|
||||||
handleErr = param.(func(error))
|
handleErr = param.(func(error))
|
||||||
|
case forGroup:
|
||||||
|
a := param.(forGroup)
|
||||||
|
fg = &a
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if callback == nil {
|
if callback == nil {
|
||||||
@@ -253,6 +261,9 @@ func (_ *BaseSender) Await(sender Sender, callback func(Sender) interface{}, par
|
|||||||
c.Chan = make(chan interface{}, 1)
|
c.Chan = make(chan interface{}, 1)
|
||||||
c.Result = make(chan interface{}, 1)
|
c.Result = make(chan interface{}, 1)
|
||||||
key := fmt.Sprintf("u=%v&c=%v&i=%v", sender.GetUserID(), sender.GetChatID(), sender.GetImType())
|
key := fmt.Sprintf("u=%v&c=%v&i=%v", sender.GetUserID(), sender.GetChatID(), sender.GetImType())
|
||||||
|
if fg != nil {
|
||||||
|
key += fmt.Sprintf("&t=%v&f=true", time.Now().Unix())
|
||||||
|
}
|
||||||
if oc, ok := waits.LoadOrStore(key, c); ok {
|
if oc, ok := waits.LoadOrStore(key, c); ok {
|
||||||
oc.(*Carry).Chan <- InterruptError
|
oc.(*Carry).Chan <- InterruptError
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user