1
0
forked from x/icebergs

add cli.python

This commit is contained in:
shaoying 2020-01-14 21:14:57 +08:00
parent 4a96d9d46e
commit ea4da57332
7 changed files with 81 additions and 8 deletions

View File

@ -18,6 +18,7 @@ var Index = &ice.Context{Name: "cli", Help: "命令模块",
Configs: map[string]*ice.Config{ Configs: map[string]*ice.Config{
ice.CLI_RUNTIME: {Name: "runtime", Help: "运行环境", Value: kit.Dict()}, ice.CLI_RUNTIME: {Name: "runtime", Help: "运行环境", Value: kit.Dict()},
ice.CLI_SYSTEM: {Name: "system", Help: "系统命令", Value: kit.Data()}, ice.CLI_SYSTEM: {Name: "system", Help: "系统命令", Value: kit.Data()},
"python": {Name: "python", Help: "系统命令", Value: kit.Data("python", "python", "pip", "pip")},
}, },
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) {
@ -109,6 +110,17 @@ var Index = &ice.Context{Name: "cli", Help: "命令模块",
m.Echo(out.String()) m.Echo(out.String())
} }
}}, }},
"python": {Name: "python", Help: "运行环境", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
prefix := []string{ice.CLI_SYSTEM, m.Conf("python", "meta.python")}
switch arg[0] {
case "qrcode":
m.Cmdy(prefix, "-c", fmt.Sprintf(`import pyqrcode; print(pyqrcode.create("%s").terminal(quiet_zone=1))`, arg[1]))
case "install":
m.Cmdy(prefix[:1], m.Conf("python", "meta.pip"), "install", arg[1:])
default:
m.Cmdy(prefix, arg)
}
}},
}, },
} }

View File

@ -1,10 +1,10 @@
package wiki package wiki
var title = `<{{.Option "level"}} class="story" data-type="{{.Option "type"}}" data-name="{{.Option "prefix"}}" data-text="{{.Option "text"}}">{{.Option "prefix"}}{{.Option "content"}}</{{.Option "level"}}>` var title = `<{{.Option "level"}} class="story" data-type="{{.Option "type"}}" data-name="{{.Option "prefix"}}" data-text="{{.Option "text"}}">{{.Option "prefix"}}{{.Option "content"}}</{{.Option "level"}}>`
var brief = `<p class="story" data-type="{{.Option "type"}}" data-name="{{.Option "name"}}" data-text="{{.Option "input"}}">{{.Option "text"}}</p>` var brief = `<p class="story" data-type="{{.Option "type"}}" data-name="{{.Option "name"}}" data-text="{{.Option "text"}}">{{.Option "text"}}</p>`
var refer = `<ul class="story" var refer = `<ul class="story"
data-type="{{.Option "type"}}" data-name="{{.Option "name"}}" data-text="{{.Option "text"}}"> data-type="{{.Option "type"}}" data-name="{{.Option "name"}}" data-text="{{.Option "text"}}">
{{range $index, $value := .Optionv "list"}}<li>{{index $value 0}} {{index $value 1}}</li>{{end}}</ul>` {{range $index, $value := .Optionv "list"}}<li>{{index $value 0}}: {{index $value 1}}</li>{{end}}</ul>`
var spark = `<p>{{.}}</p>` var spark = `<p>{{.}}</p>`
var shell = `<div class="story code" data-type="{{.Option "type"}}" data-name="{{.Option "name"}}" data-text="{{.Option "input"}}">$ {{.Option "input"}} var shell = `<div class="story code" data-type="{{.Option "type"}}" data-name="{{.Option "name"}}" data-text="{{.Option "input"}}">$ {{.Option "input"}}

View File

