This commit is contained in:
cdle
2021-09-30 15:49:28 +08:00
parent 80d1929a15
commit a778a3609b
+59 -23
View File
@@ -20,34 +20,37 @@ func init() {
logs.Warn("打开文件夹%s错误,%v", ExecPath+"/develop/replies", err) logs.Warn("打开文件夹%s错误,%v", ExecPath+"/develop/replies", err)
return return
} }
for _, v := range files { var o = NewBucket("otto")
if v.IsDir() { get := func(call otto.FunctionCall) (result otto.Value) {
continue key := call.Argument(0).String()
value := call.Argument(1).String()
result, _ = otto.ToValue(o.Get(key, value))
return
} }
jr := string(ExecPath + "/develop/replies/" + v.Name()) set := func(call otto.FunctionCall) interface{} {
data := "" key := call.Argument(0).String()
if strings.Contains(jr, "http") { value := call.Argument(1).String()
data, err = httplib.Get(jr).String() o.Set(key, value)
if err != nil { return otto.Value{}
logs.Warn("回复:%s获取失败%v", jr, err) }
continue sendMessage := func(call otto.Value) interface{} {
imType, _ := call.Object().Get("imType")
groupCode, _ := call.Object().Get("groupCode")
userID, _ := call.Object().Get("userID")
message, _ := call.Object().Get("message")
gid, _ := groupCode.ToInteger()
if gid != 0 {
if push, ok := GroupPushs[imType.String()]; ok {
uid, _ := userID.ToInteger()
push(int(gid), int(uid), message.String())
} }
} else { } else {
f, err := os.Open(jr) if push, ok := Pushs[imType.String()]; ok {
if err != nil { uid, _ := userID.ToInteger()
logs.Warn("回复:%s打开失败%v", jr, err) push(int(uid), message.String())
continue
} }
v, _ := ioutil.ReadAll(f)
data = string(v)
} }
rules := []string{} return otto.Value{}
for _, v := range regexp.MustCompile(`\[rule:\s*([^\s\[\]]+)\s*\]`).FindAllStringSubmatch(data, -1) {
rules = append(rules, v[1])
}
if len(rules) == 0 {
logs.Warn("回复:%s找不到规则", jr, err)
continue
} }
request := func(call otto.Value) interface{} { request := func(call otto.Value) interface{} {
url := "" url := ""
@@ -94,13 +97,46 @@ func init() {
} }
return result return result
} }
for _, v := range files {
if v.IsDir() {
continue
}
jr := string(ExecPath + "/develop/replies/" + v.Name())
data := ""
if strings.Contains(jr, "http") {
data, err = httplib.Get(jr).String()
if err != nil {
logs.Warn("回复:%s获取失败%v", jr, err)
continue
}
} else {
f, err := os.Open(jr)
if err != nil {
logs.Warn("回复:%s打开失败%v", jr, err)
continue
}
v, _ := ioutil.ReadAll(f)
data = string(v)
}
rules := []string{}
for _, v := range regexp.MustCompile(`\[rule:\s*([^\s\[\]]+)\s*\]`).FindAllStringSubmatch(data, -1) {
rules = append(rules, v[1])
}
if len(rules) == 0 {
logs.Warn("回复:%s找不到规则", jr, err)
continue
}
var handler = func(s Sender) interface{} { var handler = func(s Sender) interface{} {
template := data template := data
for k, v := range s.GetMatch() { for k, v := range s.GetMatch() {
template = strings.Replace(template, fmt.Sprintf(`param(%d)`, k+1), fmt.Sprintf(`"%s"`, v), -1) template = strings.Replace(template, fmt.Sprintf(`param(%d)`, k+1), fmt.Sprintf(`"%s"`, v), -1)
} }
vm := otto.New() vm := otto.New()
vm.Set("set", set)
vm.Set("get", get)
vm.Set("request", request) vm.Set("request", request)
vm.Set("sendGroupMessage", sendMessage)
vm.Set("sendText", func(call otto.Value) interface{} { vm.Set("sendText", func(call otto.Value) interface{} {
s.Reply(call.String()) s.Reply(call.String())
return nil return nil