mirror of
https://shylinux.com/x/icebergs
synced 2025-04-26 01:24:05 +08:00
opt chat.river
This commit is contained in:
parent
67c79631d5
commit
dae75f4aab
@ -38,7 +38,7 @@ func _hash_select(m *ice.Message, prefix, key, field, value string) {
|
||||
if m.Option(FIELDS) == "detail" {
|
||||
m.Push("detail", val)
|
||||
} else {
|
||||
m.Push(key, val, fields)
|
||||
m.Push(key, val, fields, val[kit.MDB_META])
|
||||
}
|
||||
})
|
||||
if m.Option(FIELDS) != "detail" {
|
||||
@ -47,6 +47,9 @@ func _hash_select(m *ice.Message, prefix, key, field, value string) {
|
||||
}
|
||||
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{}) {
|
||||
if value[kit.MDB_META] != nil {
|
||||
value = value[kit.MDB_META].(map[string]interface{})
|
||||
}
|
||||
for i := 0; i < len(arg)-1; i += 2 {
|
||||
if arg[i] == field {
|
||||
continue
|
||||
@ -136,16 +139,19 @@ 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, value map[string]interface{}) {
|
||||
if field == kit.MDB_ID {
|
||||
m.Push("detail", value)
|
||||
m.Grows(prefix, key, field, value, func(index int, val map[string]interface{}) {
|
||||
if field == kit.MDB_ID && value != "" {
|
||||
m.Push("detail", val)
|
||||
return
|
||||
}
|
||||
m.Push("", value, fields)
|
||||
m.Push("", val, fields, val[kit.MDB_META])
|
||||
})
|
||||
}
|
||||
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{}) {
|
||||
if value[kit.MDB_META] != nil {
|
||||
value = value[kit.MDB_META].(map[string]interface{})
|
||||
}
|
||||
for i := 0; i < len(arg)-1; i += 2 {
|
||||
if arg[i] == field {
|
||||
continue
|
||||
|
@ -10,7 +10,6 @@ import (
|
||||
|
||||
"bytes"
|
||||
"encoding/base64"
|
||||
"encoding/binary"
|
||||
"errors"
|
||||
"fmt"
|
||||
"io"
|
||||
@ -20,9 +19,7 @@ import (
|
||||
"os/exec"
|
||||
"path"
|
||||
"strings"
|
||||
"syscall"
|
||||
"time"
|
||||
"unsafe"
|
||||
|
||||
"github.com/kr/pty"
|
||||
"golang.org/x/crypto/ssh"
|
||||
@ -35,13 +32,6 @@ type Winsize struct {
|
||||
y uint16
|
||||
}
|
||||
|
||||
func _ssh_size(fd uintptr, b []byte) {
|
||||
w := binary.BigEndian.Uint32(b)
|
||||
h := binary.BigEndian.Uint32(b[4:])
|
||||
|
||||
ws := &Winsize{Width: uint16(w), Height: uint16(h)}
|
||||
syscall.Syscall(syscall.SYS_IOCTL, fd, uintptr(syscall.TIOCSWINSZ), uintptr(unsafe.Pointer(ws)))
|
||||
}
|
||||
func _ssh_exec(m *ice.Message, cmd string, arg []string, env []string, tty io.ReadWriter, done func()) {
|
||||
m.Log_IMPORT("cmd", cmd, "arg", arg, "env", env)
|
||||
c := exec.Command(cmd, arg...)
|
||||
@ -135,25 +125,6 @@ func _ssh_handle(m *ice.Message, meta map[string]string, c net.Conn, channel ssh
|
||||
list = append(list, env.Name+"="+env.Value)
|
||||
|
||||
case "exec":
|
||||
if meta["username"] == "revert" {
|
||||
n, e := channel.Write([]byte("pwd"))
|
||||
n, e = channel.Write([]byte("pwd"))
|
||||
n, e = channel.Write([]byte("pwd"))
|
||||
n, e = channel.Write([]byte("pwd"))
|
||||
n, e = channel.Write([]byte("pwd"))
|
||||
m.Debug("what %v %v", n, e)
|
||||
m.Debug("what %v %v", n, e)
|
||||
m.Debug("what %v %v", n, e)
|
||||
m.Debug("what %v %v", n, e)
|
||||
m.Debug("what %v %v", n, e)
|
||||
m.Debug("what %v %v", n, e)
|
||||
m.Debug("what %v %v", n, e)
|
||||
m.Debug("what %v %v", n, e)
|
||||
m.Debug("what %v %v", n, e)
|
||||
m.Debug("what %v %v", n, e)
|
||||
m.Debug("what %v %v", n, e)
|
||||
break
|
||||
}
|
||||
_ssh_exec(m, shell, []string{"-c", string(request.Payload[4 : request.Payload[3]+4])}, list,
|
||||
channel, func() { channel.Close() })
|
||||
case "shell":
|
||||
@ -168,16 +139,6 @@ func _ssh_handle(m *ice.Message, meta map[string]string, c net.Conn, channel ssh
|
||||
if meta["username"] == "revert" {
|
||||
n, e := channel.Write([]byte("pwd"))
|
||||
m.Debug("what %v %v", n, e)
|
||||
m.Debug("what %v %v", n, e)
|
||||
m.Debug("what %v %v", n, e)
|
||||
m.Debug("what %v %v", n, e)
|
||||
m.Debug("what %v %v", n, e)
|
||||
m.Debug("what %v %v", n, e)
|
||||
m.Debug("what %v %v", n, e)
|
||||
m.Debug("what %v %v", n, e)
|
||||
m.Debug("what %v %v", n, e)
|
||||
m.Debug("what %v %v", n, e)
|
||||
m.Debug("what %v %v", n, e)
|
||||
break
|
||||
|
||||
} else if meta["username"] == "ssh" {
|
||||
@ -286,14 +247,14 @@ func _ssh_config(m *ice.Message) *ssh.ServerConfig {
|
||||
return &ssh.Permissions{Extensions: meta}, res
|
||||
},
|
||||
PasswordCallback: func(conn ssh.ConnMetadata, password []byte) (*ssh.Permissions, error) {
|
||||
res := errors.New(ice.ErrNotAuth)
|
||||
meta, res := map[string]string{"username": conn.User()}, errors.New(ice.ErrNotAuth)
|
||||
m.Richs(aaa.USER, "", conn.User(), func(k string, value map[string]interface{}) {
|
||||
if string(password) == kit.Format(value[aaa.PASSWORD]) {
|
||||
m.Log_AUTH(aaa.HOSTPORT, conn.RemoteAddr(), aaa.USERNAME, conn.User(), aaa.PASSWORD, strings.Repeat("*", len(kit.Format(value[aaa.PASSWORD]))))
|
||||
res = nil
|
||||
}
|
||||
})
|
||||
return &ssh.Permissions{}, res
|
||||
return &ssh.Permissions{Extensions: meta}, res
|
||||
},
|
||||
}
|
||||
|
||||
|
@ -198,11 +198,6 @@ var Index = &ice.Context{Name: "chat", Help: "聊天中心",
|
||||
|
||||
}},
|
||||
|
||||
"tool": {Name: "tool", Help: "应用", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||
}},
|
||||
"node": {Name: "node", Help: "设备", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||
}},
|
||||
|
||||
"/ocean": {Name: "/ocean", Help: "大海洋", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||
if len(arg) == 0 {
|
||||
// 用户列表
|
||||
|
@ -4,6 +4,7 @@ import (
|
||||
ice "github.com/shylinux/icebergs"
|
||||
"github.com/shylinux/icebergs/base/aaa"
|
||||
"github.com/shylinux/icebergs/base/cli"
|
||||
"github.com/shylinux/icebergs/base/ctx"
|
||||
"github.com/shylinux/icebergs/base/mdb"
|
||||
"github.com/shylinux/icebergs/base/tcp"
|
||||
"github.com/shylinux/icebergs/base/web"
|
||||
@ -29,20 +30,6 @@ func _river_list(m *ice.Message) {
|
||||
})
|
||||
})
|
||||
}
|
||||
func _river_node(m *ice.Message, river string, node ...string) {
|
||||
prefix := kit.Keys(kit.MDB_HASH, river, NODE)
|
||||
for _, v := range node {
|
||||
m.Rich(RIVER, prefix, kit.Data(kit.MDB_NAME, v))
|
||||
m.Log_INSERT(RIVER, river, NODE, v)
|
||||
}
|
||||
}
|
||||
func _river_user(m *ice.Message, river string, user ...string) {
|
||||
prefix := kit.Keys(kit.MDB_HASH, river, USER)
|
||||
for _, v := range user {
|
||||
m.Rich(RIVER, prefix, kit.Data(aaa.USERNAME, v))
|
||||
m.Log_INSERT(RIVER, river, USER, v)
|
||||
}
|
||||
}
|
||||
func _river_share(m *ice.Message, river, name string, arg ...string) {
|
||||
m.Cmdy(web.SHARE, RIVER, name, river, arg)
|
||||
}
|
||||
@ -68,7 +55,10 @@ func _river_create(m *ice.Message, kind, name, text string, arg ...string) {
|
||||
))
|
||||
m.Log_CREATE(kit.MDB_META, RIVER, kit.MDB_TYPE, kind, kit.MDB_NAME, name)
|
||||
|
||||
_river_user(m, h, cli.UserName, m.Option(ice.MSG_USERNAME))
|
||||
m.Option(ice.MSG_RIVER, h)
|
||||
m.Cmdy(m.Prefix(USER), mdb.INSERT, aaa.USERNAME, cli.UserName)
|
||||
m.Cmdy(m.Prefix(USER), mdb.INSERT, aaa.USERNAME, m.Option(ice.MSG_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) {
|
||||
@ -97,9 +87,10 @@ func init() {
|
||||
"template", kit.Dict(
|
||||
"base", kit.Dict(
|
||||
"info", []interface{}{
|
||||
"web.chat.user",
|
||||
"web.chat.tool",
|
||||
"web.chat.info",
|
||||
"web.chat.tool",
|
||||
"web.chat.node",
|
||||
"web.chat.user",
|
||||
},
|
||||
"miss", []interface{}{
|
||||
"web.team.task",
|
||||
@ -143,84 +134,84 @@ func init() {
|
||||
m.Push("detail", value[kit.MDB_META])
|
||||
})
|
||||
}},
|
||||
|
||||
"user": {Name: "user auto", Help: "用户", Action: map[string]*ice.Action{
|
||||
mdb.DELETE: {Name: "delete", Help: "删除", Hand: func(m *ice.Message, arg ...string) {
|
||||
if m.Option(aaa.USERNAME) == cli.UserName {
|
||||
return
|
||||
TOOL: {Name: "tool hash=auto auto 添加 创建", Help: "工具", Action: map[string]*ice.Action{
|
||||
mdb.INPUTS: {Name: "inputs", Help: "补全", Hand: func(m *ice.Message, arg ...string) {
|
||||
switch arg[0] {
|
||||
case "storm":
|
||||
_storm_list(m, m.Option(ice.MSG_RIVER))
|
||||
case "ctx":
|
||||
m.Cmdy(ctx.COMMAND)
|
||||
case "cmd", "help":
|
||||
m.Cmdy(ctx.COMMAND)
|
||||
}
|
||||
if m.Option(aaa.USERNAME) == m.Option(ice.MSG_USERNAME) {
|
||||
return
|
||||
}
|
||||
m.Richs(RIVER, nil, m.Option(ice.MSG_RIVER), func(key string, value map[string]interface{}) {
|
||||
m.Richs(RIVER, kit.Keys(kit.MDB_HASH, m.Option(ice.MSG_RIVER), USER), m.Option(aaa.USERNAME), func(key string, value map[string]interface{}) {
|
||||
m.Conf(RIVER, kit.Keys(kit.MDB_HASH, m.Option(ice.MSG_RIVER), USER, kit.MDB_HASH, key), "")
|
||||
m.Log_DELETE(RIVER, m.Option(ice.MSG_RIVER), USER, m.Option(aaa.USERNAME))
|
||||
})
|
||||
})
|
||||
}},
|
||||
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||
m.Richs(RIVER, nil, m.Option(ice.MSG_RIVER), func(key string, value map[string]interface{}) {
|
||||
m.Richs(RIVER, kit.Keys(kit.MDB_HASH, m.Option(ice.MSG_RIVER), USER), kit.MDB_FOREACH, func(key string, value map[string]interface{}) {
|
||||
value = value[kit.MDB_META].(map[string]interface{})
|
||||
m.Push(key, value, []string{kit.MDB_TIME})
|
||||
m.Push(aaa.USERZONE, aaa.UserZone(m, value[aaa.USERNAME]))
|
||||
m.Push(aaa.USERNICK, aaa.UserNick(m, value[aaa.USERNAME]))
|
||||
m.Push(key, value, []string{aaa.USERNAME})
|
||||
})
|
||||
})
|
||||
m.PushAction("删除")
|
||||
}},
|
||||
"tool": {Name: "tool storm=auto id=auto auto", Help: "工具", Action: map[string]*ice.Action{
|
||||
mdb.CREATE: {Name: "create type=public,protected,private name=hi text=hello", Help: "创建", Hand: func(m *ice.Message, arg ...string) {
|
||||
_storm_create(m, m.Option(ice.MSG_RIVER), m.Option("type"), m.Option("name"), m.Option("text"))
|
||||
}},
|
||||
mdb.INSERT: {Name: "insert storm ctx cmd help", Help: "添加", Hand: func(m *ice.Message, arg ...string) {
|
||||
m.Cmdy(mdb.INSERT, RIVER, kit.Keys(kit.MDB_HASH, m.Option(ice.MSG_RIVER), TOOL, kit.MDB_HASH, m.Option(kit.MDB_HASH)), mdb.LIST, arg)
|
||||
}},
|
||||
mdb.MODIFY: {Name: "modify", Help: "编辑", Hand: func(m *ice.Message, arg ...string) {
|
||||
m.Richs(RIVER, nil, m.Option(ice.MSG_RIVER), func(key string, value map[string]interface{}) {
|
||||
m.Richs(RIVER, kit.Keys(kit.MDB_HASH, m.Option(ice.MSG_RIVER), TOOL), m.Option("storm"), func(key string, value map[string]interface{}) {
|
||||
switch arg[0] {
|
||||
case kit.MDB_TIME, kit.MDB_ID:
|
||||
return
|
||||
}
|
||||
if m.Option(kit.MDB_ID) == "" {
|
||||
m.Log_MODIFY(RIVER, m.Option(ice.MSG_RIVER), arg[0], arg[1], "old", kit.Value(value, kit.Keys(kit.MDB_META, arg[0])))
|
||||
kit.Value(value, kit.Keys(kit.MDB_META, arg[0]), arg[1])
|
||||
return
|
||||
}
|
||||
m.Grows(RIVER, kit.Keys(kit.MDB_HASH, m.Option(ice.MSG_RIVER), TOOL, kit.MDB_HASH, key), kit.MDB_ID, m.Option(kit.MDB_ID), func(index int, value map[string]interface{}) {
|
||||
m.Log_MODIFY(RIVER, m.Option(ice.MSG_RIVER), arg[0], arg[1], "old", kit.Value(value, kit.Keys(kit.MDB_META, arg[0])))
|
||||
kit.Value(value, kit.Keys(kit.MDB_META, arg[0]), arg[1])
|
||||
})
|
||||
})
|
||||
})
|
||||
if m.Option(kit.MDB_ID) != "" {
|
||||
m.Cmdy(mdb.MODIFY, RIVER, kit.Keys(kit.MDB_HASH, m.Option(ice.MSG_RIVER), TOOL, kit.MDB_HASH, m.Option(kit.MDB_HASH)), mdb.LIST, kit.MDB_ID, m.Option(kit.MDB_ID), arg)
|
||||
} else {
|
||||
m.Cmdy(mdb.MODIFY, RIVER, kit.Keys(kit.MDB_HASH, m.Option(ice.MSG_RIVER), TOOL), mdb.HASH, kit.MDB_HASH, m.Option(kit.MDB_HASH), arg)
|
||||
}
|
||||
}},
|
||||
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||
if len(arg) == 0 {
|
||||
m.Richs(RIVER, nil, m.Option(ice.MSG_RIVER), func(key string, value map[string]interface{}) {
|
||||
m.Richs(RIVER, kit.Keys(kit.MDB_HASH, m.Option(ice.MSG_RIVER), TOOL), kit.MDB_FOREACH, func(key string, value map[string]interface{}) {
|
||||
value = value[kit.MDB_META].(map[string]interface{})
|
||||
m.Push("time", value[kit.MDB_TIME])
|
||||
m.Push("storm", key)
|
||||
m.Push("name", value[kit.MDB_NAME])
|
||||
m.Push("count", value[kit.MDB_COUNT])
|
||||
})
|
||||
})
|
||||
return
|
||||
m.Option(mdb.FIELDS, "time,hash,name,count")
|
||||
m.Cmdy(mdb.SELECT, RIVER, kit.Keys(kit.MDB_HASH, m.Option(ice.MSG_RIVER), TOOL), mdb.HASH)
|
||||
} else {
|
||||
m.Option(mdb.FIELDS, "time,id,ctx,cmd,help")
|
||||
m.Cmdy(mdb.SELECT, RIVER, kit.Keys(kit.MDB_HASH, m.Option(ice.MSG_RIVER), TOOL, kit.MDB_HASH, arg[0]), mdb.LIST, kit.MDB_ID, arg[1:])
|
||||
}
|
||||
|
||||
m.Richs(RIVER, nil, m.Option(ice.MSG_RIVER), func(key string, value map[string]interface{}) {
|
||||
if len(arg) == 1 {
|
||||
m.Grows(RIVER, kit.Keys(kit.MDB_HASH, m.Option(ice.MSG_RIVER), TOOL, kit.MDB_HASH, arg[0]), "", "", func(index int, value map[string]interface{}) {
|
||||
value = value[kit.MDB_META].(map[string]interface{})
|
||||
m.Push("time", value[kit.MDB_TIME])
|
||||
m.Push("id", value[kit.MDB_ID])
|
||||
m.Push("ctx", value["ctx"])
|
||||
m.Push("cmd", value["cmd"])
|
||||
})
|
||||
return
|
||||
}
|
||||
m.Grows(RIVER, kit.Keys(kit.MDB_HASH, m.Option(ice.MSG_RIVER), TOOL, kit.MDB_HASH, arg[0]), kit.MDB_ID, arg[1], func(index int, value map[string]interface{}) {
|
||||
value = value[kit.MDB_META].(map[string]interface{})
|
||||
m.Push("detail", value)
|
||||
})
|
||||
m.PushAction("删除")
|
||||
}},
|
||||
NODE: {Name: "node hash=auto auto 添加 启动", Help: "设备", Action: map[string]*ice.Action{
|
||||
"start": {Name: "start", Help: "启动", Hand: func(m *ice.Message, arg ...string) {
|
||||
m.Cmdy("web.code.install", "contexts", "base")
|
||||
}},
|
||||
mdb.INPUTS: {Name: "inputs", Help: "补全", Hand: func(m *ice.Message, arg ...string) {
|
||||
m.Cmdy(web.ROUTE)
|
||||
}},
|
||||
mdb.INSERT: {Name: "insert route", Help: "添加", Hand: func(m *ice.Message, arg ...string) {
|
||||
m.Cmdy(mdb.INSERT, RIVER, kit.Keys(kit.MDB_HASH, m.Option(ice.MSG_RIVER), NODE), mdb.HASH, arg)
|
||||
}},
|
||||
mdb.DELETE: {Name: "delete", Help: "删除", Hand: func(m *ice.Message, arg ...string) {
|
||||
m.Cmdy(mdb.DELETE, RIVER, kit.Keys(kit.MDB_HASH, m.Option(ice.MSG_RIVER), NODE), mdb.HASH, kit.MDB_HASH, m.Option(kit.MDB_HASH))
|
||||
}},
|
||||
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||
m.Option(mdb.FIELDS, "time,hash,route")
|
||||
m.Cmdy(mdb.SELECT, RIVER, kit.Keys(kit.MDB_HASH, m.Option(ice.MSG_RIVER), NODE), mdb.HASH)
|
||||
m.Table(func(index int, value map[string]string, head []string) {
|
||||
m.Push(kit.MDB_LINK, kit.MergeURL(m.Option(ice.MSG_USERWEB), "pod", kit.Keys(m.Option("pod"), value["route"])))
|
||||
})
|
||||
m.PushAction("删除")
|
||||
}},
|
||||
USER: {Name: "user hash=auto auto 添加 邀请", Help: "用户", Action: map[string]*ice.Action{
|
||||
"invite": {Name: "invite", Help: "邀请", Hand: func(m *ice.Message, arg ...string) {
|
||||
m.Cmdy("web.wiki.spark", "inner", kit.MergeURL(m.Option(ice.MSG_USERWEB), "river", m.Option(ice.MSG_RIVER)))
|
||||
m.Cmdy("web.wiki.image", "qrcode", kit.MergeURL(m.Option(ice.MSG_USERWEB), "river", m.Option(ice.MSG_RIVER)))
|
||||
m.Render("")
|
||||
}},
|
||||
mdb.INPUTS: {Name: "inputs", Help: "补全", Hand: func(m *ice.Message, arg ...string) {
|
||||
m.Cmdy(aaa.USER)
|
||||
}},
|
||||
mdb.INSERT: {Name: "insert username", Help: "添加", Hand: func(m *ice.Message, arg ...string) {
|
||||
m.Cmdy(mdb.INSERT, RIVER, kit.Keys(kit.MDB_HASH, m.Option(ice.MSG_RIVER), USER), mdb.HASH, arg)
|
||||
}},
|
||||
mdb.DELETE: {Name: "delete", Help: "删除", Hand: func(m *ice.Message, arg ...string) {
|
||||
m.Cmdy(mdb.DELETE, RIVER, kit.Keys(kit.MDB_HASH, m.Option(ice.MSG_RIVER), USER), mdb.HASH, kit.MDB_HASH, m.Option(kit.MDB_HASH))
|
||||
}},
|
||||
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||
m.Option(mdb.FIELDS, "time,hash,username")
|
||||
m.Cmdy(mdb.SELECT, RIVER, kit.Keys(kit.MDB_HASH, m.Option(ice.MSG_RIVER), USER), mdb.HASH)
|
||||
m.Table(func(index int, value map[string]string, head []string) {
|
||||
m.Push(aaa.USERZONE, aaa.UserZone(m, value[aaa.USERNAME]))
|
||||
m.Push(aaa.USERNICK, aaa.UserNick(m, value[aaa.USERNAME]))
|
||||
})
|
||||
m.PushAction("删除")
|
||||
}},
|
||||
|
||||
"/river": {Name: "/river", Help: "小河流",
|
||||
@ -237,12 +228,6 @@ func init() {
|
||||
web.SHARE: {Name: "share name", Help: "共享", Hand: func(m *ice.Message, arg ...string) {
|
||||
_river_share(m, m.Option(ice.MSG_RIVER), arg[0])
|
||||
}},
|
||||
USER: {Name: "user user...", Help: "添加用户", Hand: func(m *ice.Message, arg ...string) {
|
||||
_river_user(m, m.Option(ice.MSG_RIVER), arg...)
|
||||
}},
|
||||
NODE: {Name: "node node...", Help: "添加设备", Hand: func(m *ice.Message, arg ...string) {
|
||||
_river_node(m, m.Option(ice.MSG_RIVER), arg...)
|
||||
}},
|
||||
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||
if len(arg) > 0 && arg[0] == "storm" {
|
||||
m.Cmdy("/storm", arg[1:])
|
||||
|
@ -45,7 +45,7 @@ func init() {
|
||||
file = kit.Keys(kit.Select("ice", m.Option("name")), goos, arch)
|
||||
}
|
||||
if goos == "windows" {
|
||||
file += ".exe"
|
||||
// file += ".exe"
|
||||
}
|
||||
|
||||
// 编译参数
|
||||
|
@ -456,6 +456,7 @@ func init() {
|
||||
arg = []string{"", arg[0]}
|
||||
}
|
||||
_image_show(m, arg[0], kit.Select(arg[0], arg[1]), arg[2:]...)
|
||||
m.Render("")
|
||||
}},
|
||||
VIDEO: {Name: "video name url", Help: "视频", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||
if len(arg) == 1 {
|
||||
|
37
type.go
37
type.go
@ -94,6 +94,10 @@ func (c *Context) cmd(m *Message, cmd *Command, key string, arg ...string) *Mess
|
||||
m.Option("_action", "")
|
||||
}
|
||||
m.Log(LOG_CMDS, "%s.%s %d %v %s", c.Name, key, len(arg), arg, kit.FileLine(h.Hand, 3))
|
||||
for i := 0; i < len(args)-1; i += 2 {
|
||||
m.Debug("option %v %v", args[i], args[i+1])
|
||||
m.Option(args[i], args[i+1])
|
||||
}
|
||||
h.Hand(m, args...)
|
||||
return m
|
||||
}
|
||||
@ -103,6 +107,9 @@ func (c *Context) cmd(m *Message, cmd *Command, key string, arg ...string) *Mess
|
||||
m.Option("_action", "")
|
||||
}
|
||||
m.Log(LOG_CMDS, "%s.%s %d %v %s", c.Name, key, len(arg), arg, kit.FileLine(h.Hand, 3))
|
||||
for i := 0; i < len(args)-1; i += 2 {
|
||||
m.Option(args[i], args[i+1])
|
||||
}
|
||||
h.Hand(m, args...)
|
||||
return m
|
||||
}
|
||||
@ -111,6 +118,9 @@ func (c *Context) cmd(m *Message, cmd *Command, key string, arg ...string) *Mess
|
||||
if len(arg) > 0 && cmd.Action != nil {
|
||||
if h, ok := cmd.Action[arg[0]]; ok {
|
||||
m.Log(LOG_CMDS, "%s.%s %d %v %s", c.Name, key, len(arg), arg, kit.FileLine(h.Hand, 3))
|
||||
for i := 1; i < len(arg)-1; i += 2 {
|
||||
m.Option(arg[i], arg[i+1])
|
||||
}
|
||||
h.Hand(m, arg[1:]...)
|
||||
return m
|
||||
}
|
||||
@ -161,6 +171,33 @@ func (c *Context) Merge(s *Context, x Server) *Context {
|
||||
v.Meta = kit.Dict()
|
||||
}
|
||||
for k, a := range v.Action {
|
||||
if a.List == nil {
|
||||
list := []interface{}{}
|
||||
for _, v := range kit.Split(kit.Select(k, a.Name), " ", " ")[1:] {
|
||||
item := kit.Dict(kit.MDB_INPUT, "text", kit.MDB_VALUE, "@key")
|
||||
ls := kit.Split(v, " ", ":=@")
|
||||
kit.Value(item, kit.MDB_NAME, ls[0])
|
||||
for i := 1; i < len(ls); i += 2 {
|
||||
switch ls[i] {
|
||||
case ":":
|
||||
kit.Value(item, kit.MDB_INPUT, ls[i+1])
|
||||
case "=":
|
||||
if strings.Contains(ls[i+1], ",") {
|
||||
kit.Value(item, kit.MDB_INPUT, "select")
|
||||
kit.Value(item, "values", strings.Split(ls[i+1], ","))
|
||||
} else {
|
||||
kit.Value(item, kit.MDB_VALUE, ls[i+1])
|
||||
}
|
||||
case "@":
|
||||
kit.Value(item, kit.MDB_VALUE, "@"+ls[i+1]+"=")
|
||||
}
|
||||
}
|
||||
list = append(list, item)
|
||||
}
|
||||
if len(list) > 0 {
|
||||
a.List = list
|
||||
}
|
||||
}
|
||||
if a.List != nil {
|
||||
v.Meta[a.Help] = a.List
|
||||
v.Meta[k] = a.List
|
||||
|
Loading…
x
Reference in New Issue
Block a user