diff --git a/core/adapter.go b/core/adapter.go index ccf9660..d8dd236 100644 --- a/core/adapter.go +++ b/core/adapter.go @@ -67,13 +67,13 @@ var BotsLocker sync.RWMutex var ErrNotFind = errors.New("adapter not find") func DestroyAdapterByUUID(uuid string) { - BotsLocker.RLock() - defer BotsLocker.RUnlock() - for i := range Bots { - if Bots[i].uuid == uuid { - go Bots[i].Destroy() - } - } + // BotsLocker.RLock() + // defer BotsLocker.RUnlock() + // for i := range Bots { + // if Bots[i].uuid == uuid { + // go Bots[i].Destroy() + // } + // } } func GetAdapter(botplt string, bots_id ...string) (*Factory, error) { diff --git a/core/node_strings.go b/core/node_strings.go index 5763dfe..a3bc96b 100644 --- a/core/node_strings.go +++ b/core/node_strings.go @@ -9,6 +9,7 @@ import ( "strings" "github.com/cdle/sillyplus/emoji" + "github.com/cdle/sillyplus/utils" ) type Strings struct { @@ -201,3 +202,7 @@ func (sender *Strings) ReplaceToEmojis(str string, pattern string) string { func (sender *Strings) ExtractAddress(input string) string { return regexp.MustCompile(`http[s]?://[\w.]+:?\d*`).FindString(input) } + +func (sender *Strings) Unique(str ...interface{}) []string { + return utils.Unique(str...) +} diff --git a/core/plugin_publish.go b/core/plugin_publish.go index 436d820..45c624a 100644 --- a/core/plugin_publish.go +++ b/core/plugin_publish.go @@ -81,7 +81,7 @@ func publicScript(str string) string { if su.GetValue("title") == "" { su.SetValue("title", "无名脚本") } - if su.GetValue("message") == "" { + if su.GetValue("message") != "" { su.DeleteValue("message") } create_at := su.GetValue("create_at") diff --git a/utils/init.go b/utils/init.go index 5a012f8..48fe6af 100644 --- a/utils/init.go +++ b/utils/init.go @@ -308,24 +308,82 @@ func IsZeroOrEmpty(str string) bool { return str == "0" || str == "" || str == "nil" } +// func Unique(strs ...interface{}) []string { +// m := make(map[string]bool) +// var result []string +// for _, arg := range strs { +// switch arg := arg.(type) { +// case []string: +// for _, v := range arg { +// if _, ok := m[v]; !ok { +// m[v] = true +// result = append(result, v) +// } +// } +// case string: +// if _, ok := m[arg]; !ok { +// m[arg] = true +// result = append(result, arg) +// } +// } +// } +// return result +// } + func Unique(strs ...interface{}) []string { - m := make(map[string]bool) var result []string for _, arg := range strs { + var toAppend []string switch arg := arg.(type) { case []string: for _, v := range arg { - if _, ok := m[v]; !ok { - m[v] = true - result = append(result, v) + if !contains(result, v) && !contains(toAppend, v) { + toAppend = append(toAppend, v) + } + } + case []interface{}: + for _, v := range arg { + if !contains(result, v.(string)) && !contains(toAppend, v.(string)) { + toAppend = append(toAppend, v.(string)) } } case string: - if _, ok := m[arg]; !ok { - m[arg] = true - result = append(result, arg) + if !contains(result, arg) { + toAppend = append(toAppend, arg) } + case [][]string: + subResult := Unique(flatten(arg)...) + for _, v := range subResult { + if !contains(result, v) && !contains(toAppend, v) { + toAppend = append(toAppend, v) + } + } + default: + // Unsupported type + continue } + result = append(result, toAppend...) + } + return result +} + +func contains(strs []string, s string) bool { + for _, v := range strs { + if v == s { + return true + } + } + return false +} + +func flatten(arr [][]string) []interface{} { + var result []interface{} + for _, subarr := range arr { + var subresult []interface{} + for _, v := range subarr { + subresult = append(subresult, v) + } + result = append(result, subresult) } return result }