diff --git a/core/function.go b/core/function.go index 9a2bffb..818418c 100644 --- a/core/function.go +++ b/core/function.go @@ -79,6 +79,7 @@ func AddCommand(prefix string, cmds []Function) { } func handleMessage(sender Sender) { + defer sender.Finish() for _, function := range functions { for _, rule := range function.Rules { var matched bool @@ -109,10 +110,13 @@ func handleMessage(sender Sender) { if rt != nil { sender.Reply(rt) } - sender.Finish() + if sender.IsContinue() { + goto goon + } return } } + goon: } } diff --git a/core/im.go b/core/im.go index e23a630..31551f5 100644 --- a/core/im.go +++ b/core/im.go @@ -26,6 +26,8 @@ type Sender interface { Delete() error Disappear(lifetime ...time.Duration) Finish() + Continue() + IsContinue() bool } type Edit int @@ -157,3 +159,11 @@ func (sender *Faker) Finish() { func (sender *Faker) GetUserName() string { return "" } + +func (sender *Faker) Continue() { + +} + +func (sender *Faker) IsContinue() bool { + return true +} diff --git a/core/otto.go b/core/otto.go index 6a40c23..812105d 100644 --- a/core/otto.go +++ b/core/otto.go @@ -158,7 +158,11 @@ func init123() { v, _ := otto.ToValue(s.GetUserName()) return v } + Continue := func() { + s.Continue() + } vm := otto.New() + vm.Set("Continue", Continue) vm.Set("GetUserName", GetUserName) vm.Set("set", set) vm.Set("param", param) diff --git a/im/qq/sender.go b/im/qq/sender.go index c07637d..18e27bb 100644 --- a/im/qq/sender.go +++ b/im/qq/sender.go @@ -17,6 +17,7 @@ type Sender struct { matches [][]string Duration *time.Duration deleted bool + goon bool } func (sender *Sender) GetContent() string { @@ -303,3 +304,11 @@ func (sender *Sender) GetUserName() string { } return "" } + +func (sender *Sender) Continue() { + sender.goon = true +} + +func (sender *Sender) IsContinue() bool { + return sender.goon +} diff --git a/im/tg/tg.go b/im/tg/tg.go index fa70345..feb5dd3 100644 --- a/im/tg/tg.go +++ b/im/tg/tg.go @@ -17,6 +17,7 @@ type Sender struct { Duration *time.Duration deleted bool reply *tb.Message + goon bool } var tg = core.NewBucket("tg") @@ -264,3 +265,11 @@ func (sender *Sender) GetUserName() string { } return name } + +func (sender *Sender) Continue() { + sender.goon = true +} + +func (sender *Sender) IsContinue() bool { + return sender.goon +} diff --git a/im/wxmp/init.go b/im/wxmp/init.go index 5632ea5..f00c3f2 100644 --- a/im/wxmp/init.go +++ b/im/wxmp/init.go @@ -110,6 +110,7 @@ type Sender struct { Responses []interface{} Wait chan []interface{} uid int + goon bool } func (sender *Sender) GetContent() string { @@ -208,3 +209,11 @@ func (sender *Sender) Finish() { func (sender *Sender) GetUserName() string { return "" } + +func (sender *Sender) Continue() { + sender.goon = true +} + +func (sender *Sender) IsContinue() bool { + return sender.goon +}