From 16618a388f04823a8fd04279f256a1d7e7c04f6a Mon Sep 17 00:00:00 2001 From: shylinux Date: Thu, 15 Dec 2022 22:04:21 +0800 Subject: [PATCH] opt lark --- misc/coder/server.go | 3 +- misc/java/spring.go | 10 +++--- misc/lark/app.go | 28 +++++----------- misc/lark/company.go | 28 +++++----------- misc/lark/employee.go | 19 ++++------- misc/lark/event.go | 14 +++----- misc/lark/group.go | 27 +++++---------- misc/lark/home.go | 12 +++---- misc/lark/msg.go | 14 +++----- misc/lark/rand.go | 7 ++-- misc/lark/send.go | 5 +-- misc/lark/sso.go | 33 +++++------------- misc/lark/talk.go | 19 +++-------- misc/mp/login.go | 53 +++++++++-------------------- misc/mp/mp.shy | 5 --- misc/wx/access.go | 35 +++++++------------ misc/wx/event.go | 7 ++-- misc/wx/favor.go | 15 +++------ misc/wx/login.go | 78 +++++++++++++++++-------------------------- misc/wx/menu.go | 23 ++++--------- misc/wx/text.go | 23 +++++-------- misc/wx/wx.shy | 6 ---- 22 files changed, 152 insertions(+), 312 deletions(-) diff --git a/misc/coder/server.go b/misc/coder/server.go index d3de949f..6a346d98 100644 --- a/misc/coder/server.go +++ b/misc/coder/server.go @@ -24,7 +24,8 @@ type server struct { func (s server) Search(m *ice.Message, arg ...string) { if arg[0] == mdb.FOREACH && arg[1] == "" { - s.List(m.Spawn(kit.Dict(ice.MSG_FIELDS, "time,port,status,pid,cmd,dir"))).Tables(func(value ice.Maps) { + s.Code.List(m.Spawn(kit.Dict(ice.MSG_FIELDS, "time,port,status,pid,cmd,dir")), "") + m.Tables(func(value ice.Maps) { m.PushSearch(mdb.TYPE, value[cli.STATUS], mdb.NAME, value[nfs.PATH], mdb.TEXT, value[mdb.LINK]) }) } diff --git a/misc/java/spring.go b/misc/java/spring.go index ac6050ed..13ee43e1 100644 --- a/misc/java/spring.go +++ b/misc/java/spring.go @@ -1,12 +1,12 @@ package java import ( - "path" "strings" "shylinux.com/x/ice" "shylinux.com/x/icebergs/base/cli" "shylinux.com/x/icebergs/base/mdb" + "shylinux.com/x/icebergs/base/nfs" kit "shylinux.com/x/toolkits" ) @@ -14,18 +14,18 @@ type spring struct { ice.Code linux string `data:"https://mirrors.tencent.com/macports/distfiles/spring-boot-cli/spring-boot-cli-2.7.0-bin.tar.gz"` ice.Hash - short string `data:"name"` - field string `data:"time,name,path"` + short string `data:"name"` + field string `data:"time,name,path"` create string `name:"create name path"` start string `name:"start server.port"` - list string `name:"list name auto create order install" help:"服务框架"` + list string `name:"list name auto create order install" help:"服务框架"` } func (s spring) Build(m *ice.Message) { s.Code.Stream(m, m.Option(nfs.PATH), MVN, "package") } func (s spring) Start(m *ice.Message, arg ...string) { - s.Code.Daemon(m, m.Option(nfs.PATH), kit.Simple(JAVA, kit.Simple(arg, func(k, v string) string { return "-D"+k+ice.EQ+v }), + s.Code.Daemon(m, m.Option(nfs.PATH), kit.Simple(JAVA, kit.Simple(arg, func(k, v string) string { return "-D" + k + ice.EQ + v }), "-jar", kit.Format("target/%s-0.0.1-SNAPSHOT.jar", m.Option(mdb.NAME)))...) } func (s spring) List(m *ice.Message, arg ...string) { diff --git a/misc/lark/app.go b/misc/lark/app.go index ce3a8fa5..c9414a24 100644 --- a/misc/lark/app.go +++ b/misc/lark/app.go @@ -22,30 +22,20 @@ const APP = "app" func init() { Index.MergeCommands(ice.Commands{ APP: {Name: "app appid auto token login", Help: "应用", Actions: ice.MergeActions(ice.Actions{ - ice.CTX_INIT: {Hand: func(m *ice.Message, arg ...string) { - m.Cmd(web.SPIDE, mdb.CREATE, LARK, m.Config(tcp.SERVER)) + ice.CTX_INIT: {Hand: func(m *ice.Message, arg ...string) { m.Cmd(web.SPIDE, mdb.CREATE, LARK, m.Config(tcp.SERVER)) }}, + LOGIN: {Name: "login appid* appmm* duty", Help: "登录", Hand: func(m *ice.Message, arg ...string) { + mdb.HashCreate(m, m.OptionSimple(APPID, APPMM, DUTY)) }}, - LOGIN: {Name: "login appid appmm duty", Help: "登录", Hand: func(m *ice.Message, arg ...string) { - m.Cmdy(mdb.INSERT, m.PrefixKey(), "", mdb.HASH, m.OptionSimple(APPID, APPMM, DUTY)) - }}, - TOKEN: {Name: "token appid", Help: "令牌", Hand: func(m *ice.Message, arg ...string) { + TOKEN: {Name: "token appid*", Help: "令牌", Hand: func(m *ice.Message, arg ...string) { msg := m.Cmd(APP, m.Option(APPID)) if now := time.Now().Unix(); msg.Append(TOKEN) == "" || now > kit.Int64(msg.Append(EXPIRE)) { - res := m.Cmd(web.SPIDE, LARK, "/open-apis/auth/v3/tenant_access_token/internal/", - APP_ID, msg.Append(APPID), "app_secret", msg.Append(APPMM)) - - m.Cmd(mdb.MODIFY, m.PrefixKey(), "", mdb.HASH, m.OptionSimple(APPID), - TOKEN, res.Append("tenant_access_token"), EXPIRE, now+kit.Int64(res.Append(EXPIRE))) + res := m.Cmd(web.SPIDE, LARK, "/open-apis/auth/v3/tenant_access_token/internal/", APP_ID, msg.AppendSimple(APPID), "app_secret", msg.Append(APPMM)) + mdb.HashModify(m, m.OptionSimple(APPID), TOKEN, res.Append("tenant_access_token"), EXPIRE, now+kit.Int64(res.Append(EXPIRE))) m.Echo(res.Append("tenant_access_token")) - return + } else { + m.Echo(msg.Append(TOKEN)) } - m.Echo(msg.Append(TOKEN)) }}, - }, mdb.HashAction( - mdb.SHORT, APPID, mdb.FIELD, "time,appid,duty,token,expire", - tcp.SERVER, "https://open.feishu.cn/", - )), Hand: func(m *ice.Message, arg ...string) { - mdb.HashSelect(m, arg...) - }}, + }, mdb.HashAction(mdb.SHORT, APPID, mdb.FIELD, "time,appid,duty,token,expire", tcp.SERVER, "https://open.feishu.cn/"))}, }) } diff --git a/misc/lark/company.go b/misc/lark/company.go index ca0a652e..8b7422e4 100644 --- a/misc/lark/company.go +++ b/misc/lark/company.go @@ -9,7 +9,6 @@ import ( func _company_list(m *ice.Message, appid string) { _, data := _lark_get(m, appid, "/open-apis/contact/v1/scope/get/") - kit.Fetch(kit.Value(data, "data.authed_departments"), func(index int, ship_id string) { _, data := _lark_get(m, appid, "/open-apis/contact/v1/department/detail/batch_get", "department_ids", ship_id) kit.Fetch(kit.Value(data, "data.department_infos"), func(index int, value ice.Map) { @@ -22,9 +21,7 @@ func _company_list(m *ice.Message, appid string) { m.Sort(mdb.NAME) } func _company_members(m *ice.Message, appid string, ship_id string) { - _, data := _lark_get(m, appid, "/open-apis/contact/v1/department/user/list", - "department_id", ship_id, "page_size", "100", "fetch_child", ice.TRUE) - + _, data := _lark_get(m, appid, "/open-apis/contact/v1/department/user/list", "department_id", ship_id, "page_size", "100", "fetch_child", ice.TRUE) kit.Fetch(kit.Value(data, "data.user_list"), func(index int, value ice.Map) { msg := m.Cmd(EMPLOYEE, appid, value[OPEN_ID]) m.PushImages(aaa.AVATAR, msg.Append("avatar_72")) @@ -41,22 +38,13 @@ const COMPANY = "company" func init() { Index.MergeCommands(ice.Commands{ COMPANY: {Name: "company appid ship_id open_id text auto", Help: "组织", Hand: func(m *ice.Message, arg ...string) { - switch len(arg) { - case 0: // 应用列表 - m.Cmdy(APP) - - case 1: // 组织列表 - _company_list(m, arg[0]) - - case 2: // 员工列表 - _company_members(m, arg[0], arg[1]) - - case 3: // 员工详情 - m.Cmdy(EMPLOYEE, arg[0], arg[2]) - - default: // 员工通知 - m.Cmdy(SEND, arg[0], OPEN_ID, arg[2], arg[3:]) - } + kit.Switch(len(arg), + 0, func() { m.Cmdy(APP) }, + 1, func() { _company_list(m, arg[0]) }, + 2, func() { _company_members(m, arg[0], arg[1]) }, + 3, func() { m.Cmdy(EMPLOYEE, arg[0], arg[2]) }, + func() { m.Cmdy(SEND, arg[0], OPEN_ID, arg[2], arg[3:]) }, + ) }}, }) } diff --git a/misc/lark/employee.go b/misc/lark/employee.go index ebdced00..610ed811 100644 --- a/misc/lark/employee.go +++ b/misc/lark/employee.go @@ -4,25 +4,21 @@ import ( "strings" ice "shylinux.com/x/icebergs" - "shylinux.com/x/icebergs/base/mdb" kit "shylinux.com/x/toolkits" ) func _employee_info(m *ice.Message, appid string, arg ...string) { - for _, id := range arg { + kit.For(arg, func(id string) { _, data := _lark_get(m, appid, "/open-apis/contact/v1/user/batch_get", "open_ids", id) - kit.Fetch(kit.Value(data, "data.user_infos"), func(index int, value ice.Map) { - m.Push(mdb.DETAIL, value) - }) - } + kit.For(kit.Value(data, "data.user_infos"), func(value ice.Map) { m.PushDetail(value) }) + }) } func _employee_openid(m *ice.Message, appid string, arg ...string) { - us := []string{} + args := []string{} for i := 0; i < len(arg); i++ { - us = append(us, kit.Select("mobiles", "emails", strings.Contains(arg[i], "@")), arg[i]) + args = append(args, kit.Select("mobiles", "emails", strings.Contains(arg[i], "@")), arg[i]) } - - _lark_get(m, appid, "/open-apis/user/v1/batch_get_id", us) + _lark_get(m, appid, "/open-apis/user/v1/batch_get_id", args) for i := 0; i < len(arg); i++ { m.Echo(m.Append(kit.Keys("data.mobile_users", arg[i], "0.open_id"))) } @@ -35,8 +31,7 @@ func init() { EMPLOYEE: {Name: "employee appid open_id|mobile|email auto", Help: "员工", Hand: func(m *ice.Message, arg ...string) { if len(arg) < 2 { return - } - if strings.HasPrefix(arg[1], "ou_") { + } else if strings.HasPrefix(arg[1], "ou_") { _employee_info(m, arg[0], arg[1:]...) } else { _employee_openid(m, arg[0], arg[1:]...) diff --git a/misc/lark/event.go b/misc/lark/event.go index 00097741..452beec1 100644 --- a/misc/lark/event.go +++ b/misc/lark/event.go @@ -19,22 +19,18 @@ const EVENT = "event" func init() { Index.MergeCommands(ice.Commands{ EVENT: {Name: "event", Help: "事件", Actions: ice.Actions{ - P2P_CHAT_CREATE: {Name: "", Help: "", Hand: func(m *ice.Message, arg ...string) { + P2P_CHAT_CREATE: {Hand: func(m *ice.Message, arg ...string) { if m.Option(OPEN_CHAT_ID) != "" { m.Cmdy(SEND, m.Option(APP_ID), m.Option(OPEN_CHAT_ID), m.Conf(APP, kit.Keym(nfs.TEMPLATE, m.Option(mdb.TYPE)))) } }}, - MESSAGE_READ: {Name: "", Help: "", Hand: func(m *ice.Message, arg ...string) { - }}, - CHAT_DISBAND: {Name: "", Help: "", Hand: func(m *ice.Message, arg ...string) { - }}, - ADD_BOT: {Name: "", Help: "", Hand: func(m *ice.Message, arg ...string) { + MESSAGE_READ: {Hand: func(m *ice.Message, arg ...string) {}}, + CHAT_DISBAND: {Hand: func(m *ice.Message, arg ...string) {}}, + ADD_BOT: {Hand: func(m *ice.Message, arg ...string) { if m.Option(OPEN_CHAT_ID) != "" { m.Cmdy(SEND, m.Option(APP_ID), m.Option(OPEN_CHAT_ID), m.Conf(APP, kit.Keym(nfs.TEMPLATE, m.Option(mdb.TYPE)))) } }}, - }, Hand: func(m *ice.Message, arg ...string) { - m.Cmdy(MSG, m.Option(MSG_TYPE)) - }}, + }, Hand: func(m *ice.Message, arg ...string) { m.Cmdy(MSG, m.Option(MSG_TYPE)) }}, }) } diff --git a/misc/lark/group.go b/misc/lark/group.go index 8c04bae2..399753ba 100644 --- a/misc/lark/group.go +++ b/misc/lark/group.go @@ -9,7 +9,7 @@ import ( func _group_list(m *ice.Message, appid string) { _, data := _lark_get(m, appid, "/open-apis/chat/v4/list") - kit.Fetch(kit.Value(data, "data.groups"), func(index int, value ice.Map) { + kit.For(kit.Value(data, "data.groups"), func(index int, value ice.Map) { m.Push(CHAT_ID, value[CHAT_ID]) m.PushImages(aaa.AVATAR, kit.Format(value[aaa.AVATAR])) m.Push(mdb.NAME, value[mdb.NAME]) @@ -20,7 +20,7 @@ func _group_list(m *ice.Message, appid string) { } func _group_members(m *ice.Message, appid string, chat_id string) { _, data := _lark_get(m, appid, "/open-apis/chat/v4/info", "chat_id", chat_id) - kit.Fetch(kit.Value(data, "data.members"), func(index int, value ice.Map) { + kit.For(kit.Value(data, "data.members"), func(index int, value ice.Map) { msg := m.Cmd(EMPLOYEE, appid, value[OPEN_ID]) m.PushImages(aaa.AVATAR, msg.Append("avatar_72")) m.Push(aaa.GENDER, kit.Select("女", "男", msg.Append(aaa.GENDER) == "1")) @@ -36,22 +36,13 @@ const GROUP = "group" func init() { Index.MergeCommands(ice.Commands{ GROUP: {Name: "group appid chat_id open_id text auto", Help: "群组", Hand: func(m *ice.Message, arg ...string) { - switch len(arg) { - case 0: // 应用列表 - m.Cmdy(APP) - - case 1: // 群组列表 - _group_list(m, arg[0]) - - case 2: // 组员列表 - _group_members(m, arg[0], arg[1]) - - case 3: // 组员详情 - m.Cmdy(EMPLOYEE, arg[0], arg[2]) - - default: // 组员通知 - m.Cmdy(SEND, arg[0], OPEN_ID, arg[2], arg[3:]) - } + kit.Switch(len(arg), + 0, func() { m.Cmdy(APP) }, + 1, func() { _group_list(m, arg[0]) }, + 2, func() { _group_members(m, arg[0], arg[1]) }, + 3, func() { m.Cmdy(EMPLOYEE, arg[0], arg[2]) }, + func() { m.Cmdy(SEND, arg[0], OPEN_ID, arg[2], arg[3:]) }, + ) }}, }) } diff --git a/misc/lark/home.go b/misc/lark/home.go index c65ceaf1..caa2601b 100644 --- a/misc/lark/home.go +++ b/misc/lark/home.go @@ -14,22 +14,18 @@ func init() { Index.MergeCommands(ice.Commands{ HOME: {Name: "home river storm title content", Help: "首页", Hand: func(m *ice.Message, arg ...string) { name := kit.Select(m.Option(ice.MSG_USERNAME), m.Option(ice.MSG_USERNICK)) - if len(name) > 10 { - name = name[:10] - } + kit.If(len(name) > 10, func() { name = name[:10] }) name += "的" + kit.Select("应用列表", arg, 2) - - text, link, list := kit.Select("", arg, 3), kit.MergeURL2(m.Conf(web.SHARE, kit.Keym("domain")), "/chat/lark/sso"), []string{} + text, link, list := kit.Select("", arg, 3), kit.MergeURL2(m.Conf(web.SHARE, kit.Keym(web.DOMAIN)), "/chat/lark/sso"), []string{} if len(arg) == 0 { m.Cmd("web.chat./river", func(val ice.Maps) { m.Cmd("web.chat./river", val[mdb.HASH], chat.STORM, func(value ice.Maps) { list = append(list, kit.Keys(val[mdb.NAME], value[mdb.NAME]), - ice.CMD, kit.Format([]string{HOME, val[mdb.HASH], value[mdb.HASH], val[mdb.NAME] + "." + value[mdb.NAME]})) + ice.CMD, kit.Format([]string{HOME, val[mdb.HASH], value[mdb.HASH], val[mdb.NAME] + ice.PT + value[mdb.NAME]})) }) }) } else { - m.Option(ice.MSG_RIVER, arg[0]) - m.Option(ice.MSG_STORM, arg[1]) + m.Options(ice.MSG_RIVER, arg[0], ice.MSG_STORM, arg[1]) link = kit.MergeURL(link, chat.RIVER, arg[0], chat.STORM, arg[1]) m.Cmd("web.chat./river", arg[0], chat.STORM, arg[1], func(value ice.Maps) { list = append(list, value[ice.CMD], ice.CMD, kit.Keys(value[ice.CTX], value[ice.CMD])) diff --git a/misc/lark/msg.go b/misc/lark/msg.go index c10c65e3..0c62800f 100644 --- a/misc/lark/msg.go +++ b/misc/lark/msg.go @@ -82,16 +82,12 @@ func init() { } }}, MSG: {Name: "msg", Help: "聊天消息", Actions: ice.Actions{ - "location": {Name: "", Help: "", Hand: func(m *ice.Message, arg ...string) { - }}, - "image": {Name: "", Help: "", Hand: func(m *ice.Message, arg ...string) { - }}, - "card": {Name: "", Help: "", Hand: func(m *ice.Message, arg ...string) { - data := m.Optionv(ice.MSG_USERDATA) - kit.Fetch(kit.Value(data, "action.value"), func(key string, value string) { m.Option(key, value) }) + "location": {Hand: func(m *ice.Message, arg ...string) {}}, + "image": {Hand: func(m *ice.Message, arg ...string) {}}, + "card": {Hand: func(m *ice.Message, arg ...string) { + kit.For(kit.Value(m.Optionv(ice.MSG_USERDATA), "action.value"), func(k string, v string) { m.Option(k, v) }) m.Cmdy(TALK, kit.Parse(nil, "", kit.Split(m.Option(ice.CMD))...)) - m.Cmd(SEND, m.Option(APP_ID), CHAT_ID, m.Option(OPEN_CHAT_ID), - m.Option(wiki.TITLE)+" "+m.Option(ice.CMD), m.Result()) + m.Cmd(SEND, m.Option(APP_ID), CHAT_ID, m.Option(OPEN_CHAT_ID), m.Option(wiki.TITLE)+ice.SP+m.Option(ice.CMD), m.Result()) }}, }, Hand: func(m *ice.Message, arg ...string) { if m.Option(OPEN_CHAT_ID) == "" { diff --git a/misc/lark/rand.go b/misc/lark/rand.go index 4f62fb6b..8fed3f6a 100644 --- a/misc/lark/rand.go +++ b/misc/lark/rand.go @@ -14,12 +14,11 @@ func init() { Index.MergeCommands(ice.Commands{ RAND: {Name: "rand", Help: "随机", Hand: func(m *ice.Message, arg ...string) { msg := m.Cmd(GROUP, m.Option(APP_ID), EMPLOYEE, m.Option(OPEN_CHAT_ID)) - list := msg.Appendv(mdb.NAME) - if strings.Contains(m.Option(CONTENT), "誰") { + if list := msg.Appendv(mdb.NAME); strings.Contains(m.Option(CONTENT), "誰") { m.Echo(strings.Replace(m.Option(CONTENT), "誰", list[rand.Intn(len(list))], 1)) - return + } else { + m.Echo(list[rand.Intn(len(list))]) } - m.Echo(list[rand.Intn(len(list))]) }}, }) } diff --git a/misc/lark/send.go b/misc/lark/send.go index 26ad1c4d..bd99fdf8 100644 --- a/misc/lark/send.go +++ b/misc/lark/send.go @@ -33,7 +33,6 @@ func _send_text(m *ice.Message, form ice.Map, arg ...string) bool { line = append(line, ice.Map{"tag": "text", "text": v + " "}) } content = append(content, line) - kit.Value(form, "msg_type", "post") kit.Value(form, "content.post", ice.Map{ "zh_cn": ice.Map{"title": arg[0], CONTENT: content}, @@ -58,11 +57,9 @@ func init() { default: form[CHAT_ID], arg = arg[0], arg[1:] } - if _send_text(m, form, arg...) { msg := _lark_post(m, appid, "/open-apis/message/v4/send/", web.SPIDE_DATA, kit.Format(form)) - m.Push(mdb.TIME, m.Time()) - m.Push("message_id", msg.Append("data.message_id")) + m.Push(mdb.TIME, m.Time()).Push("message_id", msg.Append("data.message_id")) } }}, }) diff --git a/misc/lark/sso.go b/misc/lark/sso.go index 3c7a88ac..ba7b5337 100644 --- a/misc/lark/sso.go +++ b/misc/lark/sso.go @@ -13,40 +13,25 @@ const SSO = "sso" func init() { Index.MergeCommands(ice.Commands{ - "/sso": {Name: "/sso", Help: "网页", Hand: func(m *ice.Message, arg ...string) { - if m.Option(ice.MSG_USERNAME) != "" { // 默认主页 + web.P(SSO): {Hand: func(m *ice.Message, arg ...string) { + if m.Option(ice.MSG_USERNAME) != "" { web.RenderIndex(m, ice.VOLCANOS) return } - appid := m.Cmd(APP).Append(APPID) home := web.MergeURL2(m, "/chat/lark/sso") - if m.Option(cli.CODE) == "" { // 登录页面 - if back := m.R.Header.Get("Referer"); back != "" { - home = kit.MergeURL(home, cli.BACK, back) - } + if m.Option(cli.CODE) == "" { m.RenderRedirect(kit.MergeURL2(m.Cmd(web.SPIDE, LARK).Append("client.url"), "/open-apis/authen/v1/index"), - "redirect_uri", home, APP_ID, m.Cmd(APP).Append(APPID)) + "redirect_uri", kit.MergeURL(home, cli.BACK, m.R.Header.Get("Referer")), APP_ID, appid) return } - msg := m.Cmd(web.SPIDE, LARK, "/open-apis/authen/v1/access_token", "grant_type", "authorization_code", cli.CODE, m.Option(cli.CODE), "app_access_token", m.Cmdx(APP, TOKEN, appid)) - - // 更新用户 - m.Option(aaa.USERNAME, msg.Append("data.open_id")) - msg = m.Cmd(EMPLOYEE, appid, m.Option(aaa.USERNAME)) - userrole := kit.Select(aaa.VOID, aaa.TECH, msg.Append("is_tenant_manager") == ice.TRUE) - m.Cmd(aaa.USER, mdb.CREATE, m.Option(aaa.USERNAME), "", userrole) - m.Cmd(aaa.USER, mdb.MODIFY, aaa.USERROLE, userrole, - aaa.USERNICK, msg.Append(mdb.NAME), aaa.USERZONE, LARK, - aaa.AVATAR, msg.Append("avatar_url"), aaa.GENDER, kit.Select("女", "男", msg.Append(aaa.GENDER) == "1"), - msg.AppendSimple(aaa.MOBILE, aaa.EMAIL, aaa.CITY, aaa.COUNTRY), - ) - - // 创建会话 - // web.RenderCookie(m, aaa.SessCreate(m, m.Option(aaa.USERNAME)), web.CookieName(m.Option(cli.BACK))) - m.RenderRedirect(kit.MergeURL(kit.Select(home, m.Option(cli.BACK)), "sessid", aaa.SessCreate(m, m.Option(aaa.USERNAME)))) + msg = m.Cmd(EMPLOYEE, appid, m.Option(aaa.USERNAME, msg.Append("data.open_id"))) + m.Cmd(aaa.USER, mdb.CREATE, m.Option(aaa.USERNAME), "", msg.Append(mdb.NAME), LARK, kit.Select(aaa.VOID, aaa.TECH, msg.Append("is_tenant_manager") == ice.TRUE)) + m.Cmd(aaa.USER, mdb.MODIFY, aaa.AVATAR, msg.Append("avatar_url"), aaa.GENDER, kit.Select("女", "男", msg.Append(aaa.GENDER) == "1"), + msg.AppendSimple(aaa.MOBILE, aaa.EMAIL, aaa.CITY, aaa.COUNTRY)) + m.RenderRedirect(kit.MergeURL(kit.Select(home, m.Option(cli.BACK)), ice.MSG_SESSID, aaa.SessCreate(m, m.Option(aaa.USERNAME)))) }}, }) } diff --git a/misc/lark/talk.go b/misc/lark/talk.go index 4213cedb..fb58e5d1 100644 --- a/misc/lark/talk.go +++ b/misc/lark/talk.go @@ -20,37 +20,28 @@ func init() { if aaa.UserLogin(m, m.Option(OPEN_CHAT_ID), ""); !aaa.Right(m, cmds) { m.Cmd(DUTY, m.Option(OPEN_CHAT_ID), m.Option("text_without_at_bot")) m.Cmd(HOME) - return // 没有权限 + return } } - - // 执行命令 if m.Cmdy(cmds); m.Result() != "" && m.Result(1) != ice.ErrNotFound { m.Cmd(SEND, m.Option(APP_ID), m.Option(OPEN_CHAT_ID), m.Result()) return - } - if m.Length() == 0 { + } else if m.Length() == 0 { m.Set(ice.MSG_RESULT) m.Cmdy(cli.SYSTEM, cmds) m.Cmd(SEND, m.Option(APP_ID), m.Option(OPEN_CHAT_ID), m.Result()) return } - val := []string{} m.Table(func(index int, value ice.Maps, head []string) { - for _, key := range head { - val = append(val, kit.Format("%s:\t%s", key, value[key])) - } - val = append(val, "\n") + kit.For(head, func(k string) { val = append(val, kit.Format("%s:\t%s", k, value[k])) }) + val = append(val, ice.NL) }) - _lark_post(m, m.Option(APP_ID), "/open-apis/message/v4/send/", web.SPIDE_DATA, kit.Formats( kit.Dict("msg_type", "interactive", "chat_id", m.Option(OPEN_CHAT_ID), "card", kit.Dict( "header", kit.Dict("title", kit.Dict("tag", "lark_md", "content", strings.Join(cmds, " "))), "elements", []ice.Any{kit.Dict("tag", "div", "fields", []ice.Any{ - kit.Dict("is_short", true, "text", kit.Dict( - "tag", "lark_md", "content", strings.Join(val, "\n"), - )), + kit.Dict("is_short", true, "text", kit.Dict("tag", "lark_md", "content", strings.Join(val, ice.NL))), })}, )), )) diff --git a/misc/mp/login.go b/misc/mp/login.go index 6a59372f..19a7de8d 100644 --- a/misc/mp/login.go +++ b/misc/mp/login.go @@ -12,7 +12,6 @@ import ( "shylinux.com/x/icebergs/base/mdb" "shylinux.com/x/icebergs/base/tcp" "shylinux.com/x/icebergs/base/web" - "shylinux.com/x/icebergs/core/chat" kit "shylinux.com/x/toolkits" ) @@ -32,65 +31,43 @@ const ( const LOGIN = "login" func init() { - Index.Merge(&ice.Context{Configs: ice.Configs{ - LOGIN: {Name: LOGIN, Help: "认证", Value: kit.Data(tcp.SERVER, "https://api.weixin.qq.com")}, - }, Commands: ice.Commands{ - "/login/": {Name: "/login/", Help: "认证", Actions: ice.Actions{ - ice.CTX_INIT: {Hand: func(m *ice.Message, arg ...string) { - m.Cmd(web.SPIDE, mdb.CREATE, MP, m.Config(tcp.SERVER)) - }}, + Index.MergeCommands(ice.Commands{ + web.PP(LOGIN): {Actions: ice.MergeActions(ice.Actions{ + ice.CTX_INIT: {Hand: func(m *ice.Message, arg ...string) { m.Cmd(web.SPIDE, mdb.CREATE, MP, m.Config(tcp.SERVER)) }}, aaa.SESS: {Name: "sess code", Help: "会话", Hand: func(m *ice.Message, arg ...string) { - msg := m.Cmd(web.SPIDE, MP, http.MethodGet, "/sns/jscode2session?grant_type=authorization_code", - "js_code", m.Option(cli.CODE), APPID, m.Config(APPID), "secret", m.Config(APPMM)) - - // 用户登录 + msg := m.Cmd(web.SPIDE, MP, http.MethodGet, "/sns/jscode2session?grant_type=authorization_code", "js_code", m.Option(cli.CODE), APPID, m.Config(APPID), "secret", m.Config(APPMM)) m.Option(ice.MSG_USERZONE, MP) m.Echo(aaa.SessCreate(msg, msg.Append(OPENID))) }}, - aaa.USER: {Name: "user", Help: "用户", Hand: func(m *ice.Message, arg ...string) { - m.Option(aaa.USERNAME, m.Option(ice.MSG_USERNAME)) - if m.Cmd(aaa.USER, m.Option(aaa.USERNAME)).Length() == 0 { + aaa.USER: {Help: "用户", Hand: func(m *ice.Message, arg ...string) { + if m.Cmd(aaa.USER, m.Option(aaa.USERNAME, m.Option(ice.MSG_USERNAME))).Length() == 0 { m.Cmd(aaa.USER, mdb.CREATE, m.OptionSimple(aaa.USERNAME)) } - m.Cmd(aaa.USER, mdb.MODIFY, - aaa.USERNICK, m.Option("nickName"), aaa.USERZONE, MP, + m.Cmd(aaa.USER, mdb.MODIFY, aaa.USERNICK, m.Option("nickName"), aaa.USERZONE, MP, aaa.AVATAR, m.Option("avatarUrl"), aaa.GENDER, kit.Select("女", "男", m.Option(aaa.GENDER) == "1"), m.OptionSimple(aaa.CITY, aaa.COUNTRY, aaa.LANGUAGE, aaa.PROVINCE), ) }}, - "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("scan", arg) - }}, - }}, + }, ctx.ConfAction(tcp.SERVER, "https://api.weixin.qq.com"), aaa.WhiteAction(aaa.SESS, aaa.USER))}, LOGIN: {Name: "login appid auto qrcode tokens create", Help: "认证", Actions: ice.Actions{ mdb.CREATE: {Name: "create appid appmm", Help: "登录", Hand: func(m *ice.Message, arg ...string) { ctx.ConfigFromOption(m, APPID, APPMM) }}, - TOKENS: {Name: "tokens", Help: "令牌", Hand: func(m *ice.Message, arg ...string) { + TOKENS: {Help: "令牌", Hand: func(m *ice.Message, arg ...string) { if now := time.Now().Unix(); m.Config(TOKENS) == "" || now > kit.Int64(m.Config(EXPIRES)) { - msg := m.Cmd(web.SPIDE, MP, http.MethodGet, "/cgi-bin/token?grant_type=client_credential", - APPID, m.Config(APPID), "secret", m.Config(APPMM)) + msg := m.Cmd(web.SPIDE, MP, http.MethodGet, "/cgi-bin/token?grant_type=client_credential", APPID, m.Config(APPID), "secret", m.Config(APPMM)) if m.Warn(msg.Append(ERRCODE) != "", msg.Append(ERRCODE), msg.Append(ERRMSG)) { return } - m.Config(EXPIRES, now+kit.Int64(msg.Append("expires_in"))) m.Config(TOKENS, msg.Append("access_token")) } - m.Echo(m.Config(TOKENS)) + m.Echo(m.Config(TOKENS)).Status(EXPIRES, time.Unix(kit.Int64(m.Config(EXPIRES)), 0).Format(ice.MOD_TIME)) }}, QRCODE: {Name: "qrcode path scene", Help: "扫码", Hand: func(m *ice.Message, arg ...string) { - msg := m.Cmd(web.SPIDE, MP, http.MethodPost, "/wxa/getwxacodeunlimit?access_token="+m.Cmdx(LOGIN, TOKENS), - m.OptionSimple("path,scene")) - m.Echo(kit.Format(``, base64.StdEncoding.EncodeToString([]byte(msg.Result())), "some")) - m.ProcessInner() + msg := m.Cmd(web.SPIDE, MP, http.MethodPost, "/wxa/getwxacodeunlimit?access_token="+m.Cmdx(LOGIN, TOKENS), m.OptionSimple("path,scene")) + m.Echo(kit.Format(``, base64.StdEncoding.EncodeToString([]byte(msg.Result())), "some")).ProcessInner() }}, - }, Hand: func(m *ice.Message, arg ...string) { - m.Echo(m.Config(APPID)) - }}, - }}) + }, Hand: func(m *ice.Message, arg ...string) { m.Echo(m.Config(APPID)) }}, + }) } diff --git a/misc/mp/mp.shy b/misc/mp/mp.shy index 10c69d86..2777bc86 100644 --- a/misc/mp/mp.shy +++ b/misc/mp/mp.shy @@ -8,10 +8,6 @@ qrcode `https://mp.weixin.qq.com/a/~HkylKD4DZShrgSm5GuXWLQ~~` chapter "应用" field "认证" web.chat.mp.login - -field "扫码" web.chat.scan -field "复制" web.chat.paste -field "文件" web.chat.files field "位置" web.chat.location chapter "权限" @@ -23,4 +19,3 @@ chapter "项目" field "源代码" web.code.inner args `usr/icebergs/ misc/mp/login.go` field "趋势图" web.code.git.trend args `icebergs` field "架构图" web.code.git.spide args `icebergs` - diff --git a/misc/wx/access.go b/misc/wx/access.go index bcc4d15d..73362cc4 100644 --- a/misc/wx/access.go +++ b/misc/wx/access.go @@ -18,29 +18,22 @@ import ( ) func _wx_sign(m *ice.Message, nonce, stamp string) string { - text := kit.Join(kit.Sort(kit.Simple( + return kit.Format(sha1.Sum([]byte(kit.Join(kit.Sort(kit.Simple( kit.Format("jsapi_ticket=%s", m.Cmdx(ACCESS, TICKET)), kit.Format("url=%s", m.Option(ice.MSG_USERWEB)), kit.Format("timestamp=%s", stamp), kit.Format("noncestr=%s", nonce), - )), "&") - return kit.Format(sha1.Sum([]byte(text))) + )), "&")))) } func _wx_config(m *ice.Message, nonce string) { - m.Option(APPID, m.Config(APPID)) - m.Option(nfs.SCRIPT, m.Config(nfs.SCRIPT)) m.Option("signature", _wx_sign(m, m.Option("noncestr", nonce), m.Option("timestamp", kit.Format(time.Now().Unix())))) + m.OptionFromConfig(APPID, nfs.SCRIPT) } func _wx_check(m *ice.Message) { check := kit.Sort([]string{m.Config(TOKEN), m.Option("timestamp"), m.Option("nonce")}) - if sig := kit.Format(sha1.Sum([]byte(strings.Join(check, "")))); m.Warn(sig != m.Option("signature"), ice.ErrNotRight, check) { - return // 验证失败 + if sig := kit.Format(sha1.Sum([]byte(strings.Join(check, "")))); !m.Warn(sig != m.Option("signature"), ice.ErrNotRight, check) { + kit.If(m.Option("echostr") != "", func() { m.RenderResult(m.Option("echostr")) }, func() { m.Echo(ice.TRUE) }) } - if m.Option("echostr") != "" { - m.RenderResult(m.Option("echostr")) - return // 绑定验证 - } - m.Echo(ice.TRUE) } const ( @@ -62,7 +55,7 @@ const ACCESS = "access" func init() { Index.MergeCommands(ice.Commands{ - ACCESS: {Name: "access appid auto config ticket tokens login", Help: "认证", Actions: ice.MergeActions(ice.Actions{ + ACCESS: {Name: "access appid auto ticket tokens login", Help: "认证", Actions: ice.MergeActions(ice.Actions{ ice.CTX_INIT: {Hand: func(m *ice.Message, arg ...string) { m.Cmd(web.SPIDE, mdb.CREATE, WX, m.Config(tcp.SERVER)) gdb.Watch(m, chat.HEADER_AGENT, m.PrefixKey()) @@ -75,7 +68,7 @@ func init() { LOGIN: {Name: "login appid appmm token", Help: "登录", Hand: func(m *ice.Message, arg ...string) { ctx.ConfigFromOption(m, APPID, APPMM, TOKEN) }}, - TOKENS: {Name: "tokens", Help: "令牌", Hand: func(m *ice.Message, arg ...string) { + TOKENS: {Help: "令牌", Hand: func(m *ice.Message, arg ...string) { if now := time.Now().Unix(); m.Config(TOKENS) == "" || now > kit.Int64(m.Config(EXPIRES)) { msg := m.Cmd(web.SPIDE, WX, http.MethodGet, "/cgi-bin/token?grant_type=client_credential", APPID, m.Config(APPID), "secret", m.Config(APPMM)) if m.Warn(msg.Append(ERRCODE) != "", msg.Append(ERRCODE), msg.Append(ERRMSG)) { @@ -84,9 +77,9 @@ func init() { m.Config(EXPIRES, now+kit.Int64(msg.Append("expires_in"))) m.Config(TOKENS, msg.Append("access_token")) } - m.Echo(m.Config(TOKENS)) + m.Echo(m.Config(TOKENS)).Status(EXPIRES, time.Unix(kit.Int64(m.Config(EXPIRES)), 0).Format(ice.MOD_TIME)) }}, - TICKET: {Name: "ticket", Help: "票据", Hand: func(m *ice.Message, arg ...string) { + TICKET: {Help: "票据", Hand: func(m *ice.Message, arg ...string) { if now := time.Now().Unix(); m.Config(TICKET) == "" || now > kit.Int64(m.Config(EXPIRE)) { msg := m.Cmd(web.SPIDE, WX, http.MethodGet, "/cgi-bin/ticket/getticket?type=jsapi", "access_token", m.Cmdx("", TOKENS)) if m.Warn(msg.Append(ERRCODE) != "0", msg.Append(ERRCODE), msg.Append(ERRMSG)) { @@ -95,14 +88,10 @@ func init() { m.Config(EXPIRE, now+kit.Int64(msg.Append("expires_in"))) m.Config(TICKET, msg.Append(TICKET)) } - m.Echo(m.Config(TICKET)) - }}, - CONFIG: {Name: "config", Help: "配置", Hand: func(m *ice.Message, arg ...string) { - _wx_config(m, m.Config(APPID)) - }}, - CHECK: {Name: "check", Help: "检验", Hand: func(m *ice.Message, arg ...string) { - _wx_check(m) + m.Echo(m.Config(TICKET)).Status(EXPIRE, time.Unix(kit.Int64(m.Config(EXPIRE)), 0).Format(ice.MOD_TIME)) }}, + CONFIG: {Hand: func(m *ice.Message, arg ...string) { _wx_config(m, m.Config(APPID)) }}, + CHECK: {Hand: func(m *ice.Message, arg ...string) { _wx_check(m) }}, }, mdb.HashAction(tcp.SERVER, "https://api.weixin.qq.com", nfs.SCRIPT, "/plugin/local/chat/wx.js")), Hand: func(m *ice.Message, arg ...string) { m.Echo(m.Config(APPID)) }}, diff --git a/misc/wx/event.go b/misc/wx/event.go index bf6a6694..8178a286 100644 --- a/misc/wx/event.go +++ b/misc/wx/event.go @@ -9,11 +9,8 @@ const EVENT = "event" func init() { Index.MergeCommands(ice.Commands{ EVENT: {Name: "event", Help: "事件", Actions: ice.Actions{ - "subscribe": {Name: "subscribe", Help: "订阅", Hand: func(m *ice.Message, arg ...string) { - m.Cmdy(MENU, "home") - }}, - "unsubscribe": {Name: "unsubscribe", Help: "取关", Hand: func(m *ice.Message, arg ...string) { - }}, + "subscribe": {Help: "订阅", Hand: func(m *ice.Message, arg ...string) { m.Cmdy(MENU, "home") }}, + "unsubscribe": {Help: "取关", Hand: func(m *ice.Message, arg ...string) {}}, }}, }) } diff --git a/misc/wx/favor.go b/misc/wx/favor.go index 9c2b70c5..ded74658 100644 --- a/misc/wx/favor.go +++ b/misc/wx/favor.go @@ -10,18 +10,13 @@ import ( const FAVOR = "favor" func init() { - Index.Merge(&ice.Context{Configs: ice.Configs{ - FAVOR: {Name: "favor", Help: "收藏", Value: kit.Data( - mdb.SHORT, mdb.TEXT, mdb.FIELD, "time,type,name,text", - mdb.LINK, "https://open.weixin.qq.com/qr/code", - )}, - }, Commands: ice.Commands{ - FAVOR: {Name: "favor text:text auto create", Help: "收藏", Actions: ice.MergeActions(ice.Actions{ - mdb.CREATE: {Name: "create type name text", Help: "添加"}, - }, mdb.HashAction()), Hand: func(m *ice.Message, arg ...string) { + Index.MergeCommands(ice.Commands{ + FAVOR: {Name: "favor text:text auto create", Help: "收藏", Actions: mdb.HashAction( + mdb.SHORT, mdb.TEXT, mdb.FIELD, "time,type,name,text", mdb.LINK, "https://open.weixin.qq.com/qr/code", + ), Hand: func(m *ice.Message, arg ...string) { mdb.HashSelect(m, arg...).Tables(func(value ice.Maps) { m.PushQRCode(mdb.SCAN, kit.MergeURL(m.Config(mdb.LINK), aaa.USERNAME, value[mdb.TEXT])) }) }}, - }}) + }) } diff --git a/misc/wx/login.go b/misc/wx/login.go index aef35f59..d051d12d 100644 --- a/misc/wx/login.go +++ b/misc/wx/login.go @@ -8,6 +8,7 @@ import ( ice "shylinux.com/x/icebergs" "shylinux.com/x/icebergs/base/aaa" "shylinux.com/x/icebergs/base/mdb" + "shylinux.com/x/icebergs/base/web" "shylinux.com/x/icebergs/core/chat" "shylinux.com/x/icebergs/core/wiki" kit "shylinux.com/x/toolkits" @@ -18,92 +19,73 @@ func _wx_parse(m *ice.Message) { FromUserName string ToUserName string CreateTime int64 + MsgType string MsgId int64 Event string - MsgType string Content string - - Location_X float64 - Location_Y float64 - Scale string - Label string - - Title string - Description string - Url string - - PicUrl string + Title string + Description string + Url string + PicUrl string + Location_X float64 + Location_Y float64 + Scale string + Label string }{} defer m.R.Body.Close() buf, _ := ioutil.ReadAll(m.R.Body) - m.Debug("buf: %+v", string(buf)) xml.NewDecoder(bytes.NewBuffer(buf)).Decode(&data) m.Debug("data: %+v", data) - m.Option("FromUserName", data.FromUserName) m.Option("ToUserName", data.ToUserName) m.Option("CreateTime", data.CreateTime) m.Option("MsgId", data.MsgId) - m.Option("Event", data.Event) m.Option("MsgType", data.MsgType) m.Option("Content", data.Content) - + m.Option("Title", data.Title) + m.Option("Description", data.Description) + m.Option("URL", data.Url) + m.Option("URL", data.PicUrl) m.Option("LocationX", kit.Int(data.Location_X*100000)) m.Option("LocationY", kit.Int(data.Location_Y*100000)) m.Option("Scale", data.Scale) m.Option("Label", data.Label) - - m.Option("Title", data.Title) - m.Option("Description", data.Description) - m.Option("URL", data.Url) - - m.Option("URL", data.PicUrl) } const LOGIN = "login" func init() { Index.MergeCommands(ice.Commands{ - "/login/": {Name: "/login/", Help: "认证", Hand: func(m *ice.Message, arg ...string) { + web.PP(LOGIN): {Actions: aaa.WhiteAction(), Hand: func(m *ice.Message, arg ...string) { if m.Cmdx(ACCESS, CHECK) == "" { - return // 验签失败 + return } - - // 解析数据 _wx_parse(m) - - // 用户登录 m.Option(ice.MSG_USERZONE, WX) - aaa.UserLogin(m, m.Append("FromUserName"), "") - + aaa.SessAuth(m, kit.Dict(aaa.USERNAME, m.Option("FromUserName"), aaa.USERROLE, aaa.UserRole(m, m.Option("FromUserName")))) switch m.Option("MsgType") { - case EVENT: // 事件 + case EVENT: m.Cmdy(EVENT, m.Option("Event")) - - case chat.LOCATION: // 打卡 + case TEXT: + if cmds := kit.Split(m.Option("Content")); aaa.Right(m, cmds) { + m.Cmdy(TEXT, cmds) + } else { + m.Cmdy(MENU, "home") + } + case mdb.LINK: + m.Cmdy(chat.FAVOR, mdb.CREATE, mdb.TYPE, mdb.LINK, mdb.NAME, m.Option("Title"), mdb.TEXT, m.Option("URL")) + case wiki.IMAGE: + m.Cmdy(chat.FAVOR, mdb.CREATE, mdb.TYPE, wiki.IMAGE, mdb.NAME, m.Option("Title"), mdb.TEXT, m.Option("URL")) + case chat.LOCATION: m.Cmdy(chat.LOCATION, mdb.CREATE, mdb.TYPE, "", mdb.NAME, m.Option("Label"), mdb.TEXT, m.Option("Label"), "latitude", m.Option("LocationX"), "longitude", m.Option("LocationY"), "scale", m.Option("Scale"), ) - case mdb.LINK: // 打卡 - m.Cmdy("scan", mdb.CREATE, mdb.TYPE, mdb.LINK, mdb.NAME, m.Option("Title"), mdb.TEXT, m.Option("URL")) - - case "image": // 文本 - 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) { - m.Cmdy(TEXT, cmds) - break - } - m.Cmdy(MENU, "home") } }}, LOGIN: {Name: "login", Help: "登录", Actions: ice.Actions{ - mdb.CREATE: {Name: "create appid appmm token", Help: "创建", Hand: func(m *ice.Message, arg ...string) { - m.Cmd(ACCESS, LOGIN, arg) - }}, + mdb.CREATE: {Name: "create appid appmm token", Hand: func(m *ice.Message, arg ...string) { m.Cmd(ACCESS, LOGIN, arg) }}, }}, }) } diff --git a/misc/wx/menu.go b/misc/wx/menu.go index 9caa69d4..68783323 100644 --- a/misc/wx/menu.go +++ b/misc/wx/menu.go @@ -8,23 +8,17 @@ import ( kit "shylinux.com/x/toolkits" ) -func _wx_action(m *ice.Message) { +func _wx_action(m *ice.Message) (count int) { m.SetResult().RenderResult() - m.Echo(` %s `, m.Option("ToUserName"), m.Option("FromUserName"), m.Option("CreateTime"), "news") - - count := 0 m.Tables(func(value ice.Maps) { count++ }) - m.Echo(`%d`, count) - + m.Echo(`%d`, count).Echo(``) share := m.Cmdx(web.SHARE, mdb.CREATE, mdb.TYPE, web.LOGIN) - - m.Echo(``) m.Tables(func(value ice.Maps) { m.Echo(` <![CDATA[%s]]> @@ -32,13 +26,10 @@ func _wx_action(m *ice.Message) { -`, value[wiki.TITLE], value[wiki.SPARK], value[wiki.IMAGE], - kit.MergeURL(kit.Format(value[wiki.REFER]), web.SHARE, share)) - }) - m.Echo(``) - m.Echo(``) - +`, value[wiki.TITLE], value[wiki.SPARK], value[wiki.IMAGE], kit.MergeURL2(kit.Format(value[wiki.REFER]), "/share/"+share)) + }).Echo(``).Echo(``) m.Debug("echo: %v", m.Result()) + return } const MENU = "menu" @@ -46,8 +37,8 @@ const MENU = "menu" func init() { Index.MergeCommands(ice.Commands{ MENU: {Name: "menu zone id auto insert", Help: "菜单", Actions: ice.MergeActions(ice.Actions{ - mdb.INSERT: {Name: "insert zone=home title=hi refer=hello image", Help: "添加"}, - }, mdb.ZoneAction(mdb.SHORT, mdb.ZONE, mdb.FIELD, "time,id,title,refer,image")), Hand: func(m *ice.Message, arg ...string) { + mdb.INSERT: {Name: "insert zone=home title=hi refer=hello image"}, + }, mdb.ZoneAction(mdb.FIELD, "time,id,title,refer,image")), Hand: func(m *ice.Message, arg ...string) { if mdb.ZoneSelect(m, arg...); len(arg) > 0 { _wx_action(m) } diff --git a/misc/wx/text.go b/misc/wx/text.go index 45de462d..fbe6d78d 100644 --- a/misc/wx/text.go +++ b/misc/wx/text.go @@ -3,6 +3,7 @@ package wx 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/nfs" kit "shylinux.com/x/toolkits" @@ -17,23 +18,17 @@ func _wx_reply(m *ice.Message, tmpl string) { const TEXT = "text" func init() { - Index.Merge(&ice.Context{Configs: ice.Configs{ - TEXT: {Name: TEXT, Help: "文本", Value: kit.Data(nfs.TEMPLATE, text)}, - }, Commands: ice.Commands{ - TEXT: {Name: "text", Help: "文本", Actions: ice.Actions{ - MENU: {Name: "menu name", Help: "菜单", Hand: func(m *ice.Message, arg ...string) { - m.Cmdy(MENU, kit.Select("home", m.Option(mdb.NAME))) - }}, - }, Hand: func(m *ice.Message, arg ...string) { - if m.Cmdy(arg); m.Length() == 0 && (m.Result() == "" || m.IsErrNotFound()) { - m.SetResult().Cmdy(cli.SYSTEM, arg) // 系统命令 - } - if m.Result() == "" { - m.Table() + Index.MergeCommands(ice.Commands{ + TEXT: {Name: "text", Help: "文本", Actions: ice.MergeActions(ice.Actions{ + MENU: {Name: "menu name=home", Hand: func(m *ice.Message, arg ...string) { m.Cmdy(MENU, m.Option(mdb.NAME)) }}, + }, ctx.ConfAction(nfs.TEMPLATE, text)), Hand: func(m *ice.Message, arg ...string) { + if m.Cmdy(arg); m.IsErrNotFound() { + m.SetResult().Cmdy(cli.SYSTEM, arg) } + kit.If(m.Result() == "", func() { m.Table() }) _wx_reply(m, m.CommandKey()) }}, - }}) + }) } var text = ` diff --git a/misc/wx/wx.shy b/misc/wx/wx.shy index 66072538..71200d14 100644 --- a/misc/wx/wx.shy +++ b/misc/wx/wx.shy @@ -4,17 +4,12 @@ refer ` 后台 https://mp.weixin.qq.com/ 文档 https://developers.weixin.qq.com/doc/offiaccount/Getting_Started/Overview.html ` - qrcode `http://weixin.qq.com/r/_B1-Z7TEXOkjrfAE90jq` chapter "应用" field "访问" web.chat.wx.access field "收藏" web.chat.wx.favor field "菜单" web.chat.wx.menu - -field "扫码" web.chat.scan -field "复制" web.chat.paste -field "文件" web.chat.files field "位置" web.chat.location chapter "权限" @@ -29,4 +24,3 @@ chapter "项目" field "源代码" web.code.inner args `usr/icebergs/ misc/wx/login.go` field "趋势图" web.code.git.trend args `icebergs` field "架构图" web.code.git.spide args `icebergs` -