diff --git a/base/cli/cli.go b/base/cli/cli.go index a5c06ede..eed468e7 100644 --- a/base/cli/cli.go +++ b/base/cli/cli.go @@ -74,7 +74,7 @@ var Index = &ice.Context{Name: "cli", Help: "命令模块", PathName = m.Conf(RUNTIME, "boot.pathname") // 启动记录 - count := m.Confi(RUNTIME, "boot.count") + 1 + count := kit.Int(m.Conf(RUNTIME, "boot.count")) + 1 m.Conf(RUNTIME, "boot.count", count) // 节点信息 diff --git a/base/mdb/lbs.go b/base/mdb/lbs.go deleted file mode 100644 index c54eaa7b..00000000 --- a/base/mdb/lbs.go +++ /dev/null @@ -1,63 +0,0 @@ -package mdb - -import ( - "github.com/shylinux/icebergs" - "github.com/shylinux/toolkits" - - "math" -) - -func distance(lat1, long1, lat2, long2 float64) float64 { - lat1 = lat1 * math.Pi / 180 - long1 = long1 * math.Pi / 180 - lat2 = lat2 * math.Pi / 180 - long2 = long2 * math.Pi / 180 - return 2 * 6371 * math.Asin(math.Sqrt(math.Pow(math.Sin(math.Abs(lat1-lat2)/2), 2)+math.Cos(lat1)*math.Cos(lat2)*math.Pow(math.Sin(math.Abs(long1-long2)/2), 2))) -} - -func init() { - Index.Merge(&ice.Context{ - Configs: map[string]*ice.Config{ - "location": {Name: "location", Help: "定位", Value: kit.Data(kit.MDB_SHORT, "name")}, - }, - Commands: map[string]*ice.Command{ - "location": {Name: "location", Help: "location", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { - if len(arg) == 0 { - m.Grows("location", nil, "", "", func(index int, value map[string]interface{}) { - m.Push("", value) - }) - return - } - if len(arg) == 1 { - m.Richs("location", nil, arg[0], func(key string, value map[string]interface{}) { - m.Info("what %v", value) - m.Push("detail", value) - }) - return - } - if len(arg) == 2 { - m.Richs("aaa.location", nil, "*", func(key string, value map[string]interface{}) { - m.Push("name", value["name"]) - m.Push("distance", kit.Int(distance( - float64(kit.Int(arg[0]))/100000, - float64(kit.Int(arg[1]))/100000, - float64(kit.Int(value["latitude"]))/100000, - float64(kit.Int(value["longitude"]))/100000, - )*1000)) - }) - m.Sort("distance", "int") - return - } - - data := m.Richs("location", nil, arg[0], nil) - if data != nil { - data["count"] = kit.Int(data["count"]) + 1 - } else { - data = kit.Dict("name", arg[0], "address", arg[1], "latitude", arg[2], "longitude", arg[3], "count", 1) - m.Rich("location", nil, data) - } - m.Grow("location", nil, data) - }}, - }, - }, nil) -} diff --git a/base/mdb/mdb.go b/base/mdb/mdb.go index cf9b486f..2e0715f6 100644 --- a/base/mdb/mdb.go +++ b/base/mdb/mdb.go @@ -3,23 +3,21 @@ package mdb import ( ice "github.com/shylinux/icebergs" kit "github.com/shylinux/toolkits" - "github.com/shylinux/toolkits/task" "encoding/csv" "encoding/json" "os" "path" "sort" - "strings" ) func _file_name(m *ice.Message, arg ...string) string { return kit.Select(path.Join("usr/export", kit.Select(arg[0], arg[0]+"/"+arg[1], arg[1] != ""), arg[2]), arg, 3) } -func _hash_insert(m *ice.Message, prefix, key string, arg ...string) string { +func _hash_insert(m *ice.Message, prefix, chain string, arg ...string) { m.Log_INSERT("prefix", prefix, arg[0], arg[1]) - return m.Rich(prefix, key, kit.Data(arg)) + m.Echo(m.Rich(prefix, chain, kit.Data(arg))) } func _hash_delete(m *ice.Message, prefix, chain, field, value string) { @@ -28,30 +26,27 @@ func _hash_delete(m *ice.Message, prefix, chain, field, value string) { m.Conf(prefix, kit.Keys(chain, kit.MDB_HASH, key), "") }) } -func _hash_select(m *ice.Message, prefix, key, field, value string) { - if field == "hash" && value == "random" { +func _hash_select(m *ice.Message, prefix, chain, field, value string) { + if field == kit.MDB_HASH && value == "random" { value = kit.MDB_RANDOMS } - fields := strings.Split(kit.Select("time,hash,type,name,text", m.Option(FIELDS)), ",") - m.Richs(prefix, key, value, func(key string, val map[string]interface{}) { + fields := kit.Split(kit.Select("time,hash,type,name,text", m.Option(FIELDS))) + m.Richs(prefix, chain, value, func(key string, val map[string]interface{}) { if val[kit.MDB_META] != nil { val = val[kit.MDB_META].(map[string]interface{}) } - if field != "" && field != kit.MDB_HASH && value != val[field] && value != kit.MDB_FOREACH { - return - } - if m.Option(FIELDS) == "detail" { - m.Push("detail", val) + if m.Option(FIELDS) == DETAIL { + m.Push(DETAIL, val) } else { - m.Push(key, val, fields, val[kit.MDB_META]) + m.Push(key, val, fields) } }) - if m.Option(FIELDS) != "detail" { + if m.Option(FIELDS) != DETAIL { m.Sort(kit.MDB_TIME, "time_r") } } -func _hash_modify(m *ice.Message, prefix, key string, field, value string, arg ...string) { - m.Richs(prefix, key, value, func(key string, value map[string]interface{}) { +func _hash_modify(m *ice.Message, prefix, chain string, field, value string, arg ...string) { + m.Richs(prefix, chain, value, func(key string, value map[string]interface{}) { if value[kit.MDB_META] != nil { value = value[kit.MDB_META].(map[string]interface{}) } @@ -61,10 +56,22 @@ func _hash_modify(m *ice.Message, prefix, key string, field, value string, arg . } kit.Value(value, arg[i], arg[i+1]) } + m.Log_MODIFY("prefix", prefix, field, value, arg) }) - m.Log_MODIFY("prefix", prefix, field, value, arg) } -func _hash_import(m *ice.Message, prefix, key, file string) { +func _hash_export(m *ice.Message, prefix, chain, file string) { + f, p, e := kit.Create(kit.Keys(file, JSON)) + m.Assert(e) + defer f.Close() + + en := json.NewEncoder(f) + en.SetIndent("", " ") + en.Encode(m.Confv(prefix, kit.Keys(chain, HASH))) + + m.Log_EXPORT(kit.MDB_FILE, p) + m.Echo(p) +} +func _hash_import(m *ice.Message, prefix, chain, file string) { f, e := os.Open(kit.Keys(file, JSON)) m.Assert(e) defer f.Close() @@ -73,49 +80,23 @@ func _hash_import(m *ice.Message, prefix, key, file string) { de := json.NewDecoder(f) de.Decode(&list) - if m.Conf(prefix, kit.Keys(key, kit.MDB_META, kit.MDB_SHORT)) == "" { - m.Conf(prefix, kit.Keys(key, kit.MDB_META, kit.MDB_SHORT), m.Conf(prefix, kit.Keys(kit.MDB_META, kit.MDB_SHORT))) - } - count := 0 - if m.Conf(prefix, kit.Keys(key, kit.MDB_META, kit.MDB_SHORT)) == "" { + if m.Conf(prefix, kit.Keys(chain, kit.MDB_META, kit.MDB_SHORT)) == "" { for k, data := range list { // 导入数据 - m.Conf(prefix, kit.Keys(key, kit.MDB_HASH, k), data) + m.Conf(prefix, kit.Keys(chain, kit.MDB_HASH, k), data) count++ } } else { for _, data := range list { // 导入数据 - m.Rich(prefix, key, data) + m.Rich(prefix, chain, data) count++ } } - m.Log_IMPORT(kit.MDB_KEY, kit.Keys(prefix, key), kit.MDB_COUNT, count) - m.Echo(kit.Keys(file, JSON)) -} -func _hash_export(m *ice.Message, prefix, key, file string) { - f, p, e := kit.Create(kit.Keys(file, JSON)) - m.Assert(e) - defer f.Close() - - en := json.NewEncoder(f) - en.SetIndent("", " ") - en.Encode(m.Confv(prefix, kit.Keys(key, HASH))) - m.Log_EXPORT(kit.MDB_FILE, p) - m.Echo(p) -} -func _hash_inputs(m *ice.Message, prefix, key string, field, value string) { - list := map[string]int{} - m.Richs(prefix, key, kit.MDB_FOREACH, func(key string, val map[string]interface{}) { - list[kit.Format(val[field])]++ - }) - for k, i := range list { - m.Push("key", k) - m.Push("count", i) - } - m.Sort("count", "int_r") + m.Log_IMPORT(kit.MDB_KEY, kit.Keys(prefix, chain), kit.MDB_COUNT, count) + m.Echo("%d", count) } func _hash_prunes(m *ice.Message, prefix, chain string, arg ...string) { m.Richs(prefix, chain, kit.MDB_FOREACH, func(key string, val map[string]interface{}) { @@ -127,44 +108,50 @@ func _hash_prunes(m *ice.Message, prefix, chain string, arg ...string) { return } } - m.Push(key, val) _hash_delete(m, prefix, chain, kit.MDB_HASH, key) + m.Push(key, val) }) } -func _hash_search(m *ice.Message, prefix, key, field, value string) { - m.Richs(prefix, key, kit.MDB_FOREACH, func(key string, val map[string]interface{}) { - if field != "" && value != val[field] { - return +func _hash_inputs(m *ice.Message, prefix, chain string, field, value string) { + list := map[string]int{} + m.Richs(prefix, chain, kit.MDB_FOREACH, func(key string, val map[string]interface{}) { + if val[kit.MDB_META] != nil { + val = val[kit.MDB_META].(map[string]interface{}) } - m.Push(key, value) + list[kit.Format(val[field])]++ }) + for k, i := range list { + m.Push(field, k) + m.Push(kit.MDB_COUNT, i) + } + m.Sort(kit.MDB_COUNT, "int_r") } -func _list_insert(m *ice.Message, prefix, key string, arg ...string) int { +func _list_insert(m *ice.Message, prefix, chain string, arg ...string) { m.Log_INSERT("prefix", prefix, arg[0], arg[1]) - return m.Grow(prefix, key, kit.Dict(arg)) + m.Echo("%d", m.Grow(prefix, chain, kit.Dict(arg))) } func _list_delete(m *ice.Message, prefix, chain, field, value string) { } -func _list_select(m *ice.Message, prefix, key, field, value string) { - fields := strings.Split(kit.Select("time,type,name,text", m.Option(FIELDS)), ",") - m.Grows(prefix, key, field, value, func(index int, val map[string]interface{}) { +func _list_select(m *ice.Message, prefix, chain, field, value string) { + fields := kit.Split(kit.Select("time,id,type,name,text", m.Option(FIELDS)), ",") + m.Grows(prefix, chain, field, value, func(index int, val map[string]interface{}) { if val[kit.MDB_META] != nil { val = val[kit.MDB_META].(map[string]interface{}) } - if m.Option(FIELDS) == "detail" { - m.Push("detail", val) + if m.Option(FIELDS) == DETAIL { + m.Push(DETAIL, val) } else { - m.Push(key, val, fields, val[kit.MDB_META]) + m.Push(kit.Format(index), val, fields) } }) - if m.Option(FIELDS) != "detail" { + if m.Option(FIELDS) != DETAIL { m.Sort(kit.MDB_ID, "int_r") } } -func _list_modify(m *ice.Message, prefix, key string, field, value string, arg ...string) { - m.Grows(prefix, key, field, value, func(index int, value map[string]interface{}) { +func _list_modify(m *ice.Message, prefix, chain string, field, value string, arg ...string) { + m.Grows(prefix, chain, field, value, func(index int, value map[string]interface{}) { if value[kit.MDB_META] != nil { value = value[kit.MDB_META].(map[string]interface{}) } @@ -174,10 +161,42 @@ func _list_modify(m *ice.Message, prefix, key string, field, value string, arg . } kit.Value(value, arg[i], arg[i+1]) } - m.Log_MODIFY("prefix", prefix, field, value, kit.Format(arg)) + m.Log_MODIFY("prefix", prefix, field, value, arg) }) } -func _list_import(m *ice.Message, prefix, key, file string) { +func _list_export(m *ice.Message, prefix, chain, file string) { + f, p, e := kit.Create(kit.Keys(file, CSV)) + m.Assert(e) + defer f.Close() + + w := csv.NewWriter(f) + defer w.Flush() + + count := 0 + head := []string{} + m.Grows(prefix, chain, "", "", func(index int, value map[string]interface{}) { + if index == 0 { + // 输出表头 + for k := range value { + head = append(head, k) + } + sort.Strings(head) + w.Write(head) + } + + // 输出数据 + data := []string{} + for _, k := range head { + data = append(data, kit.Format(value[k])) + } + w.Write(data) + count++ + }) + + m.Log_EXPORT(kit.MDB_FILE, p, kit.MDB_COUNT, count) + m.Echo(p) +} +func _list_import(m *ice.Message, prefix, chain, file string) { f, e := os.Open(kit.Keys(file, CSV)) m.Assert(e) defer f.Close() @@ -202,74 +221,14 @@ func _list_import(m *ice.Message, prefix, key, file string) { } // 导入数据 - m.Grow(prefix, key, data) + m.Grow(prefix, chain, data) count++ } - m.Log_IMPORT(kit.MDB_KEY, kit.Keys(prefix, key), kit.MDB_COUNT, count) - m.Echo(kit.Keys(file, CSV)) -} -func _list_export(m *ice.Message, prefix, key, file string) { - f, p, e := kit.Create(kit.Keys(file, CSV)) - m.Assert(e) - defer f.Close() - w := csv.NewWriter(f) - defer w.Flush() - - count := 0 - head := []string{} - m.Grows(prefix, key, "", "", func(index int, value map[string]interface{}) { - if index == 0 { - // 输出表头 - for k := range value { - head = append(head, k) - } - sort.Strings(head) - w.Write(head) - } - - // 输出数据 - data := []string{} - for _, k := range head { - data = append(data, kit.Format(value[k])) - } - w.Write(data) - count++ - }) - m.Log_EXPORT(kit.MDB_FILE, p, kit.MDB_COUNT, count) - m.Echo(p) -} -func _list_search(m *ice.Message, prefix, key, field, value string) { - list := []interface{}{} - files := map[string]bool{} - m.Richs(prefix, key, kit.MDB_FOREACH, func(key string, value map[string]interface{}) { - kit.Fetch(kit.Value(value, "meta.record"), func(index int, value map[string]interface{}) { - file := value["file"].(string) - if _, ok := files[file]; ok { - list = append(list, file) - } else { - files[file] = true - } - }) - }) - defer m.Cost("search") - - task.Wait(list, func(task *task.Task, lock *task.Lock) error { - kit.CSV(kit.Format(task.Arg), 100000, func(index int, line map[string]string, head []string) { - if line[field] != value { - return - } - - defer lock.WLock()() - m.Push("", line) - }) - return nil - }) + m.Log_IMPORT(kit.MDB_KEY, kit.Keys(prefix, chain), kit.MDB_COUNT, count) + m.Echo("%d", count) } -const ( - ErrDenyModify = "deny modify " -) const ( CSV = "csv" JSON = "json" @@ -283,19 +242,19 @@ const ( const ( FIELDS = "fields" DETAIL = "detail" - CREATE = "create" - RENAME = "rename" - REMOVE = "remove" - COMMIT = "commit" - INVITE = "invite" + INVITE = "invite" + COMMIT = "commit" + + CREATE = "create" INSERT = "insert" - DELETE = "delete" SELECT = "select" MODIFY = "modify" + DELETE = "delete" + REMOVE = "remove" - IMPORT = "import" EXPORT = "export" + IMPORT = "import" PRUNES = "prunes" INPUTS = "inputs" SCRIPT = "script" @@ -306,12 +265,12 @@ var Index = &ice.Context{Name: "mdb", Help: "数据模块", INSERT: {Name: "insert conf key type arg...", Help: "添加", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { switch arg[2] { case HASH: - m.Echo(_hash_insert(m, arg[0], arg[1], arg[3:]...)) + _hash_insert(m, arg[0], arg[1], arg[3:]...) case LIST: - m.Echo("%d", _list_insert(m, arg[0], arg[1], arg[3:]...)) + _list_insert(m, arg[0], arg[1], arg[3:]...) } }}, - DELETE: {Name: "delete conf key type field value arg...", Help: "删除", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { + DELETE: {Name: "delete conf key type field value", Help: "删除", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { switch arg[2] { case HASH: _hash_delete(m, arg[0], arg[1], arg[3], arg[4]) @@ -335,6 +294,14 @@ var Index = &ice.Context{Name: "mdb", Help: "数据模块", _list_modify(m, arg[0], arg[1], arg[3], arg[4], arg[5:]...) } }}, + EXPORT: {Name: "export conf key type file", Help: "导出数据", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { + switch file := _file_name(m, arg...); arg[2] { + case HASH: + _hash_export(m, arg[0], arg[1], file) + case LIST: + _list_export(m, arg[0], arg[1], file) + } + }}, IMPORT: {Name: "import conf key type file", Help: "导入数据", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { switch file := _file_name(m, arg...); arg[2] { case HASH: @@ -343,14 +310,6 @@ var Index = &ice.Context{Name: "mdb", Help: "数据模块", _list_import(m, arg[0], arg[1], file) } }}, - EXPORT: {Name: "export conf key type [name]", Help: "导出数据", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { - switch file := _file_name(m, arg...); arg[2] { - case HASH: - _hash_export(m, arg[0], arg[1], file) - case LIST: - _list_export(m, arg[0], arg[1], file) - } - }}, PRUNES: {Name: "prunes conf key type [field value]...", Help: "清理数据", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { switch arg[2] { case HASH: @@ -361,7 +320,7 @@ var Index = &ice.Context{Name: "mdb", Help: "数据模块", INPUTS: {Name: "inputs conf key type field value", Help: "输入补全", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { switch arg[2] { case HASH: - _hash_inputs(m, arg[0], arg[1], arg[3], kit.Select("", arg, 4)) + _hash_inputs(m, arg[0], arg[1], kit.Select("", arg, 3), kit.Select("", arg, 4)) case LIST: } }}, @@ -371,7 +330,7 @@ var Index = &ice.Context{Name: "mdb", Help: "数据模块", func init() { ice.Index.Register(Index, nil, INSERT, DELETE, SELECT, MODIFY, - IMPORT, EXPORT, PRUNES, INPUTS, + EXPORT, IMPORT, PRUNES, INPUTS, PLUGIN, RENDER, SEARCH, ENGINE, ) } diff --git a/base/mdb/search.go b/base/mdb/search.go index d9a91bd1..ae23fc1f 100644 --- a/base/mdb/search.go +++ b/base/mdb/search.go @@ -30,15 +30,12 @@ func init() { if strings.Contains(arg[1], ";") { arg = strings.Split(arg[1], ";") } + m.Option(FIELDS, "pod,ctx,cmd,time,size,type,name,text") for _, k := range strings.Split(arg[0], ",") { m.Richs(SEARCH, nil, k, func(key string, value map[string]interface{}) { m.Cmdy(kit.Keys(value[kit.MDB_TEXT], value[kit.MDB_NAME]), SEARCH, arg[0], arg[1], kit.Select("", arg, 2)) }) } - - m.Richs(SEARCH, nil, "alpha", func(key string, value map[string]interface{}) { - m.Cmdy(kit.Keys(value[kit.MDB_TEXT], value[kit.MDB_NAME]), SEARCH, arg[0], strings.ToLower(arg[1]), kit.Select("", arg, 2)) - }) }}, }}, nil) } diff --git a/base/web/space.go b/base/web/space.go index 04a6a6dd..29982607 100644 --- a/base/web/space.go +++ b/base/web/space.go @@ -245,7 +245,7 @@ func init() { }}, "/space/": {Name: "/space/ type name", Help: "空间站", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { - if s, e := websocket.Upgrade(m.W, m.R, nil, m.Confi(SPACE, "meta.buffer.r"), m.Confi(SPACE, "meta.buffer.w")); m.Assert(e) { + if s, e := websocket.Upgrade(m.W, m.R, nil, kit.Int(m.Conf(SPACE, "meta.buffer.r")), kit.Int(m.Conf(SPACE, "meta.buffer.w"))); m.Assert(e) { name := m.Option(kit.MDB_NAME, strings.Replace(kit.Select(m.Option(ice.MSG_USERADDR), m.Option(kit.MDB_NAME)), ".", "_", -1)) kind := kit.Select(WORKER, m.Option(kit.MDB_TYPE)) share := m.Option("share") diff --git a/core/chat/action.go b/core/chat/action.go index 661984f5..cd9b5080 100644 --- a/core/chat/action.go +++ b/core/chat/action.go @@ -6,117 +6,8 @@ import ( "github.com/shylinux/icebergs/base/ctx" "github.com/shylinux/icebergs/base/web" kit "github.com/shylinux/toolkits" - - "path" - "strconv" - "strings" ) -func _action_share_create(m *ice.Message, name, text string, arg ...string) { - list := []string{} - for i := 0; i < len(arg)-3; i += 5 { - p := kit.Format("tool.%d.", i/5) - list = append(list, p+POD, arg[i]) - list = append(list, p+CTX, arg[i+1]) - list = append(list, p+CMD, arg[i+2]) - list = append(list, p+ARG, arg[i+3]) - list = append(list, p+VAL, arg[i+4]) - } - m.Cmdy(web.SHARE, ACTION, name, text, list) -} -func _action_share_list(m *ice.Message, key string) { - m.Richs(web.SHARE, nil, key, func(key string, value map[string]interface{}) { - m.Option(ice.MSG_USERNAME, kit.Value(value, "extra.username")) - m.Option(ice.MSG_USERROLE, kit.Value(value, "extra.userrole")) - m.Log_AUTH(aaa.USERNAME, m.Option(ice.MSG_USERNAME), aaa.USERROLE, m.Option(ice.MSG_USERROLE)) - kit.Fetch(kit.Value(value, "extra.tool"), func(index int, value map[string]interface{}) { - m.Push(RIVER, "") - m.Push(STORM, "") - m.Push(ACTION, index) - - m.Push("node", value[POD]) - m.Push("group", value[CTX]) - m.Push("index", value[CMD]) - m.Push("args", value[ARG]) - - msg := m.Cmd(m.Space(value[POD]), ctx.COMMAND, kit.Keys(value[CTX], value[CMD])) - ls := strings.Split(kit.Format(value[CMD]), ".") - m.Push("name", ls[len(ls)-1]) - m.Push("help", kit.Select(msg.Append("help"), kit.Format(value["help"]))) - m.Push("inputs", msg.Append("list")) - m.Push("feature", msg.Append("meta")) - }) - }) -} -func _action_order_list(m *ice.Message, river, storm string, arg ...string) { - for _, v := range arg { - m.Push(RIVER, river) - m.Push(STORM, storm) - m.Push(ACTION, v) - - m.Push("node", "") - m.Push("group", "") - m.Push("index", v) - m.Push("args", "[]") - - msg := m.Cmd(m.Space(m.Option(POD)), ctx.COMMAND, v) - m.Push("name", msg.Append("name")) - m.Push("help", msg.Append("help")) - m.Push("feature", msg.Append("meta")) - m.Push("inputs", msg.Append("list")) - } -} -func _action_list(m *ice.Message, river, storm string) { - m.Option(ice.MSG_RIVER, river) - m.Cmd(TOOL, storm).Table(func(index int, value map[string]string, head []string) { - m.Push(RIVER, river) - m.Push(STORM, storm) - m.Push(ACTION, value[kit.MDB_ID]) - - m.Push("node", value[POD]) - m.Push("group", value[CTX]) - m.Push("index", value[CMD]) - - msg := m.Cmd(m.Space(value[POD]), ctx.COMMAND, kit.Keys(value[CTX], value[CMD])) - ls := strings.Split(kit.Format(value[CMD]), ".") - m.Push("name", ls[len(ls)-1]) - m.Push("help", kit.Select(msg.Append("help"), kit.Format(value["help"]))) - m.Push("feature", msg.Append("meta")) - m.Push("inputs", msg.Append("list")) - }) - return - if p := m.Option(POD); p != "" { - m.Option(POD, "") - // 代理列表 - m.Cmdy(web.SPACE, p, "web.chat./action") - } - if m.Option("share") != "" { - // 共享列表 - _action_share_list(m, m.Option("share")) - } - - prefix := kit.Keys(kit.MDB_HASH, river, TOOL, kit.MDB_HASH, storm) - m.Grows(RIVER, prefix, "", "", func(index int, value map[string]interface{}) { - if meta, ok := kit.Value(value, kit.MDB_META).(map[string]interface{}); ok { - m.Push(RIVER, river) - m.Push(STORM, storm) - m.Push(ACTION, index) - - m.Push("node", meta[POD]) - m.Push("group", meta[CTX]) - m.Push("index", meta[CMD]) - m.Push("args", kit.Select("[]", kit.Format(meta["args"]))) - - msg := m.Cmd(m.Space(meta[POD]), ctx.COMMAND, kit.Keys(meta[CTX], meta[CMD])) - ls := strings.Split(kit.Format(meta["cmd"]), ".") - m.Push("name", ls[len(ls)-1]) - m.Push("help", kit.Select(msg.Append("help"), kit.Format(meta["help"]))) - m.Push("feature", msg.Append("meta")) - m.Push("inputs", msg.Append("list")) - } - }) -} - func _action_right(m *ice.Message, river string, storm string) (ok bool) { if ok = true; m.Option(ice.MSG_USERROLE) == aaa.VOID { m.Richs(RIVER, "", river, func(key string, value map[string]interface{}) { @@ -127,7 +18,12 @@ func _action_right(m *ice.Message, river string, storm string) (ok bool) { } return ok } - +func _action_list(m *ice.Message, river, storm string) { + m.Option(ice.MSG_RIVER, river) + m.Cmdy(TOOL, storm).Table(func(index int, value map[string]string, head []string) { + m.Cmdy(m.Space(value[POD]), ctx.COMMAND, kit.Keys(value[CTX], value[CMD])) + }) +} func _action_show(m *ice.Message, river, storm, index string, arg ...string) { cmds := []string{index} prefix := kit.Keys(kit.MDB_HASH, river, TOOL, kit.MDB_HASH, storm) @@ -136,71 +32,10 @@ func _action_show(m *ice.Message, river, storm, index string, arg ...string) { m.Option(POD, value[POD]) } }) == nil && m.Warn(!m.Right(cmds), ice.ErrNotAuth) { - m.Debug("what %v", prefix) return } m.Cmdy(_action_proxy(m), cmds, arg) - return - - if i, e := strconv.Atoi(index); e == nil { - m.Richs(web.SHARE, nil, m.Option("share"), func(key string, value map[string]interface{}) { - m.Option(ice.MSG_USERNAME, kit.Value(value, "extra.username")) - m.Option(ice.MSG_USERROLE, kit.Value(value, "extra.userrole")) - m.Log_AUTH(aaa.USERNAME, m.Option(ice.MSG_USERNAME), aaa.USERROLE, m.Option(ice.MSG_USERROLE)) - kit.Fetch(kit.Value(value, kit.Keys("extra.tool", i)), func(value map[string]interface{}) { - // 共享命令 - if value[POD] != "" { - m.Option(POD, value[POD]) - } - cmds = kit.Simple(kit.Keys(value[CTX], value[CMD]), arg) - }) - }) - m.Grows(RIVER, prefix, kit.MDB_ID, kit.Format(i+1), func(index int, value map[string]interface{}) { - if value, ok := kit.Value(value, kit.MDB_META).(map[string]interface{}); ok { - // 群组命令 - if value[POD] != "" { - m.Option(POD, value[POD]) - } - cmds = kit.Simple(kit.Keys(value[CTX], value[CMD]), arg) - } - }) - } else if !m.Warn(!m.Right(index), ice.ErrNotAuth) { - // 定制命令 - cmds = kit.Simple(index, arg) - } else { - return - } - - if len(cmds) == 0 { - if p := m.Option(POD); p != "" { - m.Option(POD, "") - // 代理列表 - m.Cmdy(web.SPACE, p, "web.chat./action", index, arg) - return - } - m.Render("status", 404, "not found") - return - } - if m.Warn(!m.Right(cmds), ice.ErrNotAuth) { - m.Render("status", 403, "not auth") - return - } - - if p := m.Option(POD); p != "" { - if len(cmds) > 1 && cmds[1] == "action" { - switch cmds[2] { - case "upload": - msg := m.Cmd(web.CACHE, web.UPLOAD) - file := path.Join("var/proxy", p, msg.Option("path"), msg.Option("name")) - m.Cmd("cache", "watch", msg.Option("data"), file) - m.Cmdy(_action_proxy(m), cmds[0], "action", "upload", msg.Append("name"), msg.Option("path"), - kit.MergeURL2(m.Option(ice.MSG_USERWEB), "/share/proxy/", "pod", p)) - return - } - } - } - m.Cmdy(_action_proxy(m), cmds) } func _action_proxy(m *ice.Message) (proxy []string) { if p := m.Option(POD); p != "" { @@ -210,29 +45,11 @@ func _action_proxy(m *ice.Message) (proxy []string) { return proxy } -const ( - ORDER = "order" -) const ACTION = "action" func init() { Index.Merge(&ice.Context{Commands: map[string]*ice.Command{ - ACTION: {Name: "action hash auto 添加", Help: "群组", Action: map[string]*ice.Action{ - ctx.COMMAND: {Name: "command", Help: "命令", Hand: func(m *ice.Message, arg ...string) { - m.Cmdy(ctx.COMMAND, arg[0]) - }}, - }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { - if len(arg) == 0 { - _action_list(m, m.Option(ice.MSG_RIVER), m.Option(ice.MSG_STORM)) - return - } - _action_show(m, m.Option(ice.MSG_RIVER), m.Option(ice.MSG_STORM), arg[0], arg[1:]...) - }}, - "/action": {Name: "/action", Help: "工作台", Action: map[string]*ice.Action{ - web.SHARE: {Name: "share name text [pod ctx cmd arg]...", Help: "共享", Hand: func(m *ice.Message, arg ...string) { - _action_share_create(m, arg[0], arg[1], arg[2:]...) - }}, web.UPLOAD: {Name: "upload", Help: "上传", Hand: func(m *ice.Message, arg ...string) { msg := m.Cmd(web.STORY, web.UPLOAD) m.Option(kit.MDB_NAME, msg.Append(kit.MDB_NAME)) @@ -240,33 +57,24 @@ func init() { _action_show(m, m.Option(ice.MSG_RIVER), m.Option(ice.MSG_STORM), m.Option(ice.MSG_ACTION), append([]string{ACTION, web.UPLOAD}, arg...)...) }}, - ORDER: {Name: "order cmd...", Help: "定制", Hand: func(m *ice.Message, arg ...string) { - _action_order_list(m, m.Option(ice.MSG_RIVER), m.Option(ice.MSG_STORM), arg...) - }}, ctx.COMMAND: {Name: "command", Help: "命令", Hand: func(m *ice.Message, arg ...string) { - m.Cmdy(ctx.COMMAND, arg[0]) + for _, k := range arg { + m.Cmdy(ctx.COMMAND, k) + } }}, }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { if m.Warn(m.Option(ice.MSG_USERNAME) == "", ice.ErrNotLogin) { - return + return // 没有登录 } if m.Warn(!_action_right(m, m.Option(ice.MSG_RIVER, arg[0]), m.Option(ice.MSG_STORM, arg[1])), ice.ErrNotAuth) { - return + return // 没有授权 } if len(arg) == 2 { _action_list(m, arg[0], arg[1]) return } - if len(arg) > 2 && arg[2] == "order" { - for _, k := range arg[3:] { - m.Cmdy(ctx.COMMAND, k) - m.Push("action", k) - m.Push("index", k) - } - return - } _action_show(m, arg[0], arg[1], arg[2], arg[3:]...) }}, }}, nil) diff --git a/core/chat/footer.go b/core/chat/footer.go index 543750c1..2a32d193 100644 --- a/core/chat/footer.go +++ b/core/chat/footer.go @@ -16,7 +16,7 @@ func init() { )}, }, Commands: map[string]*ice.Command{ - "/" + FOOTER: {Name: "/footer", Help: "状态栏", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { + "/footer": {Name: "/footer", Help: "状态栏", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { kit.Fetch(m.Confv(FOOTER, LEGAL), func(index int, value string) { m.Echo(value) }) }}, }, diff --git a/core/chat/header.go b/core/chat/header.go index 2f3967fd..bcb6e471 100644 --- a/core/chat/header.go +++ b/core/chat/header.go @@ -11,46 +11,19 @@ import ( ) const ( - CHECK = "check" - LOGIN = "login" TITLE = "title" + LOGIN = "login" + CHECK = "check" ) const HEADER = "header" -const _pack = ` - -
- - -