forked from x/icebergs
opt misc
This commit is contained in:
parent
2f253c8668
commit
27e73b26b1
@ -3,26 +3,16 @@ package aaa
|
|||||||
import (
|
import (
|
||||||
"github.com/shylinux/icebergs"
|
"github.com/shylinux/icebergs"
|
||||||
"github.com/shylinux/toolkits"
|
"github.com/shylinux/toolkits"
|
||||||
"math"
|
|
||||||
"strings"
|
"strings"
|
||||||
)
|
)
|
||||||
|
|
||||||
func distance(lat1, long1, lat2, long2 float64) float64 {
|
|
||||||
lat1 = lat1 * math.Pi / 180
|
|
||||||
long1 = long1 * math.Pi / 180
|
|
||||||
lat2 = lat2 * math.Pi / 180
|
|
||||||
long2 = long2 * math.Pi / 180
|
|
||||||
return 2 * 6371 * math.Asin(math.Sqrt(math.Pow(math.Sin(math.Abs(lat1-lat2)/2), 2)+math.Cos(lat1)*math.Cos(lat2)*math.Pow(math.Sin(math.Abs(long1-long2)/2), 2)))
|
|
||||||
}
|
|
||||||
|
|
||||||
var Index = &ice.Context{Name: "aaa", Help: "认证模块",
|
var Index = &ice.Context{Name: "aaa", Help: "认证模块",
|
||||||
Caches: map[string]*ice.Cache{},
|
Caches: map[string]*ice.Cache{},
|
||||||
Configs: map[string]*ice.Config{
|
Configs: map[string]*ice.Config{
|
||||||
ice.AAA_ROLE: {Name: "role", Help: "角色", Value: kit.Data(kit.MDB_SHORT, "chain")},
|
ice.AAA_ROLE: {Name: "role", Help: "角色", Value: kit.Data(kit.MDB_SHORT, "chain")},
|
||||||
ice.AAA_USER: {Name: "user", Help: "用户", Value: kit.Data(kit.MDB_SHORT, "username")},
|
ice.AAA_USER: {Name: "user", Help: "用户", Value: kit.Data(kit.MDB_SHORT, "username")},
|
||||||
ice.AAA_SESS: {Name: "sess", Help: "会话", Value: kit.Data(kit.MDB_SHORT, "uniq", "expire", "720h")},
|
ice.AAA_SESS: {Name: "sess", Help: "会话", Value: kit.Data(kit.MDB_SHORT, "uniq", "expire", "720h")},
|
||||||
|
|
||||||
"location": {Name: "location", Help: "定位", Value: kit.Data(kit.MDB_SHORT, "name")},
|
|
||||||
},
|
},
|
||||||
Commands: map[string]*ice.Command{
|
Commands: map[string]*ice.Command{
|
||||||
ice.ICE_INIT: {Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
ice.ICE_INIT: {Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||||
@ -34,52 +24,16 @@ var Index = &ice.Context{Name: "aaa", Help: "认证模块",
|
|||||||
m.Conf(ice.AAA_ROLE, "white.void.meta.short", "chain")
|
m.Conf(ice.AAA_ROLE, "white.void.meta.short", "chain")
|
||||||
}},
|
}},
|
||||||
ice.ICE_EXIT: {Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
ice.ICE_EXIT: {Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||||
m.Save(ice.AAA_ROLE, ice.AAA_USER, ice.AAA_SESS, m.Prefix("location"))
|
m.Save(ice.AAA_ROLE, ice.AAA_USER, ice.AAA_SESS)
|
||||||
}},
|
}},
|
||||||
|
|
||||||
"location": {Name: "location", Help: "location", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
ice.AAA_ROLE: {Name: "role check|black|white|right", Help: "角色", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||||
if len(arg) == 0 {
|
|
||||||
m.Grows("location", nil, "", "", func(index int, value map[string]interface{}) {
|
|
||||||
m.Push("", value)
|
|
||||||
})
|
|
||||||
return
|
|
||||||
}
|
|
||||||
if len(arg) == 1 {
|
|
||||||
m.Richs("location", nil, arg[0], func(key string, value map[string]interface{}) {
|
|
||||||
m.Info("what %v", value)
|
|
||||||
m.Push("detail", value)
|
|
||||||
})
|
|
||||||
return
|
|
||||||
}
|
|
||||||
if len(arg) == 2 {
|
|
||||||
m.Richs("aaa.location", nil, "*", func(key string, value map[string]interface{}) {
|
|
||||||
m.Push("name", value["name"])
|
|
||||||
m.Push("distance", kit.Int(distance(
|
|
||||||
float64(kit.Int(arg[0]))/100000,
|
|
||||||
float64(kit.Int(arg[1]))/100000,
|
|
||||||
float64(kit.Int(value["latitude"]))/100000,
|
|
||||||
float64(kit.Int(value["longitude"]))/100000,
|
|
||||||
)*1000))
|
|
||||||
})
|
|
||||||
m.Sort("distance", "int")
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
data := m.Richs("location", nil, arg[0], nil)
|
|
||||||
if data != nil {
|
|
||||||
data["count"] = kit.Int(data["count"]) + 1
|
|
||||||
} else {
|
|
||||||
data = kit.Dict("name", arg[0], "address", arg[1], "latitude", arg[2], "longitude", arg[3], "count", 1)
|
|
||||||
m.Rich("location", nil, data)
|
|
||||||
}
|
|
||||||
m.Grow("location", nil, data)
|
|
||||||
}},
|
|
||||||
|
|
||||||
ice.AAA_ROLE: {Name: "role", Help: "角色", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
|
||||||
switch arg[0] {
|
switch arg[0] {
|
||||||
case "check":
|
case "check":
|
||||||
// 用户角色
|
// 用户角色
|
||||||
m.Echo(kit.Select(kit.Select("void", "tech", m.Confs(ice.AAA_ROLE, kit.Keys("meta.tech", arg[1]))), "root", m.Confs(ice.AAA_ROLE, kit.Keys("meta.root", arg[1]))))
|
m.Echo(kit.Select(kit.Select("void",
|
||||||
|
"tech", m.Confs(ice.AAA_ROLE, kit.Keys("meta.tech", arg[1]))),
|
||||||
|
"root", m.Confs(ice.AAA_ROLE, kit.Keys("meta.root", arg[1]))))
|
||||||
|
|
||||||
case "black", "white":
|
case "black", "white":
|
||||||
// 黑白名单
|
// 黑白名单
|
||||||
@ -130,13 +84,15 @@ var Index = &ice.Context{Name: "aaa", Help: "认证模块",
|
|||||||
}
|
}
|
||||||
// 普通用户
|
// 普通用户
|
||||||
m.Echo("ok")
|
m.Echo("ok")
|
||||||
|
|
||||||
default:
|
default:
|
||||||
m.Conf(ice.AAA_ROLE, kit.Keys("meta", arg[0], arg[1]), "true")
|
m.Conf(ice.AAA_ROLE, kit.Keys("meta", arg[0], arg[1]), "true")
|
||||||
}
|
}
|
||||||
}},
|
}},
|
||||||
ice.AAA_USER: {Name: "user", Help: "用户", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
ice.AAA_USER: {Name: "user first|login", Help: "用户", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||||
switch arg[0] {
|
switch arg[0] {
|
||||||
case "first":
|
case "first":
|
||||||
|
// 初始用户
|
||||||
if m.Richs(ice.AAA_USER, nil, "%", nil) == nil {
|
if m.Richs(ice.AAA_USER, nil, "%", nil) == nil {
|
||||||
m.Rich(ice.AAA_USER, nil, kit.Dict("username", arg[1],
|
m.Rich(ice.AAA_USER, nil, kit.Dict("username", arg[1],
|
||||||
"usernode", m.Conf(ice.CLI_RUNTIME, "boot.hostname"),
|
"usernode", m.Conf(ice.CLI_RUNTIME, "boot.hostname"),
|
||||||
@ -149,23 +105,25 @@ var Index = &ice.Context{Name: "aaa", Help: "认证模块",
|
|||||||
case "login":
|
case "login":
|
||||||
// 用户认证
|
// 用户认证
|
||||||
user := m.Richs(ice.AAA_USER, nil, arg[1], nil)
|
user := m.Richs(ice.AAA_USER, nil, arg[1], nil)
|
||||||
if user == nil {
|
if word := kit.Select("", arg, 2); user == nil {
|
||||||
// 创建用户
|
// 创建用户
|
||||||
m.Rich(ice.AAA_USER, nil, kit.Dict(
|
m.Rich(ice.AAA_USER, nil, kit.Dict(
|
||||||
"username", arg[1], "password", arg[2],
|
"username", arg[1], "password", word,
|
||||||
"usernode", m.Conf(ice.CLI_RUNTIME, "boot.hostname"),
|
"usernode", m.Conf(ice.CLI_RUNTIME, "boot.hostname"),
|
||||||
))
|
))
|
||||||
user = m.Richs(ice.AAA_USER, nil, arg[1], nil)
|
user = m.Richs(ice.AAA_USER, nil, arg[1], nil)
|
||||||
m.Info("create user: %s %s", arg[1], kit.Format(user))
|
m.Log(ice.LOG_CREATE, "%s: %s", arg[1], kit.Format(user))
|
||||||
m.Event(ice.USER_CREATE, arg[1])
|
m.Event(ice.USER_CREATE, arg[1])
|
||||||
|
|
||||||
} else if kit.Format(user["password"]) == "" {
|
} else if word != "" {
|
||||||
user["password"] = arg[2]
|
if kit.Format(user["password"]) == "" {
|
||||||
|
// 设置密码
|
||||||
} else if kit.Format(user["password"]) != arg[2] {
|
user["password"] = word
|
||||||
// 认证失败
|
} else if kit.Format(user["password"]) != word {
|
||||||
m.Info("login fail user: %s", arg[1])
|
// 认证失败
|
||||||
break
|
m.Info("login fail user: %s", arg[1])
|
||||||
|
break
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if m.Options(ice.MSG_SESSID) && m.Cmdx(ice.AAA_SESS, "check", m.Option(ice.MSG_SESSID)) == arg[1] {
|
if m.Options(ice.MSG_SESSID) && m.Cmdx(ice.AAA_SESS, "check", m.Option(ice.MSG_SESSID)) == arg[1] {
|
||||||
@ -185,6 +143,7 @@ var Index = &ice.Context{Name: "aaa", Help: "认证模块",
|
|||||||
}},
|
}},
|
||||||
ice.AAA_SESS: {Name: "sess check|login", Help: "会话", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
ice.AAA_SESS: {Name: "sess check|login", Help: "会话", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||||
if len(arg) == 0 {
|
if len(arg) == 0 {
|
||||||
|
// 会话列表
|
||||||
m.Richs(ice.AAA_SESS, nil, "", func(key string, value map[string]interface{}) {
|
m.Richs(ice.AAA_SESS, nil, "", func(key string, value map[string]interface{}) {
|
||||||
m.Push(key, value, []string{"key", "time", "username", "userrole"})
|
m.Push(key, value, []string{"key", "time", "username", "userrole"})
|
||||||
})
|
})
|
||||||
@ -193,11 +152,14 @@ var Index = &ice.Context{Name: "aaa", Help: "认证模块",
|
|||||||
|
|
||||||
switch arg[0] {
|
switch arg[0] {
|
||||||
case "check":
|
case "check":
|
||||||
|
// 查看会话
|
||||||
m.Richs(ice.AAA_SESS, nil, arg[1], func(value map[string]interface{}) {
|
m.Richs(ice.AAA_SESS, nil, arg[1], func(value map[string]interface{}) {
|
||||||
m.Push(arg[1], value, []string{"username", "userrole"})
|
m.Push(arg[1], value, []string{"username", "userrole"})
|
||||||
m.Echo("%s", value["username"])
|
m.Echo("%s", value["username"])
|
||||||
})
|
})
|
||||||
|
|
||||||
case "create":
|
case "create":
|
||||||
|
// 创建会话
|
||||||
h := m.Rich(ice.AAA_SESS, nil, kit.Dict(
|
h := m.Rich(ice.AAA_SESS, nil, kit.Dict(
|
||||||
"username", arg[1], "userrole", kit.Select("", arg, 2),
|
"username", arg[1], "userrole", kit.Select("", arg, 2),
|
||||||
))
|
))
|
||||||
|
@ -83,7 +83,7 @@ var Index = &ice.Context{Name: "ctx", Help: "配置模块",
|
|||||||
m.Push("key", s.Cap(ice.CTX_FOLLOW))
|
m.Push("key", s.Cap(ice.CTX_FOLLOW))
|
||||||
m.Push("index", k)
|
m.Push("index", k)
|
||||||
m.Push("name", v.Name)
|
m.Push("name", v.Name)
|
||||||
m.Push("help", kit.Format(v.Help))
|
m.Push("help", kit.Simple(v.Help)[0])
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
return
|
return
|
||||||
@ -100,7 +100,7 @@ var Index = &ice.Context{Name: "ctx", Help: "配置模块",
|
|||||||
// 命令列表
|
// 命令列表
|
||||||
m.Push("key", key)
|
m.Push("key", key)
|
||||||
m.Push("name", cmd.Name)
|
m.Push("name", cmd.Name)
|
||||||
m.Push("help", kit.Format(cmd.Help))
|
m.Push("help", kit.Simple(cmd.Help)[0])
|
||||||
m.Push("meta", kit.Format(cmd.Meta))
|
m.Push("meta", kit.Format(cmd.Meta))
|
||||||
m.Push("list", kit.Format(cmd.List))
|
m.Push("list", kit.Format(cmd.List))
|
||||||
} else {
|
} else {
|
||||||
|
@ -7,15 +7,70 @@ import (
|
|||||||
"bytes"
|
"bytes"
|
||||||
"encoding/csv"
|
"encoding/csv"
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
|
"math"
|
||||||
"os"
|
"os"
|
||||||
"sort"
|
"sort"
|
||||||
"strings"
|
"strings"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
func distance(lat1, long1, lat2, long2 float64) float64 {
|
||||||
|
lat1 = lat1 * math.Pi / 180
|
||||||
|
long1 = long1 * math.Pi / 180
|
||||||
|
lat2 = lat2 * math.Pi / 180
|
||||||
|
long2 = long2 * math.Pi / 180
|
||||||
|
return 2 * 6371 * math.Asin(math.Sqrt(math.Pow(math.Sin(math.Abs(lat1-lat2)/2), 2)+math.Cos(lat1)*math.Cos(lat2)*math.Pow(math.Sin(math.Abs(long1-long2)/2), 2)))
|
||||||
|
}
|
||||||
|
|
||||||
var Index = &ice.Context{Name: "mdb", Help: "数据模块",
|
var Index = &ice.Context{Name: "mdb", Help: "数据模块",
|
||||||
Caches: map[string]*ice.Cache{},
|
Caches: map[string]*ice.Cache{},
|
||||||
Configs: map[string]*ice.Config{},
|
Configs: map[string]*ice.Config{
|
||||||
|
"location": {Name: "location", Help: "定位", Value: kit.Data(kit.MDB_SHORT, "name")},
|
||||||
|
},
|
||||||
Commands: map[string]*ice.Command{
|
Commands: map[string]*ice.Command{
|
||||||
|
ice.ICE_INIT: {Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||||
|
m.Load()
|
||||||
|
}},
|
||||||
|
ice.ICE_EXIT: {Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||||
|
m.Save(m.Prefix("location"))
|
||||||
|
}},
|
||||||
|
"location": {Name: "location", Help: "location", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||||
|
if len(arg) == 0 {
|
||||||
|
m.Grows("location", nil, "", "", func(index int, value map[string]interface{}) {
|
||||||
|
m.Push("", value)
|
||||||
|
})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if len(arg) == 1 {
|
||||||
|
m.Richs("location", nil, arg[0], func(key string, value map[string]interface{}) {
|
||||||
|
m.Info("what %v", value)
|
||||||
|
m.Push("detail", value)
|
||||||
|
})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if len(arg) == 2 {
|
||||||
|
m.Richs("aaa.location", nil, "*", func(key string, value map[string]interface{}) {
|
||||||
|
m.Push("name", value["name"])
|
||||||
|
m.Push("distance", kit.Int(distance(
|
||||||
|
float64(kit.Int(arg[0]))/100000,
|
||||||
|
float64(kit.Int(arg[1]))/100000,
|
||||||
|
float64(kit.Int(value["latitude"]))/100000,
|
||||||
|
float64(kit.Int(value["longitude"]))/100000,
|
||||||
|
)*1000))
|
||||||
|
})
|
||||||
|
m.Sort("distance", "int")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
data := m.Richs("location", nil, arg[0], nil)
|
||||||
|
if data != nil {
|
||||||
|
data["count"] = kit.Int(data["count"]) + 1
|
||||||
|
} else {
|
||||||
|
data = kit.Dict("name", arg[0], "address", arg[1], "latitude", arg[2], "longitude", arg[3], "count", 1)
|
||||||
|
m.Rich("location", nil, data)
|
||||||
|
}
|
||||||
|
m.Grow("location", nil, data)
|
||||||
|
}},
|
||||||
|
|
||||||
"update": {Name: "update config table index key value", Help: "修改数据", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
"update": {Name: "update config table index key value", Help: "修改数据", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||||
meta := m.Confm(arg[0], arg[1]+".meta")
|
meta := m.Confm(arg[0], arg[1]+".meta")
|
||||||
index := kit.Int(arg[2]) - kit.Int(meta["offset"]) - 1
|
index := kit.Int(arg[2]) - kit.Int(meta["offset"]) - 1
|
||||||
|
@ -46,6 +46,19 @@ func Cookie(msg *ice.Message, sessid string) string {
|
|||||||
http.SetCookie(msg.W, &http.Cookie{Name: ice.WEB_SESS, Value: sessid, Path: "/", Expires: expire})
|
http.SetCookie(msg.W, &http.Cookie{Name: ice.WEB_SESS, Value: sessid, Path: "/", Expires: expire})
|
||||||
return sessid
|
return sessid
|
||||||
}
|
}
|
||||||
|
func Upload(m *ice.Message, name string) string {
|
||||||
|
m.Cmdy(ice.WEB_STORY, "upload")
|
||||||
|
if s, e := os.Stat(name); e == nil && s.IsDir() {
|
||||||
|
name = path.Join(name, m.Append("name"))
|
||||||
|
}
|
||||||
|
m.Cmd(ice.WEB_STORY, ice.STORY_WATCH, m.Append("data"), name)
|
||||||
|
return name
|
||||||
|
}
|
||||||
|
func Count(m *ice.Message, cmd, key, name string) int {
|
||||||
|
count := kit.Int(m.Conf(cmd, kit.Keys(key, name)))
|
||||||
|
m.Conf(cmd, kit.Keys(key, name), count+1)
|
||||||
|
return count
|
||||||
|
}
|
||||||
func IsLocalIP(ip string) bool {
|
func IsLocalIP(ip string) bool {
|
||||||
return ip == "::1" || strings.HasPrefix(ip, "127.")
|
return ip == "::1" || strings.HasPrefix(ip, "127.")
|
||||||
}
|
}
|
||||||
|
@ -14,15 +14,16 @@ var Index = &ice.Context{Name: "chat", Help: "聊天中心",
|
|||||||
"template", kit.Dict("root", []interface{}{
|
"template", kit.Dict("root", []interface{}{
|
||||||
[]interface{}{"storm", "mall", "mall"},
|
[]interface{}{"storm", "mall", "mall"},
|
||||||
[]interface{}{"field", "asset", "web.mall"},
|
[]interface{}{"field", "asset", "web.mall"},
|
||||||
[]interface{}{"field", "bonus", "web.mall"},
|
|
||||||
[]interface{}{"field", "trans", "web.mall"},
|
|
||||||
[]interface{}{"field", "spend", "web.mall"},
|
[]interface{}{"field", "spend", "web.mall"},
|
||||||
|
[]interface{}{"field", "trans", "web.mall"},
|
||||||
|
[]interface{}{"field", "bonus", "web.mall"},
|
||||||
|
[]interface{}{"field", "month", "web.mall"},
|
||||||
|
|
||||||
[]interface{}{"storm", "team", "team"},
|
[]interface{}{"storm", "team", "team"},
|
||||||
|
[]interface{}{"field", "plan", "web.team"},
|
||||||
|
[]interface{}{"field", "stat", "web.team"},
|
||||||
[]interface{}{"field", "miss", "web.team"},
|
[]interface{}{"field", "miss", "web.team"},
|
||||||
[]interface{}{"field", "task", "web.team"},
|
[]interface{}{"field", "task", "web.team"},
|
||||||
[]interface{}{"field", "stat", "web.team"},
|
|
||||||
[]interface{}{"field", "plan", "web.team"},
|
|
||||||
|
|
||||||
[]interface{}{"storm", "wiki", "wiki"},
|
[]interface{}{"storm", "wiki", "wiki"},
|
||||||
[]interface{}{"field", "draw", "web.wiki"},
|
[]interface{}{"field", "draw", "web.wiki"},
|
||||||
@ -261,6 +262,7 @@ var Index = &ice.Context{Name: "chat", Help: "聊天中心",
|
|||||||
m.Push(key, value["meta"], []string{kit.MDB_KEY, kit.MDB_NAME})
|
m.Push(key, value["meta"], []string{kit.MDB_KEY, kit.MDB_NAME})
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
m.Log(ice.LOG_SELECT, "%s", m.Format("append"))
|
||||||
case 1:
|
case 1:
|
||||||
// 群组详情
|
// 群组详情
|
||||||
m.Richs(ice.CHAT_RIVER, nil, arg[0], func(key string, value map[string]interface{}) {
|
m.Richs(ice.CHAT_RIVER, nil, arg[0], func(key string, value map[string]interface{}) {
|
||||||
@ -304,6 +306,7 @@ var Index = &ice.Context{Name: "chat", Help: "聊天中心",
|
|||||||
m.Richs(ice.CHAT_RIVER, prefix, "*", func(key string, value map[string]interface{}) {
|
m.Richs(ice.CHAT_RIVER, prefix, "*", func(key string, value map[string]interface{}) {
|
||||||
m.Push(key, value["meta"], []string{kit.MDB_KEY, kit.MDB_NAME})
|
m.Push(key, value["meta"], []string{kit.MDB_KEY, kit.MDB_NAME})
|
||||||
})
|
})
|
||||||
|
m.Log(ice.LOG_SELECT, "%s", m.Format("append"))
|
||||||
m.Sort(kit.MDB_NAME)
|
m.Sort(kit.MDB_NAME)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@ -443,6 +446,9 @@ var Index = &ice.Context{Name: "chat", Help: "聊天中心",
|
|||||||
// 记录位置
|
// 记录位置
|
||||||
m.Cmdy("aaa.location", arg[5:])
|
m.Cmdy("aaa.location", arg[5:])
|
||||||
return
|
return
|
||||||
|
case "upload":
|
||||||
|
m.Cmdy(ice.WEB_STORY, "upload")
|
||||||
|
|
||||||
case "share":
|
case "share":
|
||||||
list := []string{}
|
list := []string{}
|
||||||
for k, v := range meta {
|
for k, v := range meta {
|
||||||
|
@ -13,18 +13,41 @@ import (
|
|||||||
"time"
|
"time"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
func input(m *ice.Message, arg ...string) bool {
|
||||||
|
if len(arg) > 0 && arg[0] == "action" {
|
||||||
|
switch arg[1] {
|
||||||
|
case "input":
|
||||||
|
switch arg[2] {
|
||||||
|
case "account", "to":
|
||||||
|
m.Richs("asset", nil, "*", func(key string, value map[string]interface{}) {
|
||||||
|
m.Push(arg[2], kit.Value(value, "meta.account"))
|
||||||
|
m.Push("count", kit.Value(value, "meta.count"))
|
||||||
|
})
|
||||||
|
m.Sort("count", "int_r")
|
||||||
|
return true
|
||||||
|
case "type", "name", "text", "value":
|
||||||
|
m.Confm("asset", kit.Keys("meta.word", arg[2]), func(key string, value string) {
|
||||||
|
m.Push(arg[2], key)
|
||||||
|
m.Push("count", value)
|
||||||
|
})
|
||||||
|
m.Sort("count", "int_r")
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
var Index = &ice.Context{Name: "mall", Help: "贸易中心",
|
var Index = &ice.Context{Name: "mall", Help: "贸易中心",
|
||||||
Caches: map[string]*ice.Cache{},
|
Caches: map[string]*ice.Cache{},
|
||||||
Configs: map[string]*ice.Config{
|
Configs: map[string]*ice.Config{
|
||||||
"railway": {Name: "railway", Help: "12306", Value: kit.Data()},
|
"railway": {Name: "railway", Help: "12306", Value: kit.Data()},
|
||||||
"asset": {Name: "asset", Help: "资产", Value: kit.Data(
|
|
||||||
kit.MDB_SHORT, "account", "limit", "5000",
|
"asset": {Name: "asset", Help: "资产", Value: kit.Data(kit.MDB_SHORT, "account", "site", kit.Dict(
|
||||||
"site", kit.Dict(
|
"公积金", "https://grwsyw.gjj.beijing.gov.cn/ish/flow/menu/PPLGRZH0102?_r=0.6644871172745264",
|
||||||
"个税", "https://its.beijing.chinatax.gov.cn:8443/zmsqjl.html",
|
"社保", "http://fuwu.rsj.beijing.gov.cn/csibiz/indinfo/index.jsp",
|
||||||
"社保", "http://fuwu.rsj.beijing.gov.cn/csibiz/indinfo/index.jsp",
|
"个税", "https://its.beijing.chinatax.gov.cn:8443/zmsqjl.html",
|
||||||
"公积金", "https://grwsyw.gjj.beijing.gov.cn/ish/flow/menu/PPLGRZH0102?_r=0.6644871172745264",
|
))},
|
||||||
),
|
|
||||||
)},
|
|
||||||
},
|
},
|
||||||
Commands: map[string]*ice.Command{
|
Commands: map[string]*ice.Command{
|
||||||
ice.ICE_INIT: {Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
ice.ICE_INIT: {Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||||
@ -42,32 +65,43 @@ var Index = &ice.Context{Name: "mall", Help: "贸易中心",
|
|||||||
}},
|
}},
|
||||||
|
|
||||||
"spend": {Name: "spend", Help: "支出", List: kit.List(
|
"spend": {Name: "spend", Help: "支出", List: kit.List(
|
||||||
kit.MDB_INPUT, "text", "name", "account",
|
kit.MDB_INPUT, "text", "name", "account", "figure", "key",
|
||||||
kit.MDB_INPUT, "text", "name", "name",
|
kit.MDB_INPUT, "text", "name", "name", "figure", "key",
|
||||||
kit.MDB_INPUT, "text", "name", "text",
|
kit.MDB_INPUT, "text", "name", "value", "cb", "money",
|
||||||
kit.MDB_INPUT, "text", "name", "value",
|
|
||||||
kit.MDB_INPUT, "button", "name", "记录",
|
kit.MDB_INPUT, "button", "name", "记录",
|
||||||
|
kit.MDB_INPUT, "textarea", "name", "text", "figure", "key",
|
||||||
), 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 input(m, arg...) {
|
||||||
|
return
|
||||||
|
}
|
||||||
if len(arg) < 2 {
|
if len(arg) < 2 {
|
||||||
|
// 查看流水
|
||||||
m.Cmdy("asset", arg)
|
m.Cmdy("asset", arg)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
// 添加流水
|
||||||
amount := kit.Int(arg[3])
|
amount := kit.Int(arg[3])
|
||||||
m.Cmdy("asset", arg[0], "", "支出", arg[1], arg[2], -amount, arg[4:])
|
m.Cmdy("asset", arg[0], "", "支出", arg[1], arg[2], -amount, arg[4:])
|
||||||
m.Cmdy("asset", "流水", "", "支出", arg[1], arg[2], -amount, arg[4:])
|
m.Cmdy("asset", "流水", "", "支出", arg[1], arg[2], -amount, arg[4:])
|
||||||
}},
|
}},
|
||||||
"trans": {Name: "trans", Help: "转账", List: kit.List(
|
"trans": {Name: "trans", Help: "转账", List: kit.List(
|
||||||
kit.MDB_INPUT, "text", "name", "account",
|
kit.MDB_INPUT, "text", "name", "account", "figure", "key",
|
||||||
kit.MDB_INPUT, "text", "name", "to",
|
kit.MDB_INPUT, "text", "name", "to", "figure", "key",
|
||||||
kit.MDB_INPUT, "text", "name", "name",
|
kit.MDB_INPUT, "text", "name", "name", "figure", "key",
|
||||||
kit.MDB_INPUT, "text", "name", "text",
|
kit.MDB_INPUT, "text", "name", "text", "figure", "key",
|
||||||
kit.MDB_INPUT, "text", "name", "value",
|
kit.MDB_INPUT, "text", "name", "value", "cb", "money",
|
||||||
kit.MDB_INPUT, "button", "name", "记录",
|
kit.MDB_INPUT, "button", "name", "记录",
|
||||||
), 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 input(m, arg...) {
|
||||||
|
return
|
||||||
|
}
|
||||||
if len(arg) < 2 {
|
if len(arg) < 2 {
|
||||||
|
// 查看流水
|
||||||
m.Cmdy("asset", arg)
|
m.Cmdy("asset", arg)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
// 添加流水
|
||||||
amount := kit.Int(arg[4])
|
amount := kit.Int(arg[4])
|
||||||
m.Cmdy("asset", arg[0], "", "转出", arg[2], arg[3], -amount, arg[5:])
|
m.Cmdy("asset", arg[0], "", "转出", arg[2], arg[3], -amount, arg[5:])
|
||||||
m.Cmd("asset", arg[1], "", "转入", arg[2], arg[3], amount, arg[5:])
|
m.Cmd("asset", arg[1], "", "转入", arg[2], arg[3], amount, arg[5:])
|
||||||
@ -75,16 +109,22 @@ var Index = &ice.Context{Name: "mall", Help: "贸易中心",
|
|||||||
m.Cmd("asset", "流水", "", "转入", arg[2], arg[3], amount, arg[5:])
|
m.Cmd("asset", "流水", "", "转入", arg[2], arg[3], amount, arg[5:])
|
||||||
}},
|
}},
|
||||||
"bonus": {Name: "bonus", Help: "收入", List: kit.List(
|
"bonus": {Name: "bonus", Help: "收入", List: kit.List(
|
||||||
kit.MDB_INPUT, "text", "name", "account",
|
kit.MDB_INPUT, "text", "name", "account", "figure", "key",
|
||||||
kit.MDB_INPUT, "text", "name", "name",
|
kit.MDB_INPUT, "text", "name", "name", "figure", "key",
|
||||||
kit.MDB_INPUT, "text", "name", "text",
|
kit.MDB_INPUT, "text", "name", "text", "figure", "key",
|
||||||
kit.MDB_INPUT, "text", "name", "value",
|
kit.MDB_INPUT, "text", "name", "value", "cb", "money",
|
||||||
kit.MDB_INPUT, "button", "name", "记录",
|
kit.MDB_INPUT, "button", "name", "记录",
|
||||||
), 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 input(m, arg...) {
|
||||||
|
return
|
||||||
|
}
|
||||||
if len(arg) < 2 {
|
if len(arg) < 2 {
|
||||||
|
// 查看流水
|
||||||
m.Cmdy("asset", arg)
|
m.Cmdy("asset", arg)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
// 添加流水
|
||||||
m.Cmdy("asset", arg[0], "", "收入", arg[1:])
|
m.Cmdy("asset", arg[0], "", "收入", arg[1:])
|
||||||
m.Cmdy("asset", "流水", "", "收入", arg[1:])
|
m.Cmdy("asset", "流水", "", "收入", arg[1:])
|
||||||
}},
|
}},
|
||||||
@ -235,10 +275,9 @@ var Index = &ice.Context{Name: "mall", Help: "贸易中心",
|
|||||||
}, List: kit.List(
|
}, List: kit.List(
|
||||||
kit.MDB_INPUT, "text", "name", "account", "action", "auto",
|
kit.MDB_INPUT, "text", "name", "account", "action", "auto",
|
||||||
kit.MDB_INPUT, "text", "name", "id", "action", "auto",
|
kit.MDB_INPUT, "text", "name", "id", "action", "auto",
|
||||||
kit.MDB_INPUT, "button", "name", "查看",
|
kit.MDB_INPUT, "button", "name", "查看", "action", "auto",
|
||||||
kit.MDB_INPUT, "button", "name", "返回", "cb", "Last",
|
kit.MDB_INPUT, "button", "name", "返回", "cb", "Last",
|
||||||
), 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.Option("cache.limit", "10000")
|
|
||||||
if len(arg) == 0 {
|
if len(arg) == 0 {
|
||||||
// 账户列表
|
// 账户列表
|
||||||
m.Richs("asset", nil, "*", func(key string, value map[string]interface{}) {
|
m.Richs("asset", nil, "*", func(key string, value map[string]interface{}) {
|
||||||
@ -251,14 +290,17 @@ var Index = &ice.Context{Name: "mall", Help: "贸易中心",
|
|||||||
if len(arg) > 0 && arg[0] == "action" {
|
if len(arg) > 0 && arg[0] == "action" {
|
||||||
switch arg[1] {
|
switch arg[1] {
|
||||||
case "modify":
|
case "modify":
|
||||||
|
// 修改数据
|
||||||
m.Richs("asset", nil, m.Option("account"), func(key string, account map[string]interface{}) {
|
m.Richs("asset", nil, m.Option("account"), func(key string, account map[string]interface{}) {
|
||||||
m.Grows("asset", kit.Keys("hash", key), "id", arg[5], func(index int, current map[string]interface{}) {
|
m.Grows("asset", kit.Keys("hash", key), "id", arg[5], func(index int, current map[string]interface{}) {
|
||||||
|
m.Log(ice.LOG_MODIFY, "%s: %d %s: %s->%s", key, index, kit.Value(current, arg[2]), arg[2], arg[3])
|
||||||
kit.Value(current, arg[2], arg[3])
|
kit.Value(current, arg[2], arg[3])
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
case "save":
|
case "save":
|
||||||
m.Option("cache.limit", "10000")
|
// 保存数据
|
||||||
|
m.Option("cache.limit", -2)
|
||||||
if f, p, e := kit.Create(arg[2]); m.Assert(e) {
|
if f, p, e := kit.Create(arg[2]); m.Assert(e) {
|
||||||
defer f.Close()
|
defer f.Close()
|
||||||
|
|
||||||
@ -285,7 +327,7 @@ var Index = &ice.Context{Name: "mall", Help: "贸易中心",
|
|||||||
}
|
}
|
||||||
|
|
||||||
case "load":
|
case "load":
|
||||||
m.Option("cache.limit", "10000")
|
// 加载数据
|
||||||
m.CSV(m.Cmdx("nfs.cat", arg[2])).Table(func(index int, data map[string]string, head []string) {
|
m.CSV(m.Cmdx("nfs.cat", arg[2])).Table(func(index int, data map[string]string, head []string) {
|
||||||
v, _ := strconv.ParseFloat(data["金额"], 64)
|
v, _ := strconv.ParseFloat(data["金额"], 64)
|
||||||
for _, account := range []string{kit.Select(data["账户"], arg, 3), "流水"} {
|
for _, account := range []string{kit.Select(data["账户"], arg, 3), "流水"} {
|
||||||
@ -331,8 +373,8 @@ var Index = &ice.Context{Name: "mall", Help: "贸易中心",
|
|||||||
m.Log(ice.LOG_CREATE, "account: %s", arg[0])
|
m.Log(ice.LOG_CREATE, "account: %s", arg[0])
|
||||||
}
|
}
|
||||||
|
|
||||||
|
field := []string{"time", "id", "value", "type", "name", "text"}
|
||||||
m.Richs("asset", nil, arg[0], func(key string, value map[string]interface{}) {
|
m.Richs("asset", nil, arg[0], func(key string, value map[string]interface{}) {
|
||||||
field := []string{"time", "id", "value", "type", "name", "text"}
|
|
||||||
if len(arg) == 1 {
|
if len(arg) == 1 {
|
||||||
// 消费流水
|
// 消费流水
|
||||||
m.Grows("asset", kit.Keys("hash", key), "", "", func(index int, value map[string]interface{}) {
|
m.Grows("asset", kit.Keys("hash", key), "", "", func(index int, value map[string]interface{}) {
|
||||||
@ -369,7 +411,12 @@ var Index = &ice.Context{Name: "mall", Help: "贸易中心",
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
// 添加流水
|
// 词汇统计
|
||||||
|
web.Count(m, cmd, "meta.word.type", arg[2])
|
||||||
|
web.Count(m, cmd, "meta.word.name", arg[3])
|
||||||
|
web.Count(m, cmd, "meta.word.text", arg[4])
|
||||||
|
|
||||||
|
// 数据结构
|
||||||
amount := kit.Int(arg[5])
|
amount := kit.Int(arg[5])
|
||||||
extra := map[string]interface{}{}
|
extra := map[string]interface{}{}
|
||||||
data := kit.Dict(
|
data := kit.Dict(
|
||||||
@ -382,14 +429,16 @@ var Index = &ice.Context{Name: "mall", Help: "贸易中心",
|
|||||||
kit.Value(extra, arg[i], arg[i+1])
|
kit.Value(extra, arg[i], arg[i+1])
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
m.Grow("asset", kit.Keys("hash", key), data)
|
// 添加流水
|
||||||
|
n := m.Grow("asset", kit.Keys("hash", key), data)
|
||||||
|
|
||||||
// 账户结余
|
// 账户结余
|
||||||
amount = kit.Int(kit.Value(value, "meta.amount")) + amount
|
amount = kit.Int(kit.Value(value, "meta.amount")) + amount
|
||||||
m.Log(ice.LOG_INSERT, "%s: %v", key, amount)
|
m.Log(ice.LOG_INSERT, "%s: %v", key, amount)
|
||||||
kit.Value(value, "meta.amount", amount)
|
kit.Value(value, "meta.amount", amount)
|
||||||
m.Echo("%d", amount)
|
m.Echo("%s: %d %d\n", arg[0], n, amount)
|
||||||
|
|
||||||
|
// 收支统计
|
||||||
switch data["type"] {
|
switch data["type"] {
|
||||||
case "收入":
|
case "收入":
|
||||||
bonus := kit.Int(kit.Value(value, "meta.bonus")) + amount
|
bonus := kit.Int(kit.Value(value, "meta.bonus")) + amount
|
||||||
|
@ -185,10 +185,8 @@ var Index = &ice.Context{Name: "team", Help: "团队中心",
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 词汇统计
|
// 词汇统计
|
||||||
count := kit.Int(m.Conf(cmd, kit.Keys("meta.word", "type", arg[2])))
|
web.Count(m, cmd, "meta.word.type", arg[2])
|
||||||
m.Conf(cmd, kit.Keys("meta.word", "type", arg[2]), count+1)
|
web.Count(m, cmd, "meta.word.name", arg[3])
|
||||||
count = kit.Int(m.Conf(cmd, kit.Keys("meta.word", "name", arg[3])))
|
|
||||||
m.Conf(cmd, kit.Keys("meta.word", "name", arg[3]), count+1)
|
|
||||||
|
|
||||||
// 数据结构
|
// 数据结构
|
||||||
extra := kit.Dict()
|
extra := kit.Dict()
|
||||||
@ -460,7 +458,7 @@ var Index = &ice.Context{Name: "team", Help: "团队中心",
|
|||||||
kit.MDB_INPUT, "text", "name", "name", "figure", "key",
|
kit.MDB_INPUT, "text", "name", "name", "figure", "key",
|
||||||
kit.MDB_INPUT, "button", "name", "添加",
|
kit.MDB_INPUT, "button", "name", "添加",
|
||||||
kit.MDB_INPUT, "textarea", "name", "text",
|
kit.MDB_INPUT, "textarea", "name", "text",
|
||||||
kit.MDB_INPUT, "text", "name", "location", "figure", "key", "cb", "location",
|
kit.MDB_INPUT, "text", "name", "location", "figure", "key", "cb", "location", "className", "opts",
|
||||||
), Hand: func(m *ice.Message, c *ice.Context, key string, arg ...string) {
|
), Hand: func(m *ice.Message, c *ice.Context, key string, arg ...string) {
|
||||||
if len(arg) > 0 && arg[0] == "action" {
|
if len(arg) > 0 && arg[0] == "action" {
|
||||||
switch arg[1] {
|
switch arg[1] {
|
||||||
|
@ -444,15 +444,10 @@ var Index = &ice.Context{Name: "wiki", Help: "文档中心",
|
|||||||
kit.MDB_INPUT, "text", "name", "name",
|
kit.MDB_INPUT, "text", "name", "name",
|
||||||
kit.MDB_INPUT, "button", "name", "执行",
|
kit.MDB_INPUT, "button", "name", "执行",
|
||||||
kit.MDB_INPUT, "button", "name", "返回", "cb", "Last",
|
kit.MDB_INPUT, "button", "name", "返回", "cb", "Last",
|
||||||
kit.MDB_INPUT, "button", "name", "上传", "cb", "upload",
|
kit.MDB_INPUT, "button", "name", "上传", "figure", "upload",
|
||||||
), 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 m.Option("_action") == "上传" {
|
if m.Option("_action") == "上传" {
|
||||||
if len(arg) == 0 {
|
web.Upload(m, path.Join(m.Conf(cmd, "meta.path"), kit.Select("", arg, 0)))
|
||||||
arg = append(arg, "/")
|
|
||||||
}
|
|
||||||
m.Cmdy(ice.WEB_STORY, "upload")
|
|
||||||
m.Cmd(ice.WEB_STORY, ice.STORY_WATCH, m.Append("data"),
|
|
||||||
path.Join(m.Conf(cmd, "meta.path"), arg[0], kit.Select("", m.Append("name"), strings.HasSuffix(arg[0], "/"))))
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -523,7 +518,7 @@ var Index = &ice.Context{Name: "wiki", Help: "文档中心",
|
|||||||
m.Echo(path.Join(m.Conf(cmd, "meta.path"), arg[0]))
|
m.Echo(path.Join(m.Conf(cmd, "meta.path"), arg[0]))
|
||||||
}},
|
}},
|
||||||
"walk": {Name: "walk", Help: "走遍世界", Meta: kit.Dict("display", "wiki/walk"), List: kit.List(
|
"walk": {Name: "walk", Help: "走遍世界", Meta: kit.Dict("display", "wiki/walk"), List: kit.List(
|
||||||
kit.MDB_INPUT, "text", "name", "file",
|
kit.MDB_INPUT, "text", "name", "file", "figure", "province",
|
||||||
kit.MDB_INPUT, "button", "name", "执行",
|
kit.MDB_INPUT, "button", "name", "执行",
|
||||||
kit.MDB_INPUT, "button", "name", "返回", "cb", "Last",
|
kit.MDB_INPUT, "button", "name", "返回", "cb", "Last",
|
||||||
), Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
), Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||||
|
@ -7,7 +7,7 @@ import (
|
|||||||
"github.com/shylinux/toolkits"
|
"github.com/shylinux/toolkits"
|
||||||
)
|
)
|
||||||
|
|
||||||
var Index = &ice.Context{Name: "chrome", Help: "chrome",
|
var Index = &ice.Context{Name: "chrome", Help: "浏览器",
|
||||||
Caches: map[string]*ice.Cache{},
|
Caches: map[string]*ice.Cache{},
|
||||||
Configs: map[string]*ice.Config{
|
Configs: map[string]*ice.Config{
|
||||||
"chrome": {Name: "chrome", Help: "chrome", Value: kit.Data(kit.MDB_SHORT, "name")},
|
"chrome": {Name: "chrome", Help: "chrome", Value: kit.Data(kit.MDB_SHORT, "name")},
|
||||||
@ -27,7 +27,7 @@ var Index = &ice.Context{Name: "chrome", Help: "chrome",
|
|||||||
m.Cmdy("history", arg[1:])
|
m.Cmdy("history", arg[1:])
|
||||||
}
|
}
|
||||||
}},
|
}},
|
||||||
"chrome": {Name: "chrome", Help: "标签", List: kit.List(
|
"chrome": {Name: "chrome", Help: "浏览器", List: kit.List(
|
||||||
kit.MDB_INPUT, "text", "name", "name", "action", "auto",
|
kit.MDB_INPUT, "text", "name", "name", "action", "auto",
|
||||||
kit.MDB_INPUT, "text", "name", "wid", "action", "auto",
|
kit.MDB_INPUT, "text", "name", "wid", "action", "auto",
|
||||||
kit.MDB_INPUT, "text", "name", "url",
|
kit.MDB_INPUT, "text", "name", "url",
|
||||||
@ -35,6 +35,7 @@ var Index = &ice.Context{Name: "chrome", Help: "chrome",
|
|||||||
kit.MDB_INPUT, "button", "name", "返回", "cb", "Last",
|
kit.MDB_INPUT, "button", "name", "返回", "cb", "Last",
|
||||||
), Meta: kit.Dict("detail", []string{"编辑", "goBack", "goForward", "duplicate", "reload", "remove"}), Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
), Meta: kit.Dict("detail", []string{"编辑", "goBack", "goForward", "duplicate", "reload", "remove"}), Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||||
if len(arg) == 0 {
|
if len(arg) == 0 {
|
||||||
|
// 窗口列表
|
||||||
m.Richs(ice.WEB_SPACE, nil, "*", func(key string, value map[string]interface{}) {
|
m.Richs(ice.WEB_SPACE, nil, "*", func(key string, value map[string]interface{}) {
|
||||||
if kit.Format(value["type"]) == "chrome" {
|
if kit.Format(value["type"]) == "chrome" {
|
||||||
m.Push(key, value, []string{"time", "name"})
|
m.Push(key, value, []string{"time", "name"})
|
||||||
@ -42,12 +43,12 @@ var Index = &ice.Context{Name: "chrome", Help: "chrome",
|
|||||||
})
|
})
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if arg[0] == "action" {
|
if arg[0] == "action" {
|
||||||
|
// 命令转换
|
||||||
m.Cmdy(ice.WEB_SPACE, m.Option("name"), "tabs", m.Option("tid"), arg[1])
|
m.Cmdy(ice.WEB_SPACE, m.Option("name"), "tabs", m.Option("tid"), arg[1])
|
||||||
arg = []string{m.Option("name"), m.Option("wid")}
|
arg = []string{m.Option("name"), m.Option("wid")}
|
||||||
}
|
}
|
||||||
|
// 下发命令
|
||||||
m.Cmdy(ice.WEB_SPACE, arg[0], "wins", arg[1:])
|
m.Cmdy(ice.WEB_SPACE, arg[0], "wins", arg[1:])
|
||||||
}},
|
}},
|
||||||
"cookie": {Name: "cookie", Help: "数据", List: kit.List(
|
"cookie": {Name: "cookie", Help: "数据", List: kit.List(
|
||||||
@ -57,29 +58,28 @@ var Index = &ice.Context{Name: "chrome", Help: "chrome",
|
|||||||
kit.MDB_INPUT, "button", "name", "返回", "cb", "Last",
|
kit.MDB_INPUT, "button", "name", "返回", "cb", "Last",
|
||||||
), Meta: kit.Dict("detail", []string{"编辑", "删除"}), Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
), Meta: kit.Dict("detail", []string{"编辑", "删除"}), Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||||
if len(arg) == 0 {
|
if len(arg) == 0 {
|
||||||
m.Richs(ice.WEB_SPACE, nil, "*", func(key string, value map[string]interface{}) {
|
// 窗口列表
|
||||||
if kit.Format(value["type"]) == "chrome" {
|
m.Cmdy("chrome")
|
||||||
m.Push(key, value, []string{"time", "name"})
|
|
||||||
}
|
|
||||||
})
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if arg[0] == "action" {
|
if arg[0] == "action" {
|
||||||
|
// 命令转换
|
||||||
m.Cmdy(ice.WEB_SPACE, m.Option("name"), "cookie", arg[1:])
|
m.Cmdy(ice.WEB_SPACE, m.Option("name"), "cookie", arg[1:])
|
||||||
arg = []string{m.Option("name"), m.Option("id")}
|
arg = []string{m.Option("name"), m.Option("id")}
|
||||||
}
|
}
|
||||||
|
// 下发命令
|
||||||
m.Cmdy(ice.WEB_SPACE, arg[0], "cookie", arg[1:])
|
m.Cmdy(ice.WEB_SPACE, arg[0], "cookie", arg[1:])
|
||||||
}},
|
}},
|
||||||
"history": {Name: "history id url title", Help: "历史", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
"history": {Name: "history id url title", Help: "历史", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||||
if len(arg) == 0 {
|
if len(arg) == 0 {
|
||||||
|
// 查看记录
|
||||||
m.Grows("history", nil, "", "", func(index int, value map[string]interface{}) {
|
m.Grows("history", nil, "", "", func(index int, value map[string]interface{}) {
|
||||||
m.Push("", value)
|
m.Push("", value)
|
||||||
})
|
})
|
||||||
m.Sort("id", "int_r")
|
m.Sort("id", "int_r")
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
// 添加记录
|
||||||
m.Grow("history", nil, kit.Dict("hid", arg[0], "url", arg[1], "title", arg[2]))
|
m.Grow("history", nil, kit.Dict("hid", arg[0], "url", arg[1], "title", arg[2]))
|
||||||
}},
|
}},
|
||||||
"bookmark": {Name: "bookmark", Help: "书签", List: kit.List(
|
"bookmark": {Name: "bookmark", Help: "书签", List: kit.List(
|
||||||
@ -89,19 +89,16 @@ var Index = &ice.Context{Name: "chrome", Help: "chrome",
|
|||||||
kit.MDB_INPUT, "button", "name", "返回", "cb", "Last",
|
kit.MDB_INPUT, "button", "name", "返回", "cb", "Last",
|
||||||
), Meta: kit.Dict("detail", []string{"编辑", "删除"}), Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
), Meta: kit.Dict("detail", []string{"编辑", "删除"}), Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||||
if len(arg) == 0 {
|
if len(arg) == 0 {
|
||||||
m.Richs(ice.WEB_SPACE, nil, "*", func(key string, value map[string]interface{}) {
|
// 窗口列表
|
||||||
if kit.Format(value["type"]) == "chrome" {
|
m.Cmdy("chrome")
|
||||||
m.Push(key, value, []string{"time", "name"})
|
|
||||||
}
|
|
||||||
})
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if arg[0] == "action" {
|
if arg[0] == "action" {
|
||||||
|
// 命令转换
|
||||||
m.Cmdy(ice.WEB_SPACE, m.Option("name"), "bookmark", arg[1:])
|
m.Cmdy(ice.WEB_SPACE, m.Option("name"), "bookmark", arg[1:])
|
||||||
arg = []string{m.Option("name"), m.Option("id")}
|
arg = []string{m.Option("name"), m.Option("id")}
|
||||||
}
|
}
|
||||||
|
// 下发命令
|
||||||
m.Cmdy(ice.WEB_SPACE, arg[0], "bookmark", arg[1:])
|
m.Cmdy(ice.WEB_SPACE, arg[0], "bookmark", arg[1:])
|
||||||
}},
|
}},
|
||||||
},
|
},
|
||||||
|
@ -1 +0,0 @@
|
|||||||
# {{title "crx"}}
|
|
@ -1,140 +0,0 @@
|
|||||||
2020-02-05 02:22:41 input v 21 53
|
|
||||||
2020-02-05 02:22:41 input o 21 54
|
|
||||||
2020-02-05 02:22:41 input l 21 55
|
|
||||||
2020-02-05 02:22:41 input c 21 56
|
|
||||||
2020-02-05 02:22:41 input a 21 57
|
|
||||||
2020-02-05 02:22:42 input n 21 58
|
|
||||||
2020-02-05 02:22:42 input o 21 59
|
|
||||||
2020-02-05 02:22:42 input s 21 60
|
|
||||||
2020-02-05 02:22:50 input l 22 46
|
|
||||||
2020-02-05 02:22:50 input o 22 47
|
|
||||||
2020-02-05 02:22:50 input c 22 48
|
|
||||||
2020-02-05 02:22:50 input a 22 49
|
|
||||||
2020-02-05 02:22:50 input l 22 50
|
|
||||||
2020-02-05 02:22:50 input h 22 51
|
|
||||||
2020-02-05 02:22:50 input o 22 52
|
|
||||||
2020-02-05 02:22:51 input s 22 53
|
|
||||||
2020-02-05 02:22:51 input t 22 54
|
|
||||||
2020-02-05 02:22:51 input : 22 55
|
|
||||||
2020-02-05 02:22:52 input 9 22 56
|
|
||||||
2020-02-05 02:22:52 input 0 22 57
|
|
||||||
2020-02-05 02:22:52 input 2 22 58
|
|
||||||
2020-02-05 02:22:52 input 0 22 59
|
|
||||||
2020-02-05 10:48:58 input c 10 33
|
|
||||||
2020-02-05 10:48:58 input r 10 34
|
|
||||||
2020-02-05 10:48:59 input h 10 35
|
|
||||||
2020-02-05 10:48:59 input o 10 36
|
|
||||||
2020-02-05 10:48:59 input m 10 37
|
|
||||||
2020-02-05 10:48:59 input e 10 38
|
|
||||||
2020-02-05 10:49:00 input c 10 33
|
|
||||||
2020-02-05 10:49:00 input h 10 34
|
|
||||||
2020-02-05 10:49:01 input r 10 35
|
|
||||||
2020-02-05 10:49:01 input o 10 36
|
|
||||||
2020-02-05 10:49:01 input m 10 37
|
|
||||||
2020-02-05 10:49:01 input e 10 38
|
|
||||||
2020-02-05 10:49:02 input c 10 49
|
|
||||||
2020-02-05 10:49:02 input r 10 50
|
|
||||||
2020-02-05 10:49:02 input h 10 51
|
|
||||||
2020-02-05 10:49:02 input o 10 52
|
|
||||||
2020-02-05 10:49:02 input m 10 53
|
|
||||||
2020-02-05 10:49:02 input e 10 54
|
|
||||||
2020-02-05 10:49:02 input c 10 49
|
|
||||||
2020-02-05 10:49:02 input h 10 50
|
|
||||||
2020-02-05 10:49:02 input r 10 51
|
|
||||||
2020-02-05 10:49:02 input o 10 52
|
|
||||||
2020-02-05 10:49:02 input m 10 53
|
|
||||||
2020-02-05 10:49:02 input e 10 54
|
|
||||||
2020-02-05 10:49:04 input c 13 4
|
|
||||||
2020-02-05 10:49:04 input r 13 5
|
|
||||||
2020-02-05 10:49:04 input h 13 6
|
|
||||||
2020-02-05 10:49:04 input o 13 7
|
|
||||||
2020-02-05 10:49:04 input m 13 8
|
|
||||||
2020-02-05 10:49:04 input e 13 9
|
|
||||||
2020-02-05 10:49:04 input c 13 4
|
|
||||||
2020-02-05 10:49:04 input h 13 5
|
|
||||||
2020-02-05 10:49:04 input r 13 6
|
|
||||||
2020-02-05 10:49:04 input o 13 7
|
|
||||||
2020-02-05 10:49:04 input m 13 8
|
|
||||||
2020-02-05 10:49:04 input e 13 9
|
|
||||||
2020-02-05 10:49:05 input c 13 21
|
|
||||||
2020-02-05 10:49:05 input r 13 22
|
|
||||||
2020-02-05 10:49:05 input h 13 23
|
|
||||||
2020-02-05 10:49:05 input o 13 24
|
|
||||||
2020-02-05 10:49:05 input m 13 25
|
|
||||||
2020-02-05 10:49:05 input e 13 26
|
|
||||||
2020-02-05 10:49:05 input c 13 21
|
|
||||||
2020-02-05 10:49:05 input h 13 22
|
|
||||||
2020-02-05 10:49:05 input r 13 23
|
|
||||||
2020-02-05 10:49:05 input o 13 24
|
|
||||||
2020-02-05 10:49:05 input m 13 25
|
|
||||||
2020-02-05 10:49:05 input e 13 26
|
|
||||||
2020-02-05 10:49:05 input c 13 37
|
|
||||||
2020-02-05 10:49:05 input r 13 38
|
|
||||||
2020-02-05 10:49:05 input h 13 39
|
|
||||||
2020-02-05 10:49:05 input o 13 40
|
|
||||||
2020-02-05 10:49:05 input m 13 41
|
|
||||||
2020-02-05 10:49:05 input e 13 42
|
|
||||||
2020-02-05 10:49:05 input c 13 37
|
|
||||||
2020-02-05 10:49:05 input h 13 38
|
|
||||||
2020-02-05 10:49:05 input r 13 39
|
|
||||||
2020-02-05 10:49:05 input o 13 40
|
|
||||||
2020-02-05 10:49:05 input m 13 41
|
|
||||||
2020-02-05 10:49:05 input e 13 42
|
|
||||||
2020-02-05 10:49:06 input c 19 31
|
|
||||||
2020-02-05 10:49:06 input r 19 32
|
|
||||||
2020-02-05 10:49:06 input h 19 33
|
|
||||||
2020-02-05 10:49:06 input o 19 34
|
|
||||||
2020-02-05 10:49:06 input m 19 35
|
|
||||||
2020-02-05 10:49:06 input e 19 36
|
|
||||||
2020-02-05 10:49:06 input c 19 31
|
|
||||||
2020-02-05 10:49:06 input h 19 32
|
|
||||||
2020-02-05 10:49:06 input r 19 33
|
|
||||||
2020-02-05 10:49:06 input o 19 34
|
|
||||||
2020-02-05 10:49:06 input m 19 35
|
|
||||||
2020-02-05 10:49:06 input e 19 36
|
|
||||||
2020-02-05 10:49:07 input c 22 4
|
|
||||||
2020-02-05 10:49:07 input r 22 5
|
|
||||||
2020-02-05 10:49:07 input h 22 6
|
|
||||||
2020-02-05 10:49:07 input o 22 7
|
|
||||||
2020-02-05 10:49:07 input m 22 8
|
|
||||||
2020-02-05 10:49:07 input e 22 9
|
|
||||||
2020-02-05 10:49:07 input c 22 4
|
|
||||||
2020-02-05 10:49:07 input h 22 5
|
|
||||||
2020-02-05 10:49:07 input r 22 6
|
|
||||||
2020-02-05 10:49:07 input o 22 7
|
|
||||||
2020-02-05 10:49:07 input m 22 8
|
|
||||||
2020-02-05 10:49:07 input e 22 9
|
|
||||||
2020-02-05 10:49:07 input c 22 21
|
|
||||||
2020-02-05 10:49:07 input r 22 22
|
|
||||||
2020-02-05 10:49:07 input h 22 23
|
|
||||||
2020-02-05 10:49:07 input o 22 24
|
|
||||||
2020-02-05 10:49:07 input m 22 25
|
|
||||||
2020-02-05 10:49:07 input e 22 26
|
|
||||||
2020-02-05 10:49:07 input c 22 21
|
|
||||||
2020-02-05 10:49:07 input h 22 22
|
|
||||||
2020-02-05 10:49:07 input r 22 23
|
|
||||||
2020-02-05 10:49:07 input o 22 24
|
|
||||||
2020-02-05 10:49:07 input m 22 25
|
|
||||||
2020-02-05 10:49:07 input e 22 26
|
|
||||||
2020-02-05 10:49:08 input c 22 37
|
|
||||||
2020-02-05 10:49:08 input r 22 38
|
|
||||||
2020-02-05 10:49:08 input h 22 39
|
|
||||||
2020-02-05 10:49:08 input o 22 40
|
|
||||||
2020-02-05 10:49:08 input m 22 41
|
|
||||||
2020-02-05 10:49:08 input e 22 42
|
|
||||||
2020-02-05 10:49:08 input c 22 37
|
|
||||||
2020-02-05 10:49:08 input h 22 38
|
|
||||||
2020-02-05 10:49:08 input r 22 39
|
|
||||||
2020-02-05 10:49:08 input o 22 40
|
|
||||||
2020-02-05 10:49:08 input m 22 41
|
|
||||||
2020-02-05 10:49:08 input e 22 42
|
|
||||||
2020-02-05 10:49:13 input c 19 5
|
|
||||||
2020-02-05 10:49:14 input r 19 6
|
|
||||||
2020-02-05 10:49:14 input x 19 7
|
|
||||||
2020-02-05 10:49:17 input c 19 20
|
|
||||||
2020-02-05 10:49:17 input r 19 21
|
|
||||||
2020-02-05 10:49:18 input x 19 22
|
|
||||||
2020-02-05 10:49:22 input / 19 33
|
|
||||||
2020-02-05 10:49:22 input c 19 34
|
|
||||||
2020-02-05 10:49:22 input r 19 35
|
|
||||||
2020-02-05 10:49:23 input x 19 36
|
|
@ -7,10 +7,10 @@ import (
|
|||||||
"strings"
|
"strings"
|
||||||
)
|
)
|
||||||
|
|
||||||
var Index = &ice.Context{Name: "docker", Help: "容器管理",
|
var Index = &ice.Context{Name: "docker", Help: "虚拟机",
|
||||||
Caches: map[string]*ice.Cache{},
|
Caches: map[string]*ice.Cache{},
|
||||||
Configs: map[string]*ice.Config{
|
Configs: map[string]*ice.Config{
|
||||||
"docker": {Name: "docker", Help: "docker", Value: kit.Data(kit.MDB_SHORT, "name")},
|
"docker": {Name: "docker", Help: "虚拟机", Value: kit.Data(kit.MDB_SHORT, "name")},
|
||||||
},
|
},
|
||||||
Commands: map[string]*ice.Command{
|
Commands: map[string]*ice.Command{
|
||||||
ice.ICE_INIT: {Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
ice.ICE_INIT: {Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||||
|
@ -11,7 +11,7 @@ import (
|
|||||||
"time"
|
"time"
|
||||||
)
|
)
|
||||||
|
|
||||||
var Index = &ice.Context{Name: "git", Help: "代码管理",
|
var Index = &ice.Context{Name: "git", Help: "代码库",
|
||||||
Caches: map[string]*ice.Cache{},
|
Caches: map[string]*ice.Cache{},
|
||||||
Configs: map[string]*ice.Config{
|
Configs: map[string]*ice.Config{
|
||||||
"repos": {Name: "repos", Help: "仓库", Value: kit.Data(kit.MDB_SHORT, "name", "owner", "https://github.com/shylinux")},
|
"repos": {Name: "repos", Help: "仓库", Value: kit.Data(kit.MDB_SHORT, "name", "owner", "https://github.com/shylinux")},
|
||||||
@ -123,10 +123,21 @@ var Index = &ice.Context{Name: "git", Help: "代码管理",
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
}},
|
}},
|
||||||
"total": {Name: "total", Help: "统计", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
"total": {Name: "total", Help: "统计", List: kit.List(
|
||||||
|
kit.MDB_INPUT, "text", "name", "repos", "action", "auto",
|
||||||
|
kit.MDB_INPUT, "button", "name", "查看", "action", "auto",
|
||||||
|
kit.MDB_INPUT, "button", "name", "返回", "cb", "Last",
|
||||||
|
), Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||||
|
if len(arg) > 0 {
|
||||||
|
m.Richs("repos", nil, arg[0], func(key string, value map[string]interface{}) {
|
||||||
|
m.Cmdy("sum", kit.Value(value, "meta.path"), arg[1:])
|
||||||
|
})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
days := 0
|
days := 0
|
||||||
commit, adds, dels, rest := 0, 0, 0, 0
|
commit, adds, dels, rest := 0, 0, 0, 0
|
||||||
m.Richs("repos", nil, kit.Select("*", arg, 0), func(key string, value map[string]interface{}) {
|
m.Richs("repos", nil, "*", func(key string, value map[string]interface{}) {
|
||||||
m.Push("repos", kit.Value(value, "meta.name"))
|
m.Push("repos", kit.Value(value, "meta.name"))
|
||||||
m.Copy(m.Cmd("sum", kit.Value(value, "meta.path"), "total", "10000").Table(func(index int, value map[string]string, head []string) {
|
m.Copy(m.Cmd("sum", kit.Value(value, "meta.path"), "total", "10000").Table(func(index int, value map[string]string, head []string) {
|
||||||
if kit.Int(value["days"]) > days {
|
if kit.Int(value["days"]) > days {
|
||||||
@ -176,7 +187,7 @@ var Index = &ice.Context{Name: "git", Help: "代码管理",
|
|||||||
if len(arg) > 0 {
|
if len(arg) > 0 {
|
||||||
args = append(args, kit.Select("-n", "--since", strings.Contains(arg[0], "-")))
|
args = append(args, kit.Select("-n", "--since", strings.Contains(arg[0], "-")))
|
||||||
if strings.Contains(arg[0], "-") && !strings.Contains(arg[0], ":") {
|
if strings.Contains(arg[0], "-") && !strings.Contains(arg[0], ":") {
|
||||||
arg[1] = arg[1] + " 00:00:00"
|
arg[0] = arg[0] + " 00:00:00"
|
||||||
}
|
}
|
||||||
args = append(args, arg[0:]...)
|
args = append(args, arg[0:]...)
|
||||||
} else {
|
} else {
|
||||||
|
@ -1 +0,0 @@
|
|||||||
# {{title "input"}}
|
|
@ -1,45 +0,0 @@
|
|||||||
|
|
||||||
" 变量定义
|
|
||||||
func! InputDefine(name, value)
|
|
||||||
if !exists("name") | exec "let " . a:name . " = \"" . a:value . "\"" | endif
|
|
||||||
endfunc
|
|
||||||
|
|
||||||
" 输出日志
|
|
||||||
call InputDefine("g:InputLog", "input.log")
|
|
||||||
fun! InputLog(txt)
|
|
||||||
call writefile([strftime("%Y-%m-%d %H:%M:%S ") . join(a:txt, "")], g:InputLog, "a")
|
|
||||||
endfun
|
|
||||||
|
|
||||||
" 输入转换
|
|
||||||
call InputDefine("g:InputTrans", "localhost:9020/code/input/")
|
|
||||||
fun! InputTrans(code)
|
|
||||||
let res = []
|
|
||||||
for line in split(system("curl -s " . g:InputTrans . a:code), "\n")
|
|
||||||
let word = split(line, " ")
|
|
||||||
if len(word) > 1 | call extend(res, [word[1]]) | endif
|
|
||||||
endfor
|
|
||||||
let res = extend(res, [a:code])
|
|
||||||
return l:res
|
|
||||||
endfun
|
|
||||||
|
|
||||||
" 输入补全
|
|
||||||
fun! InputComplete(firststart, base)
|
|
||||||
call InputLog(["complete", a:base, "(", col("."), ",", line("."), ")", getline(".")])
|
|
||||||
if a:firststart
|
|
||||||
" locate the start of the word
|
|
||||||
let line = getline('.')
|
|
||||||
let start = col('.') - 1
|
|
||||||
while start > 0 && line[start - 1] =~ '\a'
|
|
||||||
let start -= 1
|
|
||||||
endwhile
|
|
||||||
return start
|
|
||||||
else
|
|
||||||
" find months matching with "a:base"
|
|
||||||
" retu
|
|
||||||
return InputTrans(a:base)
|
|
||||||
endif
|
|
||||||
endfun
|
|
||||||
set completefunc=InputComplete
|
|
||||||
|
|
||||||
" autocmd InsertEnter * call ShySync("insert")
|
|
||||||
" autocmd InsertCharPre * call InputCheck()
|
|
@ -48,7 +48,7 @@ func parse(m *ice.Message) {
|
|||||||
m.Info("msg: %v", kit.Formats(data))
|
m.Info("msg: %v", kit.Formats(data))
|
||||||
}
|
}
|
||||||
|
|
||||||
var Index = &ice.Context{Name: "lark", Help: "lark",
|
var Index = &ice.Context{Name: "lark", Help: "机器人",
|
||||||
Caches: map[string]*ice.Cache{},
|
Caches: map[string]*ice.Cache{},
|
||||||
Configs: map[string]*ice.Config{
|
Configs: map[string]*ice.Config{
|
||||||
"app": &ice.Config{Name: "app", Help: "服务配置", Value: kit.Data(kit.MDB_SHORT, "name", "lark", "https://open.feishu.cn")},
|
"app": &ice.Config{Name: "app", Help: "服务配置", Value: kit.Data(kit.MDB_SHORT, "name", "lark", "https://open.feishu.cn")},
|
||||||
@ -63,13 +63,14 @@ var Index = &ice.Context{Name: "lark", Help: "lark",
|
|||||||
m.Cmd(ice.WEB_SPIDE, "add", "lark", m.Conf("app", "meta.lark"))
|
m.Cmd(ice.WEB_SPIDE, "add", "lark", m.Conf("app", "meta.lark"))
|
||||||
}},
|
}},
|
||||||
ice.ICE_EXIT: {Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
ice.ICE_EXIT: {Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||||
m.Save("app")
|
m.Save("app", "user")
|
||||||
}},
|
}},
|
||||||
|
|
||||||
"app": {Name: "app login|token bot", Help: "应用", Hand: func(m *ice.Message, c *ice.Context, key string, arg ...string) {
|
"app": {Name: "app login|token bot", Help: "应用", Hand: func(m *ice.Message, c *ice.Context, key string, arg ...string) {
|
||||||
if len(arg) == 0 {
|
if len(arg) == 0 {
|
||||||
|
// 应用列表
|
||||||
m.Richs("app", nil, "*", func(key string, value map[string]interface{}) {
|
m.Richs("app", nil, "*", func(key string, value map[string]interface{}) {
|
||||||
m.Push("key", value)
|
m.Push("key", value, []string{"time", "name", "id", "expire"})
|
||||||
})
|
})
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@ -90,6 +91,7 @@ var Index = &ice.Context{Name: "lark", Help: "lark",
|
|||||||
})
|
})
|
||||||
|
|
||||||
case "watch":
|
case "watch":
|
||||||
|
// 消息通知
|
||||||
for _, v := range arg[3:] {
|
for _, v := range arg[3:] {
|
||||||
m.Watch(v, "web.chat.lark.send", arg[1], arg[2], v)
|
m.Watch(v, "web.chat.lark.send", arg[1], arg[2], v)
|
||||||
}
|
}
|
||||||
@ -168,7 +170,6 @@ var Index = &ice.Context{Name: "lark", Help: "lark",
|
|||||||
|
|
||||||
post(m, "bot", "GET", "/open-apis/user/v1/batch_get_id", us)
|
post(m, "bot", "GET", "/open-apis/user/v1/batch_get_id", us)
|
||||||
}
|
}
|
||||||
return
|
|
||||||
}},
|
}},
|
||||||
"send": {Name: "send [chat_id|open_id|user_id|email] who [menu] [title] text", Help: "消息", Hand: func(m *ice.Message, c *ice.Context, key string, arg ...string) {
|
"send": {Name: "send [chat_id|open_id|user_id|email] who [menu] [title] text", Help: "消息", Hand: func(m *ice.Message, c *ice.Context, key string, arg ...string) {
|
||||||
var form = map[string]interface{}{"content": map[string]interface{}{}}
|
var form = map[string]interface{}{"content": map[string]interface{}{}}
|
||||||
@ -271,11 +272,10 @@ var Index = &ice.Context{Name: "lark", Help: "lark",
|
|||||||
post(m, "bot", "/open-apis/message/v4/send/", "data", kit.Formats(form))
|
post(m, "bot", "/open-apis/message/v4/send/", "data", kit.Formats(form))
|
||||||
return
|
return
|
||||||
}},
|
}},
|
||||||
"/msg": {Name: "/msg", Help: "消息", Hand: func(m *ice.Message, c *ice.Context, key string, arg ...string) {
|
"/msg": {Name: "/msg", Help: "聊天消息", Hand: func(m *ice.Message, c *ice.Context, key string, arg ...string) {
|
||||||
parse(m)
|
switch parse(m); m.Option("msg.type") {
|
||||||
|
|
||||||
switch m.Option("msg.type") {
|
|
||||||
case "url_verification":
|
case "url_verification":
|
||||||
|
// 绑定验证
|
||||||
m.Push("_output", "result")
|
m.Push("_output", "result")
|
||||||
m.Echo(kit.Format(map[string]interface{}{"challenge": m.Option("msg.challenge")}))
|
m.Echo(kit.Format(map[string]interface{}{"challenge": m.Option("msg.challenge")}))
|
||||||
|
|
||||||
@ -283,26 +283,41 @@ var Index = &ice.Context{Name: "lark", Help: "lark",
|
|||||||
switch m.Option("type") {
|
switch m.Option("type") {
|
||||||
case "chat_disband":
|
case "chat_disband":
|
||||||
case "p2p_chat_create":
|
case "p2p_chat_create":
|
||||||
|
// 创建对话
|
||||||
if m.Options("open_chat_id") {
|
if m.Options("open_chat_id") {
|
||||||
m.Cmdy(".send", m.Option("open_chat_id"), "我们做朋友吧~")
|
m.Cmdy("send", m.Option("open_chat_id"), "我们做朋友吧~")
|
||||||
}
|
}
|
||||||
case "add_bot":
|
case "add_bot":
|
||||||
|
// 加入群聊
|
||||||
if m.Options("open_chat_id") {
|
if m.Options("open_chat_id") {
|
||||||
m.Cmdy(".send", m.Option("open_chat_id"), "我来也~")
|
m.Cmdy("send", m.Option("open_chat_id"), "我来也~")
|
||||||
}
|
}
|
||||||
default:
|
default:
|
||||||
if m.Options("open_chat_id") {
|
if m.Options("open_chat_id") {
|
||||||
|
// 用户登录
|
||||||
m.Option(ice.MSG_USERNAME, m.Option("open_id"))
|
m.Option(ice.MSG_USERNAME, m.Option("open_id"))
|
||||||
m.Option(ice.MSG_USERROLE, m.Cmdx(ice.AAA_ROLE, "check", m.Option(ice.MSG_USERNAME)))
|
m.Option(ice.MSG_USERROLE, m.Cmdx(ice.AAA_ROLE, "check", m.Option(ice.MSG_USERNAME)))
|
||||||
if cmd := kit.Split(m.Option("text_without_at_bot")); m.Right(cmd) {
|
m.Info("%s: %s", m.Option(ice.MSG_USERROLE), m.Option(ice.MSG_USERNAME))
|
||||||
m.Cmdy(cmd)
|
m.Option(ice.MSG_SESSID, m.Cmdx(ice.AAA_USER, "login", m.Option(ice.MSG_USERNAME)))
|
||||||
} else {
|
|
||||||
|
if cmd := kit.Split(m.Option("text_without_at_bot")); !m.Right(cmd) {
|
||||||
m.Echo("no right")
|
m.Echo("no right")
|
||||||
|
} else {
|
||||||
|
// 执行命令
|
||||||
|
msg := m.Cmd(cmd)
|
||||||
|
if m.Hand = false; !msg.Hand {
|
||||||
|
msg = m.Cmd(ice.CLI_SYSTEM, cmd)
|
||||||
|
}
|
||||||
|
if msg.Result() == "" {
|
||||||
|
msg.Table()
|
||||||
|
}
|
||||||
|
// 返回结果
|
||||||
|
m.Cmdy("send", m.Option("open_chat_id"), kit.Select("你好", msg.Result()))
|
||||||
}
|
}
|
||||||
m.Cmdy("send", m.Option("open_chat_id"), kit.Select("你好", m.Result()))
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
case "event_click":
|
case "event_click":
|
||||||
|
// 消息卡片
|
||||||
m.Echo(kit.Format(map[string]interface{}{
|
m.Echo(kit.Format(map[string]interface{}{
|
||||||
"header": map[string]interface{}{
|
"header": map[string]interface{}{
|
||||||
"title": map[string]interface{}{
|
"title": map[string]interface{}{
|
||||||
|
@ -1 +0,0 @@
|
|||||||
# {{title "lk"}}
|
|
@ -5,7 +5,6 @@ import (
|
|||||||
"github.com/shylinux/icebergs/base/web"
|
"github.com/shylinux/icebergs/base/web"
|
||||||
"github.com/shylinux/icebergs/core/chat"
|
"github.com/shylinux/icebergs/core/chat"
|
||||||
"github.com/shylinux/toolkits"
|
"github.com/shylinux/toolkits"
|
||||||
"time"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
var Index = &ice.Context{Name: "mp", Help: "小程序",
|
var Index = &ice.Context{Name: "mp", Help: "小程序",
|
||||||
@ -35,34 +34,16 @@ var Index = &ice.Context{Name: "mp", Help: "小程序",
|
|||||||
msg := m.Cmd(ice.WEB_SPIDE, "weixin", "GET", m.Conf("login", "meta.auth"),
|
msg := m.Cmd(ice.WEB_SPIDE, "weixin", "GET", m.Conf("login", "meta.auth"),
|
||||||
"js_code", m.Option("code"), "appid", m.Conf("login", "meta.appid"), "secret", m.Conf("login", "meta.appmm"))
|
"js_code", m.Option("code"), "appid", m.Conf("login", "meta.appid"), "secret", m.Conf("login", "meta.appmm"))
|
||||||
|
|
||||||
if m.Richs(ice.AAA_USER, nil, msg.Append("openid"), nil) == nil {
|
// 用户登录
|
||||||
// 创建用户
|
m.Option(ice.MSG_USERNAME, msg.Append("openid"))
|
||||||
m.Rich(ice.AAA_USER, nil, kit.Dict(
|
m.Option(ice.MSG_USERROLE, m.Cmdx(ice.AAA_ROLE, "check", m.Option("FromUserName")))
|
||||||
"username", msg.Append("openid"),
|
m.Info("%s: %s", m.Option(ice.MSG_USERROLE), m.Option(ice.MSG_USERNAME))
|
||||||
"expires_in", time.Now().Unix()+kit.Int64(msg.Append("expires_in")),
|
m.Echo(m.Option(ice.MSG_SESSID, m.Cmdx(ice.AAA_USER, "login", m.Option(ice.MSG_USERNAME))))
|
||||||
"session_key", msg.Append("session_key"),
|
|
||||||
"usernode", m.Conf(ice.CLI_RUNTIME, "boot.hostname"),
|
|
||||||
))
|
|
||||||
m.Event(ice.USER_CREATE, msg.Append("openid"))
|
|
||||||
}
|
|
||||||
|
|
||||||
if m.Options(ice.MSG_SESSID) && m.Cmdx(ice.AAA_SESS, "check", m.Option(ice.MSG_SESSID)) == msg.Append("openid") {
|
|
||||||
// 复用会话
|
|
||||||
m.Echo(m.Option(ice.MSG_SESSID))
|
|
||||||
} else {
|
|
||||||
// 创建会话
|
|
||||||
role := m.Conf("login", kit.Keys("meta.userrole", msg.Append("openid")))
|
|
||||||
sessid := m.Rich(ice.AAA_SESS, nil, kit.Dict(
|
|
||||||
"username", msg.Append("openid"), "userrole", role,
|
|
||||||
))
|
|
||||||
m.Info("user: %s role: %s sess: %s", msg.Append("openid"), role, sessid)
|
|
||||||
m.Echo(msg.Option(ice.MSG_SESSID, sessid))
|
|
||||||
}
|
|
||||||
|
|
||||||
case "info":
|
case "info":
|
||||||
|
// 用户信息
|
||||||
m.Richs(ice.AAA_SESS, nil, m.Option(ice.MSG_SESSID), func(key string, value map[string]interface{}) {
|
m.Richs(ice.AAA_SESS, nil, m.Option(ice.MSG_SESSID), func(key string, value map[string]interface{}) {
|
||||||
m.Richs(ice.AAA_USER, nil, value["username"], func(key string, value map[string]interface{}) {
|
m.Richs(ice.AAA_USER, nil, value["username"], func(key string, value map[string]interface{}) {
|
||||||
// 注册用户
|
|
||||||
value["gender"] = m.Option("gender")
|
value["gender"] = m.Option("gender")
|
||||||
value["avatar"] = m.Option("avatarUrl")
|
value["avatar"] = m.Option("avatarUrl")
|
||||||
value["nickname"] = m.Option("nickName")
|
value["nickname"] = m.Option("nickName")
|
||||||
@ -81,15 +62,21 @@ var Index = &ice.Context{Name: "mp", Help: "小程序",
|
|||||||
m.Echo("401").Push("_output", "status")
|
m.Echo("401").Push("_output", "status")
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
m.Cmd(ice.WEB_SPACE, "auth", m.Option("auth"), m.Option(ice.MSG_USERNAME), m.Option(ice.MSG_USERROLE))
|
switch m.Option("type") {
|
||||||
|
case "active":
|
||||||
|
// 授权登录
|
||||||
|
m.Cmd(ice.WEB_SPACE, "auth", m.Option("auth"), m.Option(ice.MSG_USERNAME), m.Option(ice.MSG_USERROLE))
|
||||||
|
}
|
||||||
|
|
||||||
case "cmds":
|
case "cmds":
|
||||||
if arg = kit.Split(arg[1]); m.Right(arg) {
|
if arg = kit.Split(arg[1]); !m.Right(arg) {
|
||||||
m.Hand = false
|
return
|
||||||
if m.Cmdy(arg); !m.Hand {
|
}
|
||||||
m.Set("result")
|
|
||||||
m.Cmdy(ice.CLI_SYSTEM, arg)
|
// 执行命令
|
||||||
}
|
msg := m.Cmd(arg)
|
||||||
|
if m.Hand = false; !msg.Hand {
|
||||||
|
msg = m.Cmd(ice.CLI_SYSTEM, arg)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}},
|
}},
|
||||||
|
@ -8,7 +8,7 @@ import (
|
|||||||
"path"
|
"path"
|
||||||
)
|
)
|
||||||
|
|
||||||
var Index = &ice.Context{Name: "pi", Help: "pi",
|
var Index = &ice.Context{Name: "pi", Help: "开发板",
|
||||||
Caches: map[string]*ice.Cache{},
|
Caches: map[string]*ice.Cache{},
|
||||||
Configs: map[string]*ice.Config{
|
Configs: map[string]*ice.Config{
|
||||||
"pi": {Name: "pi", Help: "pi", Value: kit.Data(kit.MDB_SHORT, "name")},
|
"pi": {Name: "pi", Help: "pi", Value: kit.Data(kit.MDB_SHORT, "name")},
|
||||||
|
@ -26,7 +26,7 @@ func (f *Frame) Close(m *ice.Message, arg ...string) bool {
|
|||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
var Index = &ice.Context{Name: "tmux", Help: "终端管理",
|
var Index = &ice.Context{Name: "tmux", Help: "命令行",
|
||||||
Caches: map[string]*ice.Cache{},
|
Caches: map[string]*ice.Cache{},
|
||||||
Configs: map[string]*ice.Config{
|
Configs: map[string]*ice.Config{
|
||||||
"buffer": {Name: "buffer", Help: "缓存", Value: kit.Data()},
|
"buffer": {Name: "buffer", Help: "缓存", Value: kit.Data()},
|
||||||
|
@ -1,17 +1,36 @@
|
|||||||
package wx
|
package wx
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"crypto/sha1"
|
|
||||||
"encoding/hex"
|
|
||||||
"encoding/xml"
|
|
||||||
"github.com/shylinux/icebergs"
|
"github.com/shylinux/icebergs"
|
||||||
"github.com/shylinux/icebergs/base/web"
|
"github.com/shylinux/icebergs/base/web"
|
||||||
"github.com/shylinux/icebergs/core/chat"
|
"github.com/shylinux/icebergs/core/chat"
|
||||||
"github.com/shylinux/toolkits"
|
"github.com/shylinux/toolkits"
|
||||||
|
|
||||||
|
"crypto/sha1"
|
||||||
|
"encoding/hex"
|
||||||
|
"encoding/xml"
|
||||||
"sort"
|
"sort"
|
||||||
"strings"
|
"strings"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
func parse(m *ice.Message) {
|
||||||
|
data := struct {
|
||||||
|
ToUserName string
|
||||||
|
FromUserName string
|
||||||
|
CreateTime int
|
||||||
|
MsgId int64
|
||||||
|
MsgType string
|
||||||
|
Content string
|
||||||
|
}{}
|
||||||
|
xml.NewDecoder(m.R.Body).Decode(&data)
|
||||||
|
m.Option("ToUserName", data.ToUserName)
|
||||||
|
m.Option("FromUserName", data.FromUserName)
|
||||||
|
m.Option("CreateTime", data.CreateTime)
|
||||||
|
|
||||||
|
m.Option("MsgType", data.MsgType)
|
||||||
|
m.Option("Content", data.Content)
|
||||||
|
}
|
||||||
|
|
||||||
func reply(m *ice.Message) {
|
func reply(m *ice.Message) {
|
||||||
m.Push("_output", "result")
|
m.Push("_output", "result")
|
||||||
m.Render(m.Conf("login", "meta.template.text"))
|
m.Render(m.Conf("login", "meta.template.text"))
|
||||||
@ -89,58 +108,37 @@ var Index = &ice.Context{Name: "wx", Help: "公众号",
|
|||||||
"/login/": {Name: "/login/", Help: "认证", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
"/login/": {Name: "/login/", Help: "认证", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||||
check := []string{m.Conf("login", "meta.token"), m.Option("timestamp"), m.Option("nonce")}
|
check := []string{m.Conf("login", "meta.token"), m.Option("timestamp"), m.Option("nonce")}
|
||||||
sort.Strings(check)
|
sort.Strings(check)
|
||||||
b := sha1.Sum([]byte(strings.Join(check, "")))
|
if b := sha1.Sum([]byte(strings.Join(check, ""))); m.Warn(m.Option("signature") != hex.EncodeToString(b[:]), "error") {
|
||||||
if m.Warn(m.Option("signature") != hex.EncodeToString(b[:]), "error") {
|
|
||||||
// 验证失败
|
// 验证失败
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if m.Option("echostr") != "" {
|
if m.Option("echostr") != "" {
|
||||||
|
// 绑定验证
|
||||||
m.Push("_output", "result")
|
m.Push("_output", "result")
|
||||||
m.Echo(m.Option("echostr"))
|
m.Echo(m.Option("echostr"))
|
||||||
// 绑定验证
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
// 解析数据
|
// 解析数据
|
||||||
data := struct {
|
parse(m)
|
||||||
ToUserName string
|
|
||||||
FromUserName string
|
|
||||||
CreateTime int
|
|
||||||
MsgType string
|
|
||||||
Content string
|
|
||||||
MsgId int64
|
|
||||||
}{}
|
|
||||||
xml.NewDecoder(m.R.Body).Decode(&data)
|
|
||||||
m.Option("ToUserName", data.ToUserName)
|
|
||||||
m.Option("FromUserName", data.FromUserName)
|
|
||||||
m.Option("CreateTime", data.CreateTime)
|
|
||||||
|
|
||||||
m.Option(ice.MSG_USERNAME, data.FromUserName)
|
// 用户登录
|
||||||
if m.Richs(ice.AAA_USER, nil, m.Option(ice.MSG_USERNAME), nil) == nil {
|
m.Option(ice.MSG_USERNAME, m.Option("FromUserName"))
|
||||||
// 创建用户
|
m.Option(ice.MSG_USERROLE, m.Cmdx(ice.AAA_ROLE, "check", m.Option("FromUserName")))
|
||||||
m.Rich(ice.AAA_USER, nil, kit.Dict(
|
|
||||||
"username", m.Option(ice.MSG_USERNAME),
|
|
||||||
"usernode", m.Conf(ice.CLI_RUNTIME, "boot.hostname"),
|
|
||||||
))
|
|
||||||
m.Event(ice.USER_CREATE, m.Option(ice.MSG_USERNAME))
|
|
||||||
}
|
|
||||||
|
|
||||||
m.Option(ice.MSG_USERROLE, m.Cmdx(ice.AAA_ROLE, "check", data.FromUserName))
|
|
||||||
m.Info("%s: %s", m.Option(ice.MSG_USERROLE), m.Option(ice.MSG_USERNAME))
|
m.Info("%s: %s", m.Option(ice.MSG_USERROLE), m.Option(ice.MSG_USERNAME))
|
||||||
|
m.Option(ice.MSG_SESSID, m.Cmdx(ice.AAA_USER, "login", m.Option(ice.MSG_USERNAME)))
|
||||||
|
|
||||||
m.Option(ice.MSG_SESSID, m.Cmdx(ice.AAA_SESS, "create", m.Option(ice.MSG_USERNAME), m.Option(ice.MSG_USERROLE)))
|
switch m.Option("MsgType") {
|
||||||
m.Info("sessid: %s", m.Option(ice.MSG_SESSID))
|
|
||||||
|
|
||||||
switch m.Option("MsgType", data.MsgType) {
|
|
||||||
case "text":
|
case "text":
|
||||||
if cmds := kit.Split(data.Content); !m.Right(cmds) {
|
if cmds := kit.Split(m.Option("Content")); !m.Right(cmds) {
|
||||||
action(m.Cmdy("menu"))
|
action(m.Cmdy("menu"))
|
||||||
} else {
|
} else {
|
||||||
switch cmds[0] {
|
switch cmds[0] {
|
||||||
case "menu":
|
case "menu":
|
||||||
action(m.Cmdy("menu"))
|
action(m.Cmdy("menu"))
|
||||||
default:
|
default:
|
||||||
|
// 执行命令
|
||||||
msg := m.Cmd(cmds)
|
msg := m.Cmd(cmds)
|
||||||
if m.Hand = false; !msg.Hand {
|
if m.Hand = false; !msg.Hand {
|
||||||
msg = m.Cmd(ice.CLI_SYSTEM, cmds)
|
msg = m.Cmd(ice.CLI_SYSTEM, cmds)
|
||||||
@ -148,6 +146,8 @@ var Index = &ice.Context{Name: "wx", Help: "公众号",
|
|||||||
if msg.Result() == "" {
|
if msg.Result() == "" {
|
||||||
msg.Table()
|
msg.Table()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 返回结果
|
||||||
reply(m.Push("reply", msg.Result()))
|
reply(m.Push("reply", msg.Result()))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1 +0,0 @@
|
|||||||
# {{title "wx"}}
|
|
Loading…
x
Reference in New Issue
Block a user