forked from x/icebergs
106 lines
2.8 KiB
Go
106 lines
2.8 KiB
Go
package ctx
|
|
|
|
import (
|
|
"github.com/shylinux/icebergs"
|
|
"github.com/shylinux/toolkits"
|
|
|
|
"encoding/json"
|
|
"os"
|
|
"sort"
|
|
)
|
|
|
|
var Index = &ice.Context{Name: "ctx", Help: "元始模块",
|
|
Caches: map[string]*ice.Cache{},
|
|
Configs: map[string]*ice.Config{},
|
|
Commands: map[string]*ice.Command{
|
|
"context": {Name: "context", Help: "模块", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
|
ice.Pulse.Travel(func(p *ice.Context, s *ice.Context) {
|
|
if p != nil {
|
|
m.Push("ups", p.Name)
|
|
} else {
|
|
m.Push("ups", "shy")
|
|
}
|
|
m.Push("name", s.Name)
|
|
m.Push("status", s.Cap("status"))
|
|
m.Push("stream", s.Cap("stream"))
|
|
m.Push("help", s.Help)
|
|
})
|
|
}},
|
|
"command": {Name: "command", Help: "命令", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
|
if len(arg) == 0 {
|
|
ice.Pulse.Travel(func(p *ice.Context, s *ice.Context) {
|
|
list := []string{}
|
|
for k := range s.Commands {
|
|
if k[0] == '/' || k[0] == '_' {
|
|
continue
|
|
}
|
|
list = append(list, k)
|
|
}
|
|
sort.Strings(list)
|
|
|
|
for _, k := range list {
|
|
v := s.Commands[k]
|
|
if p != nil && p != ice.Index {
|
|
m.Push("key", p.Name+"."+s.Name)
|
|
} else {
|
|
m.Push("key", s.Name)
|
|
}
|
|
m.Push("index", k)
|
|
m.Push("name", v.Name)
|
|
m.Push("help", v.Help)
|
|
}
|
|
})
|
|
return
|
|
}
|
|
|
|
m.Search(arg[0]+"."+arg[1], func(p *ice.Context, s *ice.Context, key string) {
|
|
if i, ok := s.Commands[key]; ok {
|
|
if len(arg) == 2 {
|
|
m.Push("name", i.Name)
|
|
m.Push("help", i.Help)
|
|
m.Push("meta", kit.Format(i.Meta))
|
|
m.Push("list", kit.Format(i.List))
|
|
} else {
|
|
if i.Meta != nil && kit.Format(i.Meta["remote"]) == "true" && m.Option("you") != "" {
|
|
m.Copy(m.Spawns(s).Cmd("web.space", m.Option("you"), "ctx.command", arg[0], arg[1], "run", arg[3:]))
|
|
} else {
|
|
m.Copy(m.Spawns(s).Runs(key, key, arg[3:]...))
|
|
}
|
|
}
|
|
}
|
|
})
|
|
}},
|
|
"config": {Name: "config", Help: "配置", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
|
switch arg[0] {
|
|
case "save":
|
|
if f, p, e := kit.Create(arg[1]); m.Assert(e) {
|
|
data := map[string]interface{}{}
|
|
for _, k := range arg[2:] {
|
|
data[k] = m.Confv(k)
|
|
}
|
|
if s, e := json.MarshalIndent(data, "", " "); m.Assert(e) {
|
|
if n, e := f.Write(s); m.Assert(e) {
|
|
m.Log("info", "save %d %s", n, p)
|
|
}
|
|
}
|
|
m.Echo(p)
|
|
}
|
|
case "load":
|
|
if f, e := os.Open(arg[1]); e == nil {
|
|
data := map[string]interface{}{}
|
|
json.NewDecoder(f).Decode(&data)
|
|
|
|
for k, v := range data {
|
|
m.Search(k, func(p *ice.Context, s *ice.Context, key string) {
|
|
m.Log("info", "load %s.%s %v", s.Name, key, kit.Format(v))
|
|
s.Configs[key].Value = v
|
|
})
|
|
}
|
|
}
|
|
}
|
|
}},
|
|
},
|
|
}
|
|
|
|
func init() { ice.Index.Register(Index, nil) }
|