diff --git a/base/ctx/command.go b/base/ctx/command.go index 3da51f57..df1d4102 100644 --- a/base/ctx/command.go +++ b/base/ctx/command.go @@ -123,6 +123,32 @@ func init() { }) } +func Run(m *ice.Message, arg ...string) { + if len(arg) > 3 && arg[1] == ACTION && arg[2] == CONFIG { + switch arg[3] { + case "help": + if file := strings.ReplaceAll(GetCmdFile(m, arg[0]), ".go", ".shy"); nfs.ExistsFile(m, file) { + ProcessFloat(m, "web.wiki.word", file) + } + case "script": + if file := strings.ReplaceAll(GetCmdFile(m, arg[0]), ".go", ".js"); nfs.ExistsFile(m, file) { + ProcessFloat(m, "web.code.inner", file) + } + case "source": + if file := GetCmdFile(m, arg[0]); nfs.ExistsFile(m, file) { + ProcessFloat(m, "web.code.inner", file) + } + case "select": + m.Cmdy(CONFIG, arg[0]) + case "reset": + m.Cmd(CONFIG, "reset", arg[0]) + } + return + } + if !PodCmd(m, arg) && aaa.Right(m, arg) { + m.Cmdy(arg) + } +} func CmdHandler(args ...ice.Any) ice.Handler { return func(m *ice.Message, arg ...string) { m.Cmdy(args...) } } @@ -133,32 +159,7 @@ func CmdAction(args ...ice.Any) ice.Actions { m.Cmdy(COMMAND, arg) } }}, - ice.RUN: {Name: "run", Help: "执行", Hand: func(m *ice.Message, arg ...string) { - if len(arg) > 3 && arg[1] == ACTION && arg[2] == CONFIG { - switch arg[3] { - case "help": - if file := strings.ReplaceAll(GetCmdFile(m, arg[0]), ".go", ".shy"); nfs.ExistsFile(m, file) { - ProcessFloat(m, "web.wiki.word", file) - } - case "script": - if file := strings.ReplaceAll(GetCmdFile(m, arg[0]), ".go", ".js"); nfs.ExistsFile(m, file) { - ProcessFloat(m, "web.code.inner", file) - } - case "source": - if file := GetCmdFile(m, arg[0]); nfs.ExistsFile(m, file) { - ProcessFloat(m, "web.code.inner", file) - } - case "select": - m.Cmdy(CONFIG, arg[0]) - case "reset": - m.Cmd(CONFIG, "reset", arg[0]) - } - return - } - if !PodCmd(m, arg) && aaa.Right(m, arg) { - m.Cmdy(arg) - } - }}, + ice.RUN: {Name: "run", Help: "执行", Hand: Run}, } } func PodCmd(m *ice.Message, arg ...ice.Any) bool { diff --git a/base/ctx/process.go b/base/ctx/process.go index e92d73b4..94bb1064 100644 --- a/base/ctx/process.go +++ b/base/ctx/process.go @@ -30,7 +30,8 @@ func Process(m *ice.Message, key string, args []string, arg ...string) { func ProcessField(m *ice.Message, cmd string, args []string, arg ...string) { cmd = kit.Select(m.PrefixKey(), cmd) if len(arg) == 0 || arg[0] != ice.RUN { - if m.Cmdy(COMMAND, cmd).ProcessField(m.ActionKey(), ice.RUN); len(args) > 0 { + m.Option("_index", m.PrefixKey()) + if m.Cmdy(COMMAND, cmd).ProcessField(ACTION, m.ActionKey(), ice.RUN); len(args) > 0 { m.Push(ARGS, kit.Format(args)) } return @@ -48,6 +49,9 @@ func ProcessFloat(m *ice.Message, arg ...string) { func ProcessHold(m *ice.Message, text ...ice.Any) { m.Process(ice.PROCESS_HOLD, text...) } +func ProcessOpen(m *ice.Message, url string) { + m.Process(ice.PROCESS_OPEN, url) +} func ProcessRefresh(m *ice.Message, arg ...string) { m.ProcessRefresh(kit.Select("300ms", arg, 0)) } diff --git a/base/gdb/event.go b/base/gdb/event.go index 6bc04cfe..b091a7a9 100644 --- a/base/gdb/event.go +++ b/base/gdb/event.go @@ -15,7 +15,7 @@ func init() { mdb.ZoneInsert(m, m.OptionSimple(EVENT, ice.CMD)) }}, HAPPEN: {Name: "happen event arg", Help: "触发", Hand: func(m *ice.Message, arg ...string) { - mdb.ZoneSelect(m.Spawn(), m.Option(EVENT)).Tables(func(value ice.Maps) { + mdb.ZoneSelect(m.Spawn(ice.OptionFields("")), m.Option(EVENT)).Tables(func(value ice.Maps) { m.Cmdy(kit.Split(value[ice.CMD]), m.Option(EVENT), arg[2:], ice.OptionFields("")).Cost() }) }}, @@ -38,5 +38,5 @@ func Watch(m *ice.Message, key string, arg ...string) *ice.Message { return m.Cmd("gdb.event", LISTEN, EVENT, key, ice.CMD, kit.Join(arg, ice.SP)) } func Event(m *ice.Message, key string, arg ...ice.Any) *ice.Message { - return m.Cmdy("gdb.event", HAPPEN, EVENT, key, arg) + return m.Cmdy("gdb.event", HAPPEN, EVENT, kit.Select(kit.Keys(m.CommandKey(), m.ActionKey()), key), arg) } diff --git a/base/web/cache.go b/base/web/cache.go index 30871d81..9edc780f 100644 --- a/base/web/cache.go +++ b/base/web/cache.go @@ -119,6 +119,7 @@ const ( WRITE = "write" UPLOAD = "upload" DOWNLOAD = "download" + DISPLAY = "display" UPLOAD_WATCH = "upload_watch" ) diff --git a/base/web/option.go b/base/web/option.go index 83affac0..78b33f60 100644 --- a/base/web/option.go +++ b/base/web/option.go @@ -12,19 +12,16 @@ import ( "shylinux.com/x/icebergs/base/ctx" "shylinux.com/x/icebergs/base/gdb" "shylinux.com/x/icebergs/base/mdb" - "shylinux.com/x/icebergs/base/nfs" "shylinux.com/x/icebergs/base/tcp" kit "shylinux.com/x/toolkits" "shylinux.com/x/toolkits/file" ) -func Upload(m *ice.Message) []string { // hash name size - up := kit.Simple(m.Optionv(ice.MSG_UPLOAD)) - if len(up) < 2 { - msg := m.Cmdy(CACHE, UPLOAD) - up = kit.Simple(msg.Append(mdb.HASH), msg.Append(mdb.NAME), msg.Append(nfs.SIZE)) +func Upload(m *ice.Message) *ice.Message { + if up := kit.Simple(m.Optionv(ice.MSG_UPLOAD)); len(up) < 2 { + m.Cmdy(CACHE, UPLOAD) } - return up + return m } func PushNotice(m *ice.Message, arg ...ice.Any) { if m.Option(ice.MSG_DAEMON) == "" { diff --git a/base/web/spide.go b/base/web/spide.go index 8bc25bb0..b88d90cc 100644 --- a/base/web/spide.go +++ b/base/web/spide.go @@ -351,6 +351,9 @@ const ( CLIENT_URL = "client.url" LOGHEADERS = "logheaders" + OPEN = "open" + FULL = "full" + LINK = "link" HTTP = "http" FORM = "form" ADDRESS = "address" diff --git a/conf.go b/conf.go index 5562d3b0..edda3810 100644 --- a/conf.go +++ b/conf.go @@ -289,6 +289,7 @@ const ( // mdb MDB = "mdb" KEY = "key" VALUE = "value" + FIELD = "field" EXTRA = "extra" SCRIPT = "script" META = "meta" diff --git a/core/chat/action.go b/core/chat/action.go index 5e0acb0c..f87eee89 100644 --- a/core/chat/action.go +++ b/core/chat/action.go @@ -69,7 +69,7 @@ func _action_share(m *ice.Message, arg ...string) { } } func _action_upload(m *ice.Message) { - msg := m.Cmd(web.CACHE, web.UPLOAD) + msg := m.Cmdy(web.CACHE, web.UPLOAD) m.Option(ice.MSG_UPLOAD, msg.Append(mdb.HASH), msg.Append(mdb.NAME), msg.Append(nfs.SIZE)) } diff --git a/core/chat/chat.shy b/core/chat/chat.shy index f3d83b6b..9c3eaccd 100644 --- a/core/chat/chat.shy +++ b/core/chat/chat.shy @@ -6,28 +6,24 @@ search.go action.go river.go storm.go -template.go pod.go cmd.go grant.go sso.go -oauth -scan.go -paste.go +favor.go iframe.go -location.go -location.shy - -files.go -trans.go media.go -topic.go div.go +topic.go website.go +template.go keyboard.go +location.go +location.shy +trans.go room.go meet.go - +oauth diff --git a/core/chat/favor.go b/core/chat/favor.go new file mode 100644 index 00000000..3606cc94 --- /dev/null +++ b/core/chat/favor.go @@ -0,0 +1,103 @@ +package chat + +import ( + "strings" + + ice "shylinux.com/x/icebergs" + "shylinux.com/x/icebergs/base/cli" + "shylinux.com/x/icebergs/base/ctx" + "shylinux.com/x/icebergs/base/gdb" + "shylinux.com/x/icebergs/base/mdb" + "shylinux.com/x/icebergs/base/ssh" + "shylinux.com/x/icebergs/base/web" + kit "shylinux.com/x/toolkits" +) + +const ( + FAVOR_INPUTS = "favor.inputs" + FAVOR_TABLES = "favor.tables" + FAVOR_ACTION = "favor.action" +) +const FAVOR = "favor" + +func init() { + Index.MergeCommands(ice.Commands{ + FAVOR: {Name: "favor hash auto create getClipboardData getLocation scanQRCode upload", Help: "收藏夹", Actions: ice.MergeActions(ice.Actions{ + mdb.INPUTS: {Hand: func(m *ice.Message, arg ...string) { + switch mdb.HashInputs(m, arg); arg[0] { + case mdb.TYPE: + m.Push(arg[0], mdb.TEXT, ctx.INDEX) + case mdb.NAME: + switch m.Option(mdb.TYPE) { + case ctx.INDEX: + m.Copy(m.Cmd(ctx.COMMAND, mdb.SEARCH, ctx.COMMAND, arg[1:], ice.OptionFields(ctx.INDEX)).RenameAppend(ctx.INDEX, arg[0])) + } + } + gdb.Event(m, "", arg) + }}, + "getClipboardData": {Name: "favor create", Help: "粘贴"}, + "getLocation": {Name: "favor create", Help: "定位"}, + "scanQRCode": {Name: "favor create", Help: "扫码"}, + mdb.CREATE: {Hand: func(m *ice.Message, arg ...string) { + m.OptionDefault(mdb.TYPE, mdb.LINK, mdb.NAME, kit.ParseURL(m.Option(mdb.TEXT)).Host) + mdb.HashCreate(m, m.OptionSimple()) + }}, + web.UPLOAD: {Hand: func(m *ice.Message, arg ...string) { + web.Upload(m).Cmd("", mdb.CREATE, m.AppendSimple(mdb.TYPE, mdb.NAME, mdb.TEXT)) + }}, + web.DOWNLOAD: {Hand: func(m *ice.Message, arg ...string) { + ctx.ProcessOpen(m, web.MergeURL2(m, web.SHARE_LOCAL+m.Option(mdb.TEXT), "filename", m.Option(mdb.NAME))) + }}, + web.DISPLAY: {Help: "预览", Hand: func(m *ice.Message, arg ...string) { + m.EchoImages(web.SHARE_LOCAL + m.Option(mdb.TEXT)).ProcessInner() + }}, + ctx.INDEX: {Help: "命令", Hand: func(m *ice.Message, arg ...string) { + ctx.ProcessField(m, m.Cmd("", m.Option(mdb.HASH)).Append(mdb.NAME), kit.Simple(kit.UnMarshal(m.Option(mdb.TEXT))), arg...) + }}, + ice.RUN: {Hand: func(m *ice.Message, arg ...string) { + m.Option(mdb.TYPE, m.Cmd("", m.Option(mdb.HASH)).Append(mdb.TYPE)) + ctx.Run(m, arg...) + }}, + }, mdb.HashAction(mdb.FIELD, "time,hash,type,name,text"), ctx.CmdAction()), Hand: func(m *ice.Message, arg ...string) { + if len(arg) > 0 && arg[0] == ctx.ACTION { + m.Option(mdb.TYPE, m.Cmd("", m.Option(mdb.HASH)).Append(mdb.TYPE)) + gdb.Event(m, FAVOR_ACTION, arg) + return + } + if mdb.HashSelect(m, arg...); len(arg) == 0 { + m.Tables(func(value ice.Maps) { + if msg := gdb.Event(m.Spawn(), FAVOR_TABLES, mdb.TYPE, value[mdb.TYPE]); msg.Append(ctx.ACTION) != "" { + m.PushButton(msg.Append(ctx.ACTION)) + return + } + switch value[mdb.TYPE] { + case ctx.INDEX: + m.PushButton(ctx.INDEX, mdb.REMOVE) + default: + if strings.HasPrefix(value[mdb.TEXT], ice.VAR_FILE) { + if kit.ExtIsImage(value[mdb.NAME]) { + m.PushButton(web.DISPLAY, web.DOWNLOAD, mdb.REMOVE) + } else { + m.PushButton(web.DOWNLOAD, mdb.REMOVE) + } + } else { + m.PushButton(mdb.REMOVE) + } + } + }) + } else { + if strings.HasPrefix(m.Append(mdb.TEXT), ice.VAR_FILE) { + link := web.SHARE_LOCAL + m.Append(mdb.TEXT) + if m.PushDownload(mdb.LINK, m.Append(mdb.NAME), link); len(arg) > 0 && kit.ExtIsImage(m.Append(mdb.NAME)) { + m.PushImages(web.DISPLAY, link) + } + } + m.PushScript(ssh.SCRIPT, m.Append(mdb.TEXT)) + m.PushQRCode(cli.QRCODE, m.Append(mdb.TEXT)) + m.PushAction(mdb.REMOVE) + } + }}, + }) +} + +func FavorAction() ice.Actions { return gdb.EventAction(FAVOR_INPUTS, FAVOR_TABLES, FAVOR_ACTION) } diff --git a/core/chat/files.go b/core/chat/files.go deleted file mode 100644 index 46172217..00000000 --- a/core/chat/files.go +++ /dev/null @@ -1,31 +0,0 @@ -package chat - -import ( - ice "shylinux.com/x/icebergs" - "shylinux.com/x/icebergs/base/cli" - "shylinux.com/x/icebergs/base/mdb" - "shylinux.com/x/icebergs/base/nfs" - "shylinux.com/x/icebergs/base/web" - kit "shylinux.com/x/toolkits" -) - -const FILES = "files" - -func init() { - Index.MergeCommands(ice.Commands{ - FILES: {Name: "files hash auto upload", Help: "文件夹", Actions: ice.MergeActions(ice.Actions{ - web.UPLOAD: {Name: "upload", Help: "上传", Hand: func(m *ice.Message, arg ...string) { - up := web.Upload(m) - mdb.HashCreate(m, mdb.TYPE, kit.Ext(up[1]), mdb.NAME, up[1], nfs.SIZE, up[2], mdb.DATA, up[0]) - }}, - }, mdb.HashAction(mdb.SHORT, mdb.DATA, mdb.FIELD, "time,hash,type,name,size,data")), Hand: func(m *ice.Message, arg ...string) { - mdb.HashSelect(m, arg...).Tables(func(value ice.Maps) { - link := web.SHARE_CACHE + value[mdb.DATA] - if m.PushDownload(mdb.LINK, value[mdb.NAME], link); len(arg) > 0 && kit.ExtIsImage(value[mdb.NAME]) { - m.PushImages("image", link) - } - m.PushQRCode(cli.QRCODE, web.MergeURL2(m, link)) - }).PushAction(mdb.REMOVE) - }}, - }) -} diff --git a/core/chat/grant.go b/core/chat/grant.go index 800c3623..4cf99c2b 100644 --- a/core/chat/grant.go +++ b/core/chat/grant.go @@ -27,10 +27,7 @@ func init() { }) }}, CONFIRM: {Help: "授权", Hand: func(m *ice.Message, arg ...string) { - if m.Warn(m.Option(ice.MSG_USERNAME) == "", ice.ErrNotLogin) { - return - } - if m.Warn(m.Option(web.SPACE) == "", ice.ErrNotValid, web.SPACE) { + if m.Warn(m.Option(ice.MSG_USERNAME) == "", ice.ErrNotLogin) || m.Warn(m.Option(web.SPACE) == "", ice.ErrNotValid, web.SPACE) { return } if msg := m.Cmd(web.SPACE, m.Option(web.SPACE)); m.Warn(msg.Append(mdb.TYPE) != aaa.LOGIN, ice.ErrNotFound, m.Option(web.SPACE)) { diff --git a/core/chat/iframe.go b/core/chat/iframe.go index 197de4c6..6f880e04 100644 --- a/core/chat/iframe.go +++ b/core/chat/iframe.go @@ -2,9 +2,9 @@ package chat import ( ice "shylinux.com/x/icebergs" - "shylinux.com/x/icebergs/base/cli" "shylinux.com/x/icebergs/base/ctx" "shylinux.com/x/icebergs/base/mdb" + "shylinux.com/x/icebergs/base/web" kit "shylinux.com/x/toolkits" ) @@ -13,18 +13,51 @@ const IFRAME = "iframe" func init() { Index.MergeCommands(ice.Commands{ IFRAME: {Name: "iframe hash auto", Help: "浏览器", Actions: ice.MergeActions(ice.Actions{ - mdb.CREATE: {Name: "create link name type", Hand: func(m *ice.Message, arg ...string) { - m.OptionDefault(mdb.NAME, kit.ParseURL(m.Option(mdb.LINK)).Host, mdb.TYPE, mdb.LINK) - mdb.HashCreate(m, m.OptionSimple("link,name,type")) + FAVOR_INPUTS: {Hand: func(m *ice.Message, arg ...string) { + switch arg[0] { + case mdb.TYPE: + m.Push(arg[0], web.LINK) + default: + if m.Option(mdb.TYPE) != web.LINK { + return + } + switch arg[0] { + case mdb.NAME: + m.Push(arg[0], web.OptionUserWeb(m).Host) + case mdb.TEXT: + m.Push(arg[0], m.Option(ice.MSG_USERWEB)) + } + } }}, - }, mdb.HashAction(mdb.SHORT, mdb.LINK, mdb.FIELD, "time,hash,type,name,link")), Hand: func(m *ice.Message, arg ...string) { - if mdb.HashSelect(m, arg...); len(arg) == 0 || arg[0] == "" { - m.Action(mdb.CREATE, mdb.PRUNES) + FAVOR_TABLES: {Hand: func(m *ice.Message, arg ...string) { + switch arg[1] { + case web.LINK: + m.PushButton(IFRAME, web.OPEN, mdb.REMOVE) + } + }}, + FAVOR_ACTION: {Hand: func(m *ice.Message, arg ...string) { + if m.Option(mdb.TYPE) != web.LINK { + return + } + switch kit.Select("", arg, 1) { + case web.OPEN: + ctx.ProcessOpen(m, m.Option(mdb.TEXT)) + default: + ctx.ProcessField(m, "", []string{m.Option(mdb.TEXT)}, arg...) + } + }}, + mdb.CREATE: {Hand: func(m *ice.Message, arg ...string) { + mdb.HashCreate(m, mdb.TYPE, web.LINK, mdb.NAME, kit.ParseURL(m.Option(web.LINK)).Host, m.OptionSimple()) + }}, + web.OPEN: {Hand: func(m *ice.Message, arg ...string) { ctx.ProcessOpen(m, m.Option(web.LINK)) }}, + }, mdb.HashAction(mdb.SHORT, web.LINK, mdb.FIELD, "time,hash,type,name,link"), FavorAction()), Hand: func(m *ice.Message, arg ...string) { + if mdb.HashSelect(m, arg...); len(arg) == 0 { + m.PushAction(web.OPEN, mdb.REMOVE).Action(mdb.CREATE, mdb.PRUNES) } else { if m.Length() == 0 { - m.Append(mdb.LINK, arg[0]) + m.Append(web.LINK, arg[0]) } - m.Action(cli.OPEN).StatusTime(mdb.LINK, m.Append(mdb.LINK)) + m.Action(web.FULL, web.OPEN).StatusTime(m.AppendSimple(web.LINK)) ctx.DisplayLocal(m, "") } }}, diff --git a/core/chat/location.go b/core/chat/location.go index 65dd3ef5..bc4e5631 100644 --- a/core/chat/location.go +++ b/core/chat/location.go @@ -38,6 +38,24 @@ func init() { Index.MergeCommands(ice.Commands{ LOCATION: {Name: "location hash auto", Help: "地理位置", Actions: ice.MergeActions(ice.Actions{ + FAVOR_INPUTS: {Hand: func(m *ice.Message, arg ...string) { + switch arg[0] { + case mdb.TYPE: + m.Push(arg[0], LOCATION) + } + }}, + FAVOR_ACTION: {Hand: func(m *ice.Message, arg ...string) { + if m.Option(mdb.TYPE) != LOCATION { + return + } + ctx.ProcessField(m, "", []string{m.Option(mdb.TEXT)}, arg...) + }}, + FAVOR_TABLES: {Hand: func(m *ice.Message, arg ...string) { + switch arg[1] { + case LOCATION: + m.PushButton(LOCATION, mdb.REMOVE) + } + }}, "explore": {Name: "explore", Help: "周边", Hand: func(m *ice.Message, arg ...string) { m.Echo(get(m, "place/v1/explore", m.OptionSimple("boundary,page_index"))) }}, @@ -53,7 +71,7 @@ func init() { "district": {Name: "district", Help: "地区", Hand: func(m *ice.Message, arg ...string) { m.Echo(get(m, "district/v1/getchildren", m.OptionSimple(mdb.ID))) }}, - }, mdb.HashAction(mdb.FIELD, "time,hash,type,name,text,latitude,longitude,extra"), ctx.CmdAction()), Hand: func(m *ice.Message, arg ...string) { + }, mdb.HashAction(mdb.FIELD, "time,hash,type,name,text,latitude,longitude,extra"), ctx.CmdAction(), FavorAction()), Hand: func(m *ice.Message, arg ...string) { mdb.HashSelect(m, kit.Slice(arg, 0, 1)...) ctx.DisplayLocal(m, "", m.ConfigSimple(aaa.TOKEN)) m.Option(LOCATION, get(m, "location/v1/ip", aaa.IP, m.Option(ice.MSG_USERIP))) diff --git a/core/chat/paste.go b/core/chat/paste.go deleted file mode 100644 index b811753f..00000000 --- a/core/chat/paste.go +++ /dev/null @@ -1,27 +0,0 @@ -package chat - -import ( - ice "shylinux.com/x/icebergs" - "shylinux.com/x/icebergs/base/cli" - "shylinux.com/x/icebergs/base/mdb" - "shylinux.com/x/icebergs/base/ssh" -) - -const PASTE = "paste" - -func init() { - Index.MergeCommands(ice.Commands{ - PASTE: {Name: "paste hash auto getClipboardData", Help: "粘贴", Actions: ice.MergeActions(ice.Actions{ - "getClipboardData": {Name: "getClipboardData", Help: "粘贴", Hand: func(m *ice.Message, arg ...string) { - m.Cmdy(PASTE, mdb.CREATE, arg) - }}, - mdb.CREATE: {Name: "create type=text name=hi text:textarea=hi", Help: "添加"}, - }, mdb.HashAction(mdb.SHORT, mdb.TEXT, mdb.FIELD, "time,hash,type,name,text")), Hand: func(m *ice.Message, arg ...string) { - if mdb.HashSelect(m, arg...); len(arg) > 0 { - m.PushScript(ssh.SCRIPT, m.Append(mdb.TEXT)) - m.PushQRCode(cli.QRCODE, m.Append(mdb.TEXT)) - m.PushAction(mdb.REMOVE) - } - }}, - }) -} diff --git a/core/chat/scan.go b/core/chat/scan.go deleted file mode 100644 index 142d0000..00000000 --- a/core/chat/scan.go +++ /dev/null @@ -1,29 +0,0 @@ -package chat - -import ( - ice "shylinux.com/x/icebergs" - "shylinux.com/x/icebergs/base/cli" - "shylinux.com/x/icebergs/base/mdb" - "shylinux.com/x/icebergs/base/ssh" -) - -const SCAN = "scan" - -func init() { - Index.MergeCommands(ice.Commands{ - SCAN: {Name: "scan hash auto scanQRCode scanQRCode0", Help: "扫码", Actions: ice.MergeActions(ice.Actions{ - "scanQRCode0": {Name: "scan create", Help: "本机扫码"}, - "scanQRCode": {Name: "scan create", Help: "扫码"}, - mdb.CREATE: {Name: "create type=text name=hi text:textarea=hi", Help: "添加"}, - }, mdb.HashAction(mdb.SHORT, mdb.TEXT, mdb.FIELD, "time,hash,type,name,text")), Hand: func(m *ice.Message, arg ...string) { - if mdb.HashSelect(m, arg...); len(arg) > 0 { - if m.Append(mdb.TYPE) == "image" { - m.PushImages("image", m.Append(mdb.TEXT)) - } - m.PushScript(ssh.SCRIPT, m.Append(mdb.TEXT)) - m.PushQRCode(cli.QRCODE, m.Append(mdb.TEXT)) - m.PushAction(mdb.REMOVE) - } - }}, - }) -} diff --git a/misc.go b/misc.go index 862fa340..6a2ea404 100644 --- a/misc.go +++ b/misc.go @@ -282,7 +282,7 @@ func (m *Message) CmdHand(cmd *Command, key string, arg ...string) *Message { } func (c *Context) _command(m *Message, cmd *Command, key string, arg ...string) *Message { key = kit.Slice(strings.Split(key, PT), -1)[0] - if m._key, m._cmd = key, cmd; cmd == nil { + if m._key, m._sub, m._cmd = key, "select", cmd; cmd == nil { return m } diff --git a/misc/mp/login.go b/misc/mp/login.go index e7274988..e7221fd5 100644 --- a/misc/mp/login.go +++ b/misc/mp/login.go @@ -57,12 +57,12 @@ func init() { m.OptionSimple(aaa.CITY, aaa.COUNTRY, aaa.LANGUAGE, aaa.PROVINCE), ) }}, - chat.SCAN: {Name: "scan", Help: "扫码", Hand: func(m *ice.Message, arg ...string) { + "scan": {Name: "scan", Help: "扫码", Hand: func(m *ice.Message, arg ...string) { if m.Option(chat.GRANT) != "" { m.Cmdy(chat.HEADER, chat.GRANT, web.SPACE, m.Option(chat.GRANT)) return } - m.Cmdy(chat.SCAN, arg) + m.Cmdy("scan", arg) }}, }}, LOGIN: {Name: "login appid auto qrcode tokens create", Help: "认证", Actions: ice.Actions{ diff --git a/misc/wx/login.go b/misc/wx/login.go index 5c0b1530..aef35f59 100644 --- a/misc/wx/login.go +++ b/misc/wx/login.go @@ -87,10 +87,10 @@ func init() { "latitude", m.Option("LocationX"), "longitude", m.Option("LocationY"), "scale", m.Option("Scale"), ) case mdb.LINK: // 打卡 - m.Cmdy(chat.SCAN, mdb.CREATE, mdb.TYPE, mdb.LINK, mdb.NAME, m.Option("Title"), mdb.TEXT, m.Option("URL")) + m.Cmdy("scan", mdb.CREATE, mdb.TYPE, mdb.LINK, mdb.NAME, m.Option("Title"), mdb.TEXT, m.Option("URL")) case "image": // 文本 - m.Cmdy(chat.SCAN, mdb.CREATE, mdb.TYPE, wiki.IMAGE, mdb.NAME, m.Option("Title"), mdb.TEXT, m.Option("URL")) + m.Cmdy("scan", mdb.CREATE, mdb.TYPE, wiki.IMAGE, mdb.NAME, m.Option("Title"), mdb.TEXT, m.Option("URL")) case TEXT: // 文本 if cmds := kit.Split(m.Option("Content")); aaa.Right(m, cmds) { diff --git a/option.go b/option.go index 4ffae62d..ea3acb96 100644 --- a/option.go +++ b/option.go @@ -35,6 +35,19 @@ func (m *Message) OptionDefault(arg ...string) string { return m.Option(arg[0]) } func (m *Message) OptionSimple(key ...string) (res []string) { + if len(key) == 0 { + for _, k := range kit.Split(m.Config(FIELD)) { + switch k { + case "", TIME, HASH: + continue + } + if m.Option(k) == "" { + continue + } + res = append(res, k, m.Option(k)) + } + return + } for _, k := range kit.Split(kit.Join(key)) { if k == "" || m.Option(k) == "" { continue diff --git a/render.go b/render.go index 7c3b8277..f6b76266 100644 --- a/render.go +++ b/render.go @@ -21,6 +21,9 @@ func Render(m *Message, cmd string, args ...Any) string { return kit.Format(`%s`, p, arg[0]) case RENDER_BUTTON: // name... + if strings.HasPrefix(kit.Join(arg), "`, k, @@ -29,6 +32,9 @@ func Render(m *Message, cmd string, args ...Any) string { return strings.Join(list, "") case RENDER_IMAGES: // src [height] + if m.Option("height") != "" && m.Option("width") != "" { + return kit.Format(``, arg[0], m.Option("height"), m.Option("width")) + } if strings.Contains(m.Option(MSG_USERUA), "Mobile") { return kit.Format(``, arg[0], kit.Int(kit.Select(kit.Select("120", m.Option("width")), arg, 1))-24) }