1
0
forked from x/icebergs
This commit is contained in:
shaoying 2020-06-30 18:10:37 +08:00
parent ffe88aa9f9
commit d84f795330
13 changed files with 294 additions and 232 deletions

View File

@ -3,6 +3,7 @@ package nfs
import ( import (
ice "github.com/shylinux/icebergs" ice "github.com/shylinux/icebergs"
"github.com/shylinux/icebergs/base/cli" "github.com/shylinux/icebergs/base/cli"
"github.com/shylinux/icebergs/base/mdb"
kit "github.com/shylinux/toolkits" kit "github.com/shylinux/toolkits"
"bufio" "bufio"
@ -18,6 +19,10 @@ import (
"strings" "strings"
) )
func _file_ext(name string) string {
return strings.ToLower(kit.Select(path.Base(name), strings.TrimPrefix(path.Ext(name), ".")))
}
func _file_list(m *ice.Message, root string, name string, level int, deep bool, dir_type string, dir_reg *regexp.Regexp, fields []string) { func _file_list(m *ice.Message, root string, name string, level int, deep bool, dir_type string, dir_reg *regexp.Regexp, fields []string) {
if fs, e := ioutil.ReadDir(path.Join(root, name)); e != nil { if fs, e := ioutil.ReadDir(path.Join(root, name)); e != nil {
if f, e := os.Open(path.Join(root, name)); e == nil { if f, e := os.Open(path.Join(root, name)); e == nil {
@ -52,9 +57,9 @@ func _file_list(m *ice.Message, root string, name string, level int, deep bool,
m.Push("time", f.ModTime().Format(ice.MOD_TIME)) m.Push("time", f.ModTime().Format(ice.MOD_TIME))
case "type": case "type":
if m.Assert(e) && f.IsDir() { if m.Assert(e) && f.IsDir() {
m.Push("type", "dir") m.Push("type", DIR)
} else { } else {
m.Push("type", "file") m.Push("type", FILE)
} }
case "full": case "full":
if f.IsDir() { if f.IsDir() {
@ -199,39 +204,50 @@ func _file_trash(m *ice.Message, name string) {
} }
func _file_search(m *ice.Message, kind, name, text string, arg ...string) { func _file_search(m *ice.Message, kind, name, text string, arg ...string) {
if kind == FILE {
msg := m.Spawn()
rg, e := regexp.Compile("") rg, e := regexp.Compile("")
m.Assert(e) m.Assert(e)
_file_list(msg, "./", "", 0, true, "both", rg, []string{"path", "time", "size"})
msg := m.Spawn()
_file_list(msg, "./", "", 0, true, "both", rg, []string{"time", "size", "type", "path"})
msg.Table(func(index int, value map[string]string, head []string) { msg.Table(func(index int, value map[string]string, head []string) {
if !strings.Contains(value["path"], name) { if !strings.Contains(value["path"], name) {
return return
} }
m.Push("pod", "") ext := _file_ext(value["path"])
m.Push("ctx", "nfs") if value["type"] == DIR {
ext = DIR
} else if m.Richs(mdb.RENDER, nil, ext, nil) == nil {
ext = value["type"]
}
m.Push("pod", m.Option("pod"))
m.Push("ctx", NFS)
m.Push("cmd", FILE) m.Push("cmd", FILE)
m.Push(kit.MDB_TIME, value["time"]) m.Push(kit.MDB_TIME, value["time"])
m.Push(kit.MDB_SIZE, value["size"]) m.Push(kit.MDB_SIZE, value["size"])
m.Push(kit.MDB_TYPE, FILE) m.Push(kit.MDB_TYPE, ext)
m.Push(kit.MDB_NAME, value["path"]) m.Push(kit.MDB_NAME, value["path"])
m.Push(kit.MDB_TEXT, "") m.Push(kit.MDB_TEXT, "")
}) })
} }
}
func _file_render(m *ice.Message, kind, name, text string, arg ...string) { func _file_render(m *ice.Message, kind, name, text string, arg ...string) {
if m.Conf(FILE, kit.Keys("meta.source", _file_ext(name))) == "true" {
_file_show(m, name) _file_show(m, name)
} else {
m.Echo(name)
}
} }
const ( const (
DIR = "dir"
CAT = "cat" CAT = "cat"
SAVE = "save" SAVE = "save"
COPY = "copy" COPY = "copy"
LINK = "link" LINK = "link"
TRASH = "trash" TRASH = "trash"
DIR = "dir"
FILE = "file" FILE = "file"
NFS = "nfs"
) )
const ( const (
DIR_ROOT = "dir_root" DIR_ROOT = "dir_root"
@ -248,24 +264,54 @@ const (
var Index = &ice.Context{Name: "nfs", Help: "存储模块", var Index = &ice.Context{Name: "nfs", Help: "存储模块",
Configs: map[string]*ice.Config{ Configs: map[string]*ice.Config{
TRASH: {Name: "trash", Help: "删除", Value: kit.Data("path", "var/trash")}, TRASH: {Name: "trash", Help: "删除", Value: kit.Data("path", "var/trash")},
FILE: {Name: "file", Help: "文件", Value: kit.Data(
"source", kit.Dict(
"makefile", "true",
"sh", "true",
"shy", "true",
"py", "true",
"js", "true",
"go", "true",
"vim", "true",
"conf", "true",
"json", "true",
),
)},
}, },
Commands: map[string]*ice.Command{ Commands: map[string]*ice.Command{
ice.CTX_INIT: {Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { ice.CTX_INIT: {Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
m.Cmd("mdb.search", "create", "file", "file", "nfs") m.Cmd(mdb.SEARCH, mdb.CREATE, FILE, FILE, NFS)
m.Cmd("mdb.render", "create", "file", "file", "nfs") m.Cmd(mdb.RENDER, mdb.CREATE, FILE, FILE, NFS)
m.Cmd(mdb.RENDER, mdb.CREATE, DIR)
m.Cmd(mdb.RENDER, mdb.CREATE, "bin", m.AddCmd(&ice.Command{Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
m.Echo("hello world")
}}))
m.Cmd(mdb.RENDER, mdb.CREATE, "m4v", m.AddCmd(&ice.Command{Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
if !strings.HasPrefix(arg[1], "http") {
arg[1] = path.Join("/share/local", kit.Path(arg[1]))
}
m.Echo(`<video src="%s" height=400 controls autoplay loop></video>`, arg[1])
}}))
}}, }},
FILE: {Name: "file", Help: "文件", Action: map[string]*ice.Action{ FILE: {Name: "file", Help: "文件", Action: map[string]*ice.Action{
"search": {Name: "search type name text", Help: "搜索", Hand: func(m *ice.Message, arg ...string) { mdb.SEARCH: {Name: "search type name text", Help: "搜索", Hand: func(m *ice.Message, arg ...string) {
_file_search(m, arg[0], arg[1], arg[2], arg[3:]...) _file_search(m, arg[0], arg[1], arg[2], arg[3:]...)
}}, }},
"render": {Name: "render type name text", Help: "渲染", Hand: func(m *ice.Message, arg ...string) { mdb.RENDER: {Name: "render type name text", Help: "渲染", Hand: func(m *ice.Message, arg ...string) {
_file_render(m, arg[0], arg[1], arg[2], arg[3:]...) _file_render(m, arg[0], arg[1], arg[2], arg[3:]...)
}}, }},
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
}}, }},
DIR: {Name: "dir path field...", Help: "目录", Action: map[string]*ice.Action{
DIR: {Name: "dir path field...", Help: "目录", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { mdb.SEARCH: {Name: "search type name text", Help: "搜索", Hand: func(m *ice.Message, arg ...string) {
_file_search(m, arg[0], arg[1], arg[2], arg[3:]...)
}},
mdb.RENDER: {Name: "render type name text", Help: "渲染", Hand: func(m *ice.Message, arg ...string) {
_file_list(m, "./", arg[1], 0, false, "both", nil, []string{"time", "size", "type", "path"})
}},
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
rg, _ := regexp.Compile(m.Option("dir_reg")) rg, _ := regexp.Compile(m.Option("dir_reg"))
_file_list(m, kit.Select("./", m.Option("dir_root")), kit.Select("", arg, 0), _file_list(m, kit.Select("./", m.Option("dir_root")), kit.Select("", arg, 0),
0, m.Options("dir_deep"), kit.Select("both", m.Option("dir_type")), rg, 0, m.Options("dir_deep"), kit.Select("both", m.Option("dir_type")), rg,

View File

@ -130,7 +130,7 @@ func _favor_search(m *ice.Message, kind, name, text string, arg ...string) {
} }
m.Push("pod", m.Option("pod")) m.Push("pod", m.Option("pod"))
m.Push("ctx", "web") m.Push("ctx", "web")
m.Push("cmd", "favor") m.Push("cmd", SPIDE)
m.Push(key, value, []string{kit.MDB_TIME}, val) m.Push(key, value, []string{kit.MDB_TIME}, val)
m.Push(kit.MDB_SIZE, kit.FmtSize(int64(len(kit.Format(value[kit.MDB_TEXT]))))) m.Push(kit.MDB_SIZE, kit.FmtSize(int64(len(kit.Format(value[kit.MDB_TEXT])))))
m.Push(key, value, []string{kit.MDB_TYPE, kit.MDB_NAME, kit.MDB_TEXT}, val) m.Push(key, value, []string{kit.MDB_TYPE, kit.MDB_NAME, kit.MDB_TEXT}, val)

View File

@ -14,6 +14,13 @@ import (
"time" "time"
) )
func URL(m *ice.Message, path string, arg ...interface{}) string {
list := kit.Simple(arg)
if m.Option("pod") != "" {
list = append(list, "pod", m.Option("pod"))
}
return kit.MergeURL2(m.R.Header.Get("Origin"), path, list)
}
func Count(m *ice.Message, cmd, key, name string) int { func Count(m *ice.Message, cmd, key, name string) int {
count := kit.Int(m.Conf(cmd, kit.Keys(key, name))) count := kit.Int(m.Conf(cmd, kit.Keys(key, name)))
m.Conf(cmd, kit.Keys(key, name), count+1) m.Conf(cmd, kit.Keys(key, name), count+1)
@ -99,10 +106,12 @@ var RENDER = struct {
Button string Button string
Field string Field string
A string A string
IMG string
}{ }{
Button: "button", Button: "button",
Field: "field", Field: "field",
A: "a", A: "a",
IMG: "img",
} }
func init() { func init() {
@ -119,6 +128,9 @@ func init() {
u := kit.Select(m.Conf(SHARE, "meta.domain"), arg, 1) u := kit.Select(m.Conf(SHARE, "meta.domain"), arg, 1)
m.Echo(`<a href="%s" target="_blank">%s</a>`, u, arg[0]) m.Echo(`<a href="%s" target="_blank">%s</a>`, u, arg[0])
}}, }},
RENDER.IMG: {Hand: func(m *ice.Message, arg ...string) {
m.Echo(`<img src="%s">`, arg[0])
}},
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
m.Echo(`<input type="%s" value="%s">`, arg[0], arg[1]) m.Echo(`<input type="%s" value="%s">`, arg[0], arg[1])
}}, }},

View File

@ -27,11 +27,11 @@ func _share_list(m *ice.Message, key string, fields ...string) {
m.Push("detail", value) m.Push("detail", value)
m.Push(kit.MDB_KEY, kit.MDB_LINK) m.Push(kit.MDB_KEY, kit.MDB_LINK)
m.Push(kit.MDB_VALUE, fmt.Sprintf(m.Conf(SHARE, "meta.template.link"), m.Conf(SHARE, "meta.domain"), key, key)) m.Push(kit.MDB_VALUE, m.Cmdx(mdb.RENDER, RENDER.A, key, URL(m, kit.Format("/share/%s", key))))
m.Push(kit.MDB_KEY, kit.MDB_SHARE) m.Push(kit.MDB_KEY, kit.MDB_SHARE)
m.Push(kit.MDB_VALUE, fmt.Sprintf(m.Conf(SHARE, "meta.template.share"), m.Conf(SHARE, "meta.domain"), key)) m.Push(kit.MDB_VALUE, m.Cmdx(mdb.RENDER, RENDER.IMG, URL(m, kit.Format("/share/%s/share", key))))
m.Push(kit.MDB_KEY, kit.MDB_VALUE) m.Push(kit.MDB_KEY, kit.MDB_VALUE)
m.Push(kit.MDB_VALUE, fmt.Sprintf(m.Conf(SHARE, "meta.template.value"), m.Conf(SHARE, "meta.domain"), key)) m.Push(kit.MDB_VALUE, m.Cmdx(mdb.RENDER, RENDER.IMG, URL(m, kit.Format("/share/%s/value", key))))
}) })
} }
func _share_show(m *ice.Message, key string, value map[string]interface{}, arg ...string) bool { func _share_show(m *ice.Message, key string, value map[string]interface{}, arg ...string) bool {
@ -88,10 +88,6 @@ func _share_remote(m *ice.Message, pod string, arg ...string) {
m.Render(ice.RENDER_RESULT) m.Render(ice.RENDER_RESULT)
} }
func _share_create(m *ice.Message, kind, name, text string, arg ...string) string { func _share_create(m *ice.Message, kind, name, text string, arg ...string) string {
for _, k := range []string{"river", "storm"} {
arg = append(arg, k, m.Option(k))
}
h := m.Rich(SHARE, nil, kit.Dict( h := m.Rich(SHARE, nil, kit.Dict(
kit.MDB_TIME, m.Time(m.Conf(SHARE, "meta.expire")), kit.MDB_TIME, m.Time(m.Conf(SHARE, "meta.expire")),
kit.MDB_TYPE, kind, kit.MDB_NAME, name, kit.MDB_TEXT, text, kit.MDB_TYPE, kind, kit.MDB_NAME, name, kit.MDB_TEXT, text,

View File

@ -81,6 +81,26 @@ func _spide_create(m *ice.Message, name, address string, arg ...string) {
m.Log_CREATE(SPIDE, name, "address", address) m.Log_CREATE(SPIDE, name, "address", address)
} }
} }
func _spide_search(m *ice.Message, kind, name, text string, arg ...string) {
m.Richs(SPIDE, nil, kit.Select(kit.MDB_FOREACH, ""), func(key string, value map[string]interface{}) {
if kit.Format(kit.Value(value, "client.name")) != name && (text == "" || !strings.Contains(kit.Format(kit.Value(value, "client.url")), text)) {
return
}
m.Push("pod", m.Option("pod"))
m.Push("ctx", "web")
m.Push("cmd", SPIDE)
m.Push(key, value, []string{kit.MDB_TIME})
m.Push(kit.MDB_SIZE, 0)
m.Push("type", SPIDE)
// m.Push("type", kit.Format(kit.Value(value, "client.protocol")))
m.Push("name", kit.Format(kit.Value(value, "client.name")))
m.Push("text", kit.Format(kit.Value(value, "client.url")))
})
}
func _spide_render(m *ice.Message, kind, name, text string, arg ...string) {
m.Echo(`<iframe src="%s" width=800 height=400></iframe>`, text)
}
const SPIDE = "spide" const SPIDE = "spide"
@ -94,6 +114,12 @@ func init() {
mdb.CREATE: {Name: "create name address", Help: "", Hand: func(m *ice.Message, arg ...string) { mdb.CREATE: {Name: "create name address", Help: "", Hand: func(m *ice.Message, arg ...string) {
_spide_create(m, arg[0], arg[1]) _spide_create(m, arg[0], arg[1])
}}, }},
mdb.SEARCH: {Name: "search type name text arg...", Help: "搜索", Hand: func(m *ice.Message, arg ...string) {
_spide_search(m, arg[0], arg[1], arg[2], arg[3:]...)
}},
mdb.RENDER: {Name: "render type name text arg...", Help: "渲染", Hand: func(m *ice.Message, arg ...string) {
_spide_render(m, arg[0], arg[1], arg[2], arg[3:]...)
}},
"login": {Name: "login name", Help: "", Hand: func(m *ice.Message, arg ...string) { "login": {Name: "login name", Help: "", Hand: func(m *ice.Message, arg ...string) {
_spide_login(m, arg[0]) _spide_login(m, arg[0])
}}, }},

View File

@ -4,14 +4,13 @@ import (
ice "github.com/shylinux/icebergs" ice "github.com/shylinux/icebergs"
"github.com/shylinux/icebergs/base/aaa" "github.com/shylinux/icebergs/base/aaa"
"github.com/shylinux/icebergs/base/cli" "github.com/shylinux/icebergs/base/cli"
"github.com/shylinux/icebergs/base/ctx"
"github.com/shylinux/icebergs/base/gdb" "github.com/shylinux/icebergs/base/gdb"
"github.com/shylinux/icebergs/base/mdb" "github.com/shylinux/icebergs/base/mdb"
"github.com/shylinux/icebergs/base/nfs"
kit "github.com/shylinux/toolkits" kit "github.com/shylinux/toolkits"
"net/http" "net/http"
"path" "path"
"strings"
) )
type Frame struct { type Frame struct {
@ -98,67 +97,20 @@ var Index = &ice.Context{Name: "web", Help: "网络模块",
ice.CTX_INIT: {Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { ice.CTX_INIT: {Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
m.Load() m.Load()
m.Cmd(SPIDE, mdb.CREATE, "dev", kit.Select("http://:9020", m.Conf(cli.RUNTIME, "conf.ctx_dev")))
m.Cmd(SPIDE, mdb.CREATE, "self", kit.Select("http://:9020", m.Conf(cli.RUNTIME, "conf.ctx_self")))
m.Cmd(SPIDE, mdb.CREATE, "shy", kit.Select("https://shylinux.com:443", m.Conf(cli.RUNTIME, "conf.ctx_shy")))
m.Cmd(aaa.ROLE, aaa.White, aaa.VOID, "web", "/publish/")
m.Cmd(aaa.ROLE, aaa.White, aaa.VOID, ctx.COMMAND)
m.Cmd(mdb.SEARCH, mdb.CREATE, FAVOR)
m.Cmd(mdb.SEARCH, mdb.CREATE, SPIDE)
m.Cmd(mdb.RENDER, mdb.CREATE, SPIDE)
for k := range c.Commands[mdb.RENDER].Action { for k := range c.Commands[mdb.RENDER].Action {
m.Cmdy(mdb.RENDER, mdb.CREATE, k, mdb.RENDER, c.Cap(ice.CTX_FOLLOW)) m.Cmdy(mdb.RENDER, mdb.CREATE, k, mdb.RENDER, c.Cap(ice.CTX_FOLLOW))
} }
m.Cmd(SPIDE, mdb.CREATE, "self", kit.Select("http://:9020", m.Conf(cli.RUNTIME, "conf.ctx_self")))
m.Cmd(SPIDE, mdb.CREATE, "dev", kit.Select("http://:9020", m.Conf(cli.RUNTIME, "conf.ctx_dev")))
m.Cmd(SPIDE, mdb.CREATE, "shy", kit.Select("https://shylinux.com:443", m.Conf(cli.RUNTIME, "conf.ctx_shy")))
m.Cmd(aaa.ROLE, aaa.White, aaa.VOID, "web", "/publish/")
m.Cmd(aaa.ROLE, aaa.White, aaa.VOID, "command")
m.Cmd("mdb.search", "create", "favor", "favor", "web")
m.Cmd(nfs.SEARCH, "add", "story", "base", m.AddCmd(&ice.Command{Name: "search word", Help: "搜索引擎", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
switch arg[0] {
case "set":
m.Cmdy(STORY, "index", arg[2])
return
}
m.Richs(STORY, "head", "*", func(key string, val map[string]interface{}) {
if val["story"] == arg[0] {
m.Push("pod", m.Option(ice.MSG_USERPOD))
m.Push("engine", "story")
m.Push("favor", val["story"])
m.Push("id", val["list"])
m.Push("time", val["time"])
m.Push("type", val["scene"])
m.Push("name", val["story"])
m.Push("text", val["count"])
}
})
}}))
m.Cmd(nfs.SEARCH, "add", "share", "base", m.AddCmd(&ice.Command{Name: "search word", Help: "搜索引擎", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
switch arg[0] {
case "set":
m.Cmdy(SHARE, arg[2])
return
}
m.Option("cache.limit", -2)
m.Grows(SHARE, nil, "", "", func(index int, value map[string]interface{}) {
if value["share"] == arg[0] || value["type"] == arg[0] ||
strings.Contains(kit.Format(value["name"]), arg[0]) || strings.Contains(kit.Format(value["text"]), arg[0]) {
m.Push("pod", m.Option(ice.MSG_USERPOD))
m.Push("engine", "share")
m.Push("favor", value["type"])
m.Push("id", value["share"])
m.Push("time", value["time"])
m.Push("type", value["type"])
m.Push("name", value["name"])
m.Push("text", value["text"])
}
})
}}))
m.Conf(FAVOR, "meta.render.bench", m.AddCmd(&ice.Command{Name: "render type name text arg...", Help: "渲染引擎", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
m.Cmdy("web.code.bench", "action", "show", arg)
}}))
}}, }},
ice.CTX_EXIT: {Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { ice.CTX_EXIT: {Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
m.Save(SPIDE, SERVE, GROUP, LABEL, m.Save(SPIDE, SERVE, GROUP, LABEL,

View File

@ -71,7 +71,9 @@ func _action_list(m *ice.Message, river, storm string) {
} }
prefix := kit.Keys(kit.MDB_HASH, river, TOOL, kit.MDB_HASH, storm) prefix := kit.Keys(kit.MDB_HASH, river, TOOL, kit.MDB_HASH, storm)
m.Debug("what %v", prefix)
m.Grows(RIVER, prefix, "", "", func(index int, value map[string]interface{}) { m.Grows(RIVER, prefix, "", "", func(index int, value map[string]interface{}) {
m.Debug("what %v", value)
if meta, ok := kit.Value(value, kit.MDB_META).(map[string]interface{}); ok { if meta, ok := kit.Value(value, kit.MDB_META).(map[string]interface{}); ok {
m.Push(RIVER, river) m.Push(RIVER, river)
m.Push(STORM, storm) m.Push(STORM, storm)
@ -144,20 +146,21 @@ func init() {
msg := m.Cmd(web.STORY, web.UPLOAD) msg := m.Cmd(web.STORY, web.UPLOAD)
m.Option(kit.MDB_NAME, msg.Append(kit.MDB_NAME)) m.Option(kit.MDB_NAME, msg.Append(kit.MDB_NAME))
m.Option(web.DATA, msg.Append(web.DATA)) m.Option(web.DATA, msg.Append(web.DATA))
_action_show(m, m.Option(RIVER), m.Option(STORM), m.Option(ACTION), _action_show(m, m.Option(ice.MSG_RIVER), m.Option(ice.MSG_STORM), m.Option(ice.MSG_ACTION),
append([]string{ACTION, web.UPLOAD}, arg...)...) append([]string{ACTION, web.UPLOAD}, arg...)...)
}}, }},
ORDER: {Name: "order cmd...", Help: "定制", Hand: func(m *ice.Message, arg ...string) { ORDER: {Name: "order cmd...", Help: "定制", Hand: func(m *ice.Message, arg ...string) {
_action_order_list(m, m.Option(RIVER), m.Option(STORM), arg...) _action_order_list(m, m.Option(ice.MSG_RIVER), m.Option(ice.MSG_STORM), arg...)
}}, }},
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
if len(arg) == 0 { if len(arg) == 0 {
// 命令列表 // 命令列表
_action_list(m, m.Option(RIVER), m.Option(STORM)) m.Debug("%v", m.Formats("meta"))
_action_list(m, m.Option(ice.MSG_RIVER), m.Option(ice.MSG_STORM))
return return
} }
// 执行命令 // 执行命令
_action_show(m, m.Option(RIVER), m.Option(STORM), arg[0], arg[1:]...) _action_show(m, m.Option(ice.MSG_RIVER), m.Option(ice.MSG_STORM), arg[0], arg[1:]...)
}}, }},
}}, nil) }}, nil)
} }

View File

@ -5,90 +5,45 @@ import (
"github.com/shylinux/icebergs/base/aaa" "github.com/shylinux/icebergs/base/aaa"
"github.com/shylinux/icebergs/base/ctx" "github.com/shylinux/icebergs/base/ctx"
"github.com/shylinux/icebergs/base/gdb" "github.com/shylinux/icebergs/base/gdb"
"github.com/shylinux/icebergs/base/mdb"
"github.com/shylinux/icebergs/base/web" "github.com/shylinux/icebergs/base/web"
"github.com/shylinux/toolkits" "github.com/shylinux/toolkits"
"strings"
) )
var Index = &ice.Context{Name: "chat", Help: "聊天中心", var Index = &ice.Context{Name: "chat", Help: "聊天中心",
Configs: map[string]*ice.Config{ Configs: map[string]*ice.Config{},
RIVER: {Name: "river", Help: "群组", Value: kit.Data(
"template", kit.Dict("root", []interface{}{
[]interface{}{"river", `{{.Option "user.nick"|Format}}@{{.Conf "runtime" "node.name"|Format}}`, "mall"},
[]interface{}{"storm", "code", "code"},
[]interface{}{"field", "login", "web.code"},
[]interface{}{"field", "buffer", "web.code.tmux"},
[]interface{}{"field", "session", "web.code.tmux"},
[]interface{}{"field", "image", "web.code.docker"},
[]interface{}{"field", "container", "web.code.docker"},
[]interface{}{"field", "command", "web.code.docker"},
[]interface{}{"field", "repos", "web.code.git"},
[]interface{}{"field", "total", "web.code.git"},
[]interface{}{"field", "status", "web.code.git"},
[]interface{}{"storm", "wiki", "wiki"},
[]interface{}{"field", "draw", "web.wiki"},
[]interface{}{"field", "data", "web.wiki"},
[]interface{}{"field", "word", "web.wiki"},
[]interface{}{"field", "walk", "web.wiki"},
[]interface{}{"field", "feel", "web.wiki"},
[]interface{}{"storm", "root"},
[]interface{}{"field", "spide"},
[]interface{}{"field", "space"},
[]interface{}{"field", "dream"},
[]interface{}{"field", "favor"},
[]interface{}{"field", "story"},
[]interface{}{"field", "share"},
[]interface{}{"storm", "miss"},
[]interface{}{"field", "route"},
[]interface{}{"field", "group"},
[]interface{}{"field", "label"},
[]interface{}{"field", "search"},
[]interface{}{"field", "commend"},
[]interface{}{"storm", "team", "team"},
[]interface{}{"field", "plan", "web.team"},
[]interface{}{"field", "miss", "web.team"},
[]interface{}{"field", "stat", "web.team"},
[]interface{}{"field", "task", "web.team"},
[]interface{}{"storm", "mall", "mall"},
[]interface{}{"field", "asset", "web.mall"},
[]interface{}{"field", "spend", "web.mall"},
[]interface{}{"field", "trans", "web.mall"},
[]interface{}{"field", "bonus", "web.mall"},
[]interface{}{"field", "month", "web.mall"},
}, "void", []interface{}{
[]interface{}{"storm", "wiki", "wiki"},
[]interface{}{"field", "note", "web.wiki"},
}),
"black", kit.Dict("tech", []interface{}{
"/debug",
"/river.add",
"/river.share",
"/river.rename",
"/river.remove",
"/storm.remove",
"/storm.rename",
"/storm.share",
"/storm.add",
}),
"white", kit.Dict("void", []interface{}{
"/header",
"/river",
"/storm",
"/action",
"/footer",
}),
)},
},
Commands: map[string]*ice.Command{ Commands: map[string]*ice.Command{
ice.CTX_INIT: {Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { ice.CTX_INIT: {Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
m.Load() m.Load()
m.Watch(gdb.SYSTEM_INIT, m.Prefix("init")) m.Watch(gdb.SYSTEM_INIT, m.Prefix("init"))
m.Watch(gdb.USER_CREATE, m.Prefix("auto")) m.Watch(gdb.USER_CREATE, m.Prefix("auto"))
m.Cmd(mdb.SEARCH, mdb.CREATE, ctx.COMMAND, m.AddCmd(&ice.Command{Hand: func(m *ice.Message, c *ice.Context, cc string, arg ...string) {
arg = arg[1:]
ice.Pulse.Travel(func(p *ice.Context, s *ice.Context, key string, cmd *ice.Command) {
if strings.HasPrefix(key, "_") || strings.HasPrefix(key, "/") {
return
}
if arg[1] != "" && arg[1] != key && arg[1] != s.Name {
return
}
if arg[2] != "" && !strings.Contains(kit.Format(cmd.Name), arg[2]) && !strings.Contains(kit.Format(cmd.Help), arg[2]) {
return
}
m.Push("pod", "")
m.Push("ctx", "web.chat")
m.Push("cmd", cc)
m.Push("time", m.Time())
m.Push("size", "")
m.Push("type", ctx.COMMAND)
m.Push("name", key)
m.Push("text", s.Cap(ice.CTX_FOLLOW))
})
}}))
}}, }},
ice.CTX_EXIT: {Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { ice.CTX_EXIT: {Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
m.Save(RIVER) m.Save(RIVER)
@ -96,16 +51,6 @@ var Index = &ice.Context{Name: "chat", Help: "聊天中心",
"init": {Name: "init", Help: "初始化", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { "init": {Name: "init", Help: "初始化", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
if len(m.Confm(RIVER, kit.MDB_HASH)) == 0 { if len(m.Confm(RIVER, kit.MDB_HASH)) == 0 {
// 默认群组
kit.Fetch(m.Confv(RIVER, "meta.template"), func(key string, val map[string]interface{}) {
if favor := kit.Keys(c.Cap(ice.CTX_FOLLOW), key); m.Richs(web.FAVOR, nil, favor, nil) == nil {
kit.Fetch(val, func(index int, value interface{}) {
v := kit.Simple(value)
web.FavorInsert(m, favor, v[0], v[1], v[2])
})
}
})
// 黑名单 // 黑名单
kit.Fetch(m.Confv(RIVER, "meta.black.tech"), func(index int, value interface{}) { kit.Fetch(m.Confv(RIVER, "meta.black.tech"), func(index int, value interface{}) {
m.Cmd(aaa.ROLE, aaa.Black, aaa.TECH, value) m.Cmd(aaa.ROLE, aaa.Black, aaa.TECH, value)
@ -169,7 +114,12 @@ var Index = &ice.Context{Name: "chat", Help: "聊天中心",
case "/action": case "/action":
arg = arg[2:] arg = arg[2:]
case "/storm": case "/storm":
arg = arg[2:] if len(arg) > 0 {
arg = arg[1:]
}
if len(arg) > 0 {
arg = arg[1:]
}
case "/river": case "/river":
arg = arg[1:] arg = arg[1:]
} }

View File

@ -14,13 +14,12 @@ func _river_list(m *ice.Message) {
m.Set(ice.MSG_OPTION, kit.MDB_NAME) m.Set(ice.MSG_OPTION, kit.MDB_NAME)
m.Richs(RIVER, nil, kit.MDB_FOREACH, func(key string, value map[string]interface{}) { m.Richs(RIVER, nil, kit.MDB_FOREACH, func(key string, value map[string]interface{}) {
m.Richs(RIVER, kit.Keys(kit.MDB_HASH, key, USER), m.Option(ice.MSG_USERNAME), func(k string, val map[string]interface{}) { m.Richs(RIVER, kit.Keys(kit.MDB_HASH, key, USER), m.Option(ice.MSG_USERNAME), func(k string, val map[string]interface{}) {
m.Push(key, value[kit.MDB_META], []string{kit.MDB_KEY, kit.MDB_NAME}) m.Push(key, value[kit.MDB_META], []string{kit.MDB_KEY, kit.MDB_NAME}, val[kit.MDB_META])
}) })
}) })
} }
func _river_user(m *ice.Message, river string, user ...string) { func _river_user(m *ice.Message, river string, user ...string) {
prefix := kit.Keys(kit.MDB_HASH, river, USER) prefix := kit.Keys(kit.MDB_HASH, river, USER)
m.Rich(RIVER, prefix, kit.Data(aaa.USERNAME, cli.UserName))
for _, v := range user { for _, v := range user {
m.Rich(RIVER, prefix, kit.Data(aaa.USERNAME, v)) m.Rich(RIVER, prefix, kit.Data(aaa.USERNAME, v))
m.Log_INSERT(RIVER, river, USER, v) m.Log_INSERT(RIVER, river, USER, v)
@ -29,17 +28,41 @@ func _river_user(m *ice.Message, river string, user ...string) {
func _river_share(m *ice.Message, river, name string, arg ...string) { func _river_share(m *ice.Message, river, name string, arg ...string) {
m.Cmdy(web.SHARE, RIVER, name, river, arg) m.Cmdy(web.SHARE, RIVER, name, river, arg)
} }
func _river_remove(m *ice.Message, river string) {
m.Richs(RIVER, nil, river, func(value map[string]interface{}) {
m.Log_REMOVE(RIVER, river, kit.MDB_VALUE, kit.Format(value))
})
m.Conf(RIVER, kit.Keys(kit.MDB_HASH, river), "")
}
func _river_rename(m *ice.Message, river string, name string) { func _river_rename(m *ice.Message, river string, name string) {
prefix := kit.Keys(kit.MDB_HASH, river, kit.MDB_META, kit.MDB_NAME) prefix := kit.Keys(kit.MDB_HASH, river, kit.MDB_META, kit.MDB_NAME)
old := m.Conf(RIVER, prefix) old := m.Conf(RIVER, prefix)
m.Log_MODIFY(RIVER, river, kit.MDB_VALUE, name, "old", old) m.Log_MODIFY(RIVER, river, kit.MDB_VALUE, name, "old", old)
m.Conf(RIVER, prefix, name) m.Conf(RIVER, prefix, name)
} }
func _river_remove(m *ice.Message, river string) { func _river_create(m *ice.Message, kind, name, text string, arg ...string) {
m.Richs(RIVER, nil, river, func(value map[string]interface{}) { h := m.Rich(RIVER, nil, kit.Dict(kit.MDB_META, kit.Dict(
m.Log_REMOVE(RIVER, river, kit.MDB_VALUE, kit.Format(value)) kit.MDB_TYPE, kind, kit.MDB_NAME, name, kit.MDB_TEXT, text,
kit.MDB_EXTRA, kit.Dict(arg),
),
USER, kit.Data(kit.MDB_SHORT, aaa.USERNAME),
TOOL, kit.Data(),
))
m.Log_CREATE(kit.MDB_META, RIVER, kit.MDB_TYPE, kind, kit.MDB_NAME, name)
_river_user(m, h, cli.UserName)
kit.Fetch(m.Confv(RIVER, kit.Keys("meta.template", "base")), func(storm string, value interface{}) {
list := []string{}
kit.Fetch(value, func(index int, value string) {
m.Search(value, func(p *ice.Context, s *ice.Context, key string, cmd *ice.Command) {
list = append(list, "", s.Cap(ice.CTX_FOLLOW), key, kit.Simple(cmd.Help)[0])
}) })
m.Conf(RIVER, kit.Keys(kit.MDB_HASH, river), "") })
storm = _storm_create(m, h, "", storm, "")
_storm_tool(m, h, storm, list...)
})
m.Set(ice.MSG_RESULT)
m.Echo(h)
} }
const ( const (
@ -49,23 +72,58 @@ const (
const RIVER = "river" const RIVER = "river"
func init() { func init() {
Index.Merge(&ice.Context{Commands: map[string]*ice.Command{ Index.Merge(&ice.Context{
Configs: map[string]*ice.Config{
RIVER: {Name: "river", Help: "群组", Value: kit.Data(
"template", kit.Dict(
"base", kit.Dict(
"main", []interface{}{
"web.code.inner",
"web.code.dream",
"web.code.space",
},
),
),
aaa.Black, kit.Dict(aaa.TECH, []interface{}{
"/river.create",
"/river.rename",
"/river.remove",
"/river.share",
"/storm.share",
"/storm.remove",
"/storm.rename",
"/storm.create",
}),
aaa.White, kit.Dict(aaa.VOID, []interface{}{
"/header",
"/river",
"/storm",
"/action",
"/footer",
}),
)},
},
Commands: map[string]*ice.Command{
"/" + RIVER: {Name: "/river", Help: "小河流", "/" + RIVER: {Name: "/river", Help: "小河流",
Action: map[string]*ice.Action{ Action: map[string]*ice.Action{
mdb.REMOVE: {Name: "remove", Help: "删除", Hand: func(m *ice.Message, arg ...string) { mdb.CREATE: {Name: "create type name text arg...", Help: "创建", Hand: func(m *ice.Message, arg ...string) {
_river_remove(m, m.Option(RIVER)) _river_create(m, arg[0], arg[1], arg[2], arg[3:]...)
}}, }},
mdb.RENAME: {Name: "rename name", Help: "重命名", Hand: func(m *ice.Message, arg ...string) { mdb.RENAME: {Name: "rename name", Help: "更名", Hand: func(m *ice.Message, arg ...string) {
_river_rename(m, m.Option(RIVER), arg[0]) _river_rename(m, m.Option(ice.MSG_RIVER), arg[0])
}},
mdb.REMOVE: {Name: "remove", Help: "删除", Hand: func(m *ice.Message, arg ...string) {
_river_remove(m, m.Option(ice.MSG_RIVER))
}}, }},
web.SHARE: {Name: "share name", Help: "共享", Hand: func(m *ice.Message, arg ...string) { web.SHARE: {Name: "share name", Help: "共享", Hand: func(m *ice.Message, arg ...string) {
_river_share(m, m.Option(RIVER), arg[0]) _river_share(m, m.Option(ice.MSG_RIVER), arg[0])
}}, }},
USER: {Name: "user user...", Help: "添加用户", Hand: func(m *ice.Message, arg ...string) { USER: {Name: "user user...", Help: "添加用户", Hand: func(m *ice.Message, arg ...string) {
_river_user(m, m.Option(RIVER), arg...) _river_user(m, m.Option(ice.MSG_RIVER), arg...)
}}, }},
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
_river_list(m) _river_list(m)
}}, }},
}}, nil) },
}, nil)
} }

View File

@ -10,29 +10,26 @@ import (
func _storm_list(m *ice.Message, river string) { func _storm_list(m *ice.Message, river string) {
m.Set(ice.MSG_OPTION, kit.MDB_KEY) m.Set(ice.MSG_OPTION, kit.MDB_KEY)
m.Set(ice.MSG_OPTION, kit.MDB_NAME) m.Set(ice.MSG_OPTION, kit.MDB_NAME)
m.Set(ice.MSG_OPTION, kit.MDB_COUNT)
m.Richs(RIVER, kit.Keys(kit.MDB_HASH, river, USER), m.Option(ice.MSG_USERNAME), func(k string, val map[string]interface{}) {
m.Richs(RIVER, kit.Keys(kit.MDB_HASH, river, TOOL), kit.MDB_FOREACH, func(key string, value map[string]interface{}) { m.Richs(RIVER, kit.Keys(kit.MDB_HASH, river, TOOL), kit.MDB_FOREACH, func(key string, value map[string]interface{}) {
m.Push(key, value[kit.MDB_META], []string{kit.MDB_KEY, kit.MDB_NAME}) m.Push(key, value[kit.MDB_META], []string{kit.MDB_KEY, kit.MDB_NAME, kit.MDB_COUNT}, val[kit.MDB_META])
})
}) })
m.Sort(kit.MDB_NAME) m.Sort(kit.MDB_NAME)
} }
func _storm_tool(m *ice.Message, river, storm string, arg ...string) { func _storm_tool(m *ice.Message, river, storm string, arg ...string) { // pod ctx cmd help
prefix := kit.Keys(kit.MDB_HASH, river, TOOL, kit.MDB_HASH, storm) prefix := kit.Keys(kit.MDB_HASH, river, TOOL, kit.MDB_HASH, storm)
for i := 0; i < len(arg)-3; i += 4 { for i := 0; i < len(arg)-3; i += 4 {
id := m.Grow(RIVER, kit.Keys(prefix), kit.Data( m.Grow(RIVER, kit.Keys(prefix), kit.Data(
POD, arg[i], CTX, arg[i+1], CMD, arg[i+2], "help", arg[i+3], POD, arg[i], CTX, arg[i+1], CMD, arg[i+2], "help", arg[i+3],
)) ))
m.Log_INSERT(RIVER, river, STORM, storm, kit.MDB_HASH, id, TOOL, arg[i:i+4]) m.Log_INSERT(RIVER, river, STORM, storm, TOOL, arg[i:i+4])
} }
} }
func _storm_share(m *ice.Message, river, storm, name string, arg ...string) { func _storm_share(m *ice.Message, river, storm, name string, arg ...string) {
m.Cmdy(web.SHARE, STORM, name, storm, RIVER, river, arg) m.Cmdy(web.SHARE, STORM, name, storm, RIVER, river, arg)
} }
func _storm_rename(m *ice.Message, river, storm string, name string) {
prefix := kit.Keys(kit.MDB_HASH, river, TOOL, kit.MDB_HASH, storm)
old := m.Conf(RIVER, kit.Keys(prefix, kit.MDB_META, kit.MDB_NAME))
m.Log_MODIFY(RIVER, river, STORM, storm, kit.MDB_VALUE, name, "old", old)
m.Conf(RIVER, kit.Keys(prefix, kit.MDB_META, kit.MDB_NAME), name)
}
func _storm_remove(m *ice.Message, river string, storm string) { func _storm_remove(m *ice.Message, river string, storm string) {
prefix := kit.Keys(kit.MDB_HASH, river, TOOL) prefix := kit.Keys(kit.MDB_HASH, river, TOOL)
m.Richs(RIVER, kit.Keys(prefix), storm, func(value map[string]interface{}) { m.Richs(RIVER, kit.Keys(prefix), storm, func(value map[string]interface{}) {
@ -40,6 +37,23 @@ func _storm_remove(m *ice.Message, river string, storm string) {
}) })
m.Conf(RIVER, kit.Keys(prefix, kit.MDB_HASH, storm), "") m.Conf(RIVER, kit.Keys(prefix, kit.MDB_HASH, storm), "")
} }
func _storm_rename(m *ice.Message, river, storm string, name string) {
prefix := kit.Keys(kit.MDB_HASH, river, TOOL, kit.MDB_HASH, storm)
old := m.Conf(RIVER, kit.Keys(prefix, kit.MDB_META, kit.MDB_NAME))
m.Log_MODIFY(RIVER, river, STORM, storm, kit.MDB_VALUE, name, "old", old)
m.Conf(RIVER, kit.Keys(prefix, kit.MDB_META, kit.MDB_NAME), name)
}
func _storm_create(m *ice.Message, river string, kind, name, text string, arg ...string) string {
h := m.Rich(RIVER, kit.Keys(kit.MDB_HASH, river, TOOL), kit.Dict(
kit.MDB_META, kit.Dict(
kit.MDB_TYPE, kind, kit.MDB_NAME, name, kit.MDB_TEXT, text,
kit.MDB_EXTRA, kit.Dict(arg),
),
))
m.Log_CREATE(kit.MDB_META, STORM, RIVER, river, kit.MDB_TYPE, kind, kit.MDB_NAME, name)
m.Echo(h)
return h
}
const ( const (
POD = "pod" POD = "pod"
@ -53,22 +67,28 @@ const STORM = "storm"
func init() { func init() {
Index.Merge(&ice.Context{ Index.Merge(&ice.Context{
Configs: map[string]*ice.Config{
STORM: {Name: "storm", Help: "应用", Value: kit.Data()},
},
Commands: map[string]*ice.Command{ Commands: map[string]*ice.Command{
"/" + STORM: {Name: "/storm", Help: "暴风雨", Action: map[string]*ice.Action{ "/" + STORM: {Name: "/storm", Help: "暴风雨", Action: map[string]*ice.Action{
mdb.REMOVE: {Name: "remove", Help: "删除", Hand: func(m *ice.Message, arg ...string) { mdb.CREATE: {Name: "create type name text arg...", Help: "创建", Hand: func(m *ice.Message, arg ...string) {
_storm_remove(m, m.Option(RIVER), m.Option(STORM)) _storm_create(m, m.Option(ice.MSG_RIVER), arg[0], arg[1], arg[2], arg[3:]...)
}}, }},
mdb.RENAME: {Name: "rename name", Help: "重命名", Hand: func(m *ice.Message, arg ...string) { mdb.RENAME: {Name: "rename name", Help: "更名", Hand: func(m *ice.Message, arg ...string) {
_storm_rename(m, m.Option(RIVER), m.Option(STORM), arg[0]) _storm_rename(m, m.Option(ice.MSG_RIVER), m.Option(ice.MSG_STORM), arg[0])
}},
mdb.REMOVE: {Name: "remove", Help: "删除", Hand: func(m *ice.Message, arg ...string) {
_storm_remove(m, m.Option(ice.MSG_RIVER), m.Option(ice.MSG_STORM))
}}, }},
web.SHARE: {Name: "share name", Help: "共享", Hand: func(m *ice.Message, arg ...string) { web.SHARE: {Name: "share name", Help: "共享", Hand: func(m *ice.Message, arg ...string) {
_storm_share(m, m.Option(RIVER), m.Option(STORM), arg[0]) _storm_share(m, m.Option(ice.MSG_RIVER), m.Option(ice.MSG_STORM), arg[0])
}}, }},
TOOL: {Name: "tool [pod ctx cmd help]...", Help: "添加工具", Hand: func(m *ice.Message, arg ...string) { TOOL: {Name: "tool [pod ctx cmd help]...", Help: "添加工具", Hand: func(m *ice.Message, arg ...string) {
_storm_tool(m, m.Option(RIVER), m.Option(STORM), arg...) _storm_tool(m, m.Option(ice.MSG_RIVER), m.Option(ice.MSG_STORM), arg...)
}}, }},
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
_storm_list(m, m.Option(RIVER)) _storm_list(m, m.Option(ice.MSG_RIVER))
}}, }},
}, },
}, nil) }, nil)

View File

@ -127,6 +127,8 @@ func init() {
INNER: {Name: "inner", Help: "编辑器", Value: kit.Data( INNER: {Name: "inner", Help: "编辑器", Value: kit.Data(
"protect", kit.Dict("etc", "true", "var", "true", "usr", "true"), "protect", kit.Dict("etc", "true", "var", "true", "usr", "true"),
"source", kit.Dict( "source", kit.Dict(
"url", "true",
"sh", "true",
"sh", "true", "sh", "true",
"py", "true", "py", "true",
"shy", "true", "shy", "true",

View File

@ -35,7 +35,7 @@ func init() {
Commands: map[string]*ice.Command{ Commands: map[string]*ice.Command{
DRAW: {Name: "draw path=hi.svg auto", Help: "思维导图", Meta: kit.Dict(mdb.PLUGIN, DrawPlugin), Action: map[string]*ice.Action{ DRAW: {Name: "draw path=hi.svg auto", Help: "思维导图", Meta: kit.Dict(mdb.PLUGIN, DrawPlugin), Action: map[string]*ice.Action{
nfs.SAVE: {Name: "save path text", Help: "保存", Hand: func(m *ice.Message, arg ...string) { nfs.SAVE: {Name: "save path text", Help: "保存", Hand: func(m *ice.Message, arg ...string) {
_wiki_save(m, DATA, arg[0], arg[1]) _wiki_save(m, DATA, arg[0], kit.Select(m.Option("content"), arg, 1))
}}, }},
"run": {Name: "show zone type name text", Help: "运行", Hand: func(m *ice.Message, arg ...string) { "run": {Name: "show zone type name text", Help: "运行", Hand: func(m *ice.Message, arg ...string) {
_draw_show(m, arg[0], arg[1], arg[2], arg[3], arg[4:]...) _draw_show(m, arg[0], arg[1], arg[2], arg[3], arg[4:]...)

View File

@ -109,9 +109,6 @@ func (c *Context) cmd(m *Message, cmd *Command, key string, arg ...string) *Mess
} }
} }
if len(arg) > 0 && arg[0] == "render" {
arg = arg[1:]
}
m.Log(LOG_CMDS, "%s.%s %d %v %s", c.Name, key, len(arg), arg, kit.FileLine(cmd.Hand, 3)) m.Log(LOG_CMDS, "%s.%s %d %v %s", c.Name, key, len(arg), arg, kit.FileLine(cmd.Hand, 3))
cmd.Hand(m, c, key, arg...) cmd.Hand(m, c, key, arg...)
return m return m