diff --git a/core/im.go b/core/im.go index b108e43..e23a630 100644 --- a/core/im.go +++ b/core/im.go @@ -19,6 +19,7 @@ type Sender interface { GetAllMatch() [][]string Get(...int) string GetContent() string + GetUserName() string IsAdmin() bool IsMedia() bool Reply(...interface{}) (int, error) @@ -152,3 +153,7 @@ func (sender *Faker) Disappear(lifetime ...time.Duration) { func (sender *Faker) Finish() { } + +func (sender *Faker) GetUserName() string { + return "" +} diff --git a/core/otto.go b/core/otto.go index 5f7ec9f..2508102 100644 --- a/core/otto.go +++ b/core/otto.go @@ -139,7 +139,6 @@ func init() { } var handler = func(s Sender) interface{} { template := data - template = strings.Replace(template, "ImType()", fmt.Sprintf(`"%s"`, s.GetImType()), -1) template = strings.Replace(template, "GetChatID()", fmt.Sprint(s.GetChatID()), -1) param := func(call otto.Value) otto.Value { @@ -147,7 +146,12 @@ func init() { v, _ := otto.ToValue(s.Get(int(i - 1))) return v } + GetUserName := func(_ otto.Value) otto.Value { + v, _ := otto.ToValue(s.GetUserName()) + return v + } vm := otto.New() + vm.Set("GetUserName", GetUserName) vm.Set("set", set) vm.Set("param", param) vm.Set("get", get) @@ -170,7 +174,7 @@ func init() { result := rt.String() for _, v := range regexp.MustCompile(`\[image:\s*([^\s\[\]]+)\s*\]`).FindAllStringSubmatch(result, -1) { s.Reply(ImageUrl(v[1])) - result = strings.Replace(result, fmt.Sprintf(`[image:%s]`, v[1]), "", -1) + result = strings.Replace(result, fmt.Sprintf(`[image:%s]\n`, v[1]), "", -1) } if result == "" { return nil diff --git a/im/qq/sender.go b/im/qq/sender.go index 4672a0c..15e640b 100644 --- a/im/qq/sender.go +++ b/im/qq/sender.go @@ -278,3 +278,18 @@ func (sender *Sender) Disappear(lifetime ...time.Duration) { func (sender *Sender) Finish() { } + +func (sender *Sender) GetUserName() string { + switch sender.Message.(type) { + case *message.PrivateMessage: + m := sender.Message.(*message.PrivateMessage) + return m.Sender.Nickname + case *message.TempMessage: + m := sender.Message.(*message.TempMessage) + return m.Sender.Nickname + case *message.GroupMessage: + m := sender.Message.(*message.GroupMessage) + return m.Sender.Nickname + } + return "" +} diff --git a/im/tg/tg.go b/im/tg/tg.go index 1497814..9915986 100644 --- a/im/tg/tg.go +++ b/im/tg/tg.go @@ -252,3 +252,7 @@ func (sender *Sender) Disappear(lifetime ...time.Duration) { func (sender *Sender) Finish() { } + +func (sender *Sender) GetUserName() string { + return sender.Message.Chat.Username +} diff --git a/im/wxmp/init.go b/im/wxmp/init.go index 6a069d8..5632ea5 100644 --- a/im/wxmp/init.go +++ b/im/wxmp/init.go @@ -204,3 +204,7 @@ func (sender *Sender) Finish() { } sender.Wait <- sender.Responses } + +func (sender *Sender) GetUserName() string { + return "" +}