@ -9,7 +9,6 @@ import (
"bytes" "bytes"
"fmt" "fmt"
"html"
"path" "path"
"strings" "strings"
) )
@ -113,8 +112,8 @@ var Index = &ice.Context{Name: "wiki", Help: "文档中心",
output = m.Cmdx("cli.system", "sh", "-c", strings.Join(arg, " ")) output = m.Cmdx("cli.system", "sh", "-c", strings.Join(arg, " "))
} }
m.Option("input", html.EscapeString(input)) m.Option("input", input)
m.Option("output", html.EscapeString(output)) m.Option("output", output)
m.Render(m.Conf("spark", ice.Meta("template")), m.Option("name")) m.Render(m.Conf("spark", ice.Meta("template")), m.Option("name"))
m.Render(m.Conf("shell", ice.Meta("template"))) m.Render(m.Conf("shell", ice.Meta("template")))
}}, }},
@ -130,14 +129,14 @@ var Index = &ice.Context{Name: "wiki", Help: "文档中心",
m.Option("type", "refer") m.Option("type", "refer")
m.Option("name", arg[0]) m.Option("name", arg[0])
m.Option("text", arg[1]) m.Option("text", arg[1])
list := []interface{}{} list := [][]string{}
for _, v := range kit.Split(arg[1], "\n") { for _, v := range kit.Split(arg[1], "\n") {
list = append(list, kit.Split(v, " ")) list = append(list, kit.Split(v, " "))
} }
m.Optionv("list", list) m.Optionv("list", list)
m.Render(m.Conf("order", ice.Meta("template"))) m.Render(m.Conf("refer", ice.Meta("template")))
}}, }},
"brief": {Name: "brief text", Help: "摘要", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { "brief": {Name: "brief name text", Help: "摘要", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
m.Option("type", "brief") m.Option("type", "brief")
m.Option("name", arg[0]) m.Option("name", arg[0])
m.Option("text", arg[1]) m.Option("text", arg[1])

56
misc/wx/wx.go Normal file
View File

@ -0,0 +1,56 @@
package wx
import (
"github.com/shylinux/icebergs"
"github.com/shylinux/icebergs/base/cli"
"github.com/shylinux/toolkits"
"regexp"
)
var Index = &ice.Context{Name: "wx", Help: "wx",
Caches: map[string]*ice.Cache{},
Configs: map[string]*ice.Config{
"login": {Name: "login", Help: "认证", Value: kit.Data("wechat", "https://login.weixin.qq.com")},
},
Commands: map[string]*ice.Command{
ice.ICE_INIT: {Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
m.Cmd(ice.WEB_SPIDE, "add", "wechat", m.Conf("login", "meta.wechat"))
}},
ice.ICE_EXIT: {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) {
what := m.Cmdx(ice.WEB_SPIDE, "wechat", "raw", "GET", "/jslogin", "appid", "wx782c26e4c19acffb", "fun", "new")
// what := `window.QRLogin.code = 200; window.QRLogin.uuid = "gZUohppbCw==";`
reg, _ := regexp.Compile(`window.QRLogin.code = (\d+); window.QRLogin.uuid = "(\S+?)";`)
if list := reg.FindStringSubmatch(what); list[1] == "200" {
m.Richs(ice.WEB_SPIDE, nil, "wechat", func(key string, value map[string]interface{}) {
if qrcode := kit.Format("%s/l/%s", kit.Value(value, "client.url"), list[2]); m.R == nil {
m.Cmdy("cli.python", "qrcode", qrcode)
} else {
m.Push("_output", "qrcode").Echo(qrcode)
}
m.Gos(m, func(m *ice.Message) {
reg, _ := regexp.Compile(`window.code=(\d+)`)
for i := 0; i < 1000; i++ {
what := m.Cmdx(ice.WEB_SPIDE, "wechat", "raw", "GET", "/cgi-bin/mmwebwx-bin/login", "loginicon", "true", "uuid", list[2], "tip", "1", "r", kit.Int(m.Time("stamp"))/1579, "_", m.Time("stamp"))
// window.code=200; window.redirect_uri="https://wx2.qq.com/cgi-bin/mmwebwx-bin/webwxnewloginpage?ticket=A7_l6ng7wSjNbs7-qD3ArIRJ@qrticket_0&uuid=Ia1-kbZ0wA==&lang=zh_CN&scan=1579005657";
if list := reg.FindStringSubmatch(what); list[1] == "200" {
reg, _ := regexp.Compile(`window.redirect_uri="(\S+)";`)
if list := reg.FindStringSubmatch(what); len(list) > 1 {
what := m.Cmdx(ice.WEB_SPIDE, "wechat", "raw", "GET", list[1])
m.Info("what %s", what)
break
}
}
m.Info("wait scan %v", list)
m.Sleep("1s")
}
})
})
}
}},
},
}
func init() { cli.Index.Register(Index, nil) }

1
misc/wx/wx.md Normal file
View File

@ -0,0 +1 @@
# {{title "wx"}}

View File

@ -7,6 +7,7 @@ import (
_ "github.com/shylinux/icebergs/misc" _ "github.com/shylinux/icebergs/misc"
_ "github.com/shylinux/icebergs/misc/mp" _ "github.com/shylinux/icebergs/misc/mp"
_ "github.com/shylinux/icebergs/misc/wx"
) )
func main() { func main() {

View File

@ -104,6 +104,9 @@ build() {
tutor() { tutor() {
mkdir $1 mkdir $1
[ -f "$1/$1.md" ] || cat >> "$1/$1.md" <<END
# {{title "$1"}}
END
[ -f "$1/$1.go" ] || cat >> "$1/$1.go" <<END [ -f "$1/$1.go" ] || cat >> "$1/$1.go" <<END
package $1 package $1
@ -131,6 +134,7 @@ var Index = &ice.Context{Name: "$1", Help: "$1",
func init() { cli.Index.Register(Index, nil) } func init() { cli.Index.Register(Index, nil) }
END END
ls $1
} }
cmd=build && [ "$1" != "" ] && cmd=$1 && shift cmd=build && [ "$1" != "" ] && cmd=$1 && shift