diff --git a/README.md b/README.md index 4fb2a62..c2dc682 100644 --- a/README.md +++ b/README.md @@ -16,7 +16,7 @@ ### 安装 -在 [releases](https://github.com/cdle/sillyplus/releases) 中找到合适自己系统版本的程序运行带 `-t` 可以开启终端机器人,直接与程序进行交互。 +在 [releases](https://github.com/cdle/sillyGirl/releases) 中找到合适自己系统版本的程序运行带 `-t` 可以开启终端机器人,直接与程序进行交互。 ```shell ./sillyplus -t diff --git a/core/plugin_core.go b/core/plugin_core.go index 524187b..d1af596 100644 --- a/core/plugin_core.go +++ b/core/plugin_core.go @@ -416,13 +416,13 @@ func initPlugin(data string, uuid string) (*common.Function, error) { var running func() bool f := &common.Function{ Handle: func(s common.Sender) interface{} { - // defer func() { - // err := recover() - // if err != nil { - // console.Error("脚本错误:", err) - // s.Reply(fmt.Sprint(err)) - // } - // }() + defer func() { + err := recover() + if err != nil { + console.Error("脚本错误:", err) + s.Reply(fmt.Sprint(err)) + } + }() if err2 != nil { panic(err2) } diff --git a/core/plugin_impl.go b/core/plugin_impl.go index 073c708..887f91a 100644 --- a/core/plugin_impl.go +++ b/core/plugin_impl.go @@ -1,11 +1,14 @@ package core import ( + "bytes" "encoding/base64" "fmt" "io/ioutil" "net/http" + "net/url" "regexp" + "strconv" "strings" "time" @@ -502,6 +505,53 @@ func (sender *Strings) Split(s string, sep string, n int) []string { return strings.SplitN(s, sep, n) } +func (sender *Strings) EncodeQueryString(params map[string]interface{}) string { + var buf bytes.Buffer + for key, value := range params { + if buf.Len() > 0 { + buf.WriteByte('&') + } + buf.WriteString(url.QueryEscape(key)) + buf.WriteByte('=') + switch v := value.(type) { + case string: + buf.WriteString(url.QueryEscape(v)) + case int: + buf.WriteString(strconv.Itoa(v)) + case int64: + buf.WriteString(strconv.Itoa(int(v))) + case int32: + buf.WriteString(strconv.Itoa(int(v))) + case bool: + buf.WriteString(strconv.FormatBool(v)) + default: + buf.WriteString(url.QueryEscape(fmt.Sprintf("%v", v))) + } + } + return buf.String() +} + +func (sender *Strings) DecodeQueryString(querystring string) map[string]interface{} { + values, err := url.ParseQuery(querystring) + if err != nil { + panic(err) + } + params := make(map[string]interface{}) + for key, values := range values { + if len(values) > 0 { + value := values[0] + if intValue, err := strconv.Atoi(value); err == nil { + params[key] = intValue + } else if boolValue, err := strconv.ParseBool(value); err == nil { + params[key] = boolValue + } else { + params[key] = value + } + } + } + return params +} + type Fmt struct { }