diff --git a/.gitignore b/.gitignore index 138d68b..52240ec 100644 --- a/.gitignore +++ b/.gitignore @@ -4,4 +4,5 @@ sillyGirl .vscode dev.go .DS_Store -develop/jd_cookie \ No newline at end of file +develop/jd_cookie +*.cache \ No newline at end of file diff --git a/core/function.go b/core/function.go index 85d473b..b3c0520 100644 --- a/core/function.go +++ b/core/function.go @@ -11,15 +11,24 @@ import ( "github.com/beego/beego/v2/core/logs" "github.com/cdle/sillyGirl/im" "github.com/cdle/sillyGirl/im/tg" + cron "github.com/robfig/cron/v3" tb "gopkg.in/tucnak/telebot.v2" ) +var c *cron.Cron + +func init() { + c = cron.New() + c.Start() +} + type Function struct { Rules []string FindAll bool Admin bool Handle func(s im.Sender) interface{} Regex bool + Cron string } var pname = regexp.MustCompile(`/([^/\s]+)`).FindStringSubmatch(os.Args[0])[1] @@ -124,6 +133,11 @@ func AddCommand(prefix string, cmds []Function) { } } functions = append(functions, cmd) + if cmd.Cron != "" { + c.AddFunc(cmd.Cron, func() { + cmd.Handle(nil) + }) + } } } diff --git a/core/store.go b/core/store.go new file mode 100644 index 0000000..6f3f737 --- /dev/null +++ b/core/store.go @@ -0,0 +1,39 @@ +package core + +import ( + "github.com/boltdb/bolt" +) + +var name = "sillyGirl" +var db *bolt.DB + +func init() { + var err error + db, err = bolt.Open(ExecPath+"/"+name+".cache", 0600, nil) + if err != nil { + panic(err) + } + err = db.Update(func(tx *bolt.Tx) error { + b := tx.Bucket([]byte(name)) + if b == nil { + tx.CreateBucket([]byte(name)) + } + return nil + }) +} + +func Set(key string, value string) { + db.Update(func(tx *bolt.Tx) error { + tx.Bucket([]byte(name)).Put([]byte(key), []byte(value)) + return nil + }) +} + +func Get(key string) string { + value := "" + db.View(func(tx *bolt.Tx) error { + value = string(tx.Bucket([]byte(name)).Get([]byte(key))) + return nil + }) + return value +} diff --git a/core/test.go b/core/test.go new file mode 100644 index 0000000..c536d6f --- /dev/null +++ b/core/test.go @@ -0,0 +1,36 @@ +package core + +import ( + "errors" + + "github.com/cdle/sillyGirl/im" +) + +func init() { + AddCommand("", []Function{ + { + Rules: []string{"set ? ?"}, + Handle: func(s im.Sender) interface{} { + Set(s.Get(0), s.Get(1)) + return "设置成功" + }, + }, + { + Rules: []string{"delete ?"}, + Handle: func(s im.Sender) interface{} { + Set(s.Get(), "") + return "删除成功" + }, + }, + { + Rules: []string{"get ?"}, + Handle: func(s im.Sender) interface{} { + v := Get(s.Get()) + if v == "" { + return errors.New("空值") + } + return v + }, + }, + }) +} diff --git a/develop/qinglong/cron.go b/develop/qinglong/cron.go index 5f5fe03..c894259 100644 --- a/develop/qinglong/cron.go +++ b/develop/qinglong/cron.go @@ -198,7 +198,8 @@ func init() { { Rules: []string{`cron hide duplicate`}, Admin: true, - Handle: func(s im.Sender) interface{} { + Cron: "*/10 * * * *", + Handle: func(_ im.Sender) interface{} { w := func(s string) int { if strings.Contains(s, "shufflewzc") { return 1 @@ -232,9 +233,9 @@ func init() { tasks[crons[i].Name] = crons[i] } if err := Req(CRONS, PUT, "/disable", []byte(fmt.Sprintf(`["%s"]`, dup.ID))); err != nil { - s.Reply(fmt.Sprintf("隐藏 %v %v %v", dup.Name, dup.Command, err)) + // s.Reply(fmt.Sprintf("隐藏 %v %v %v", dup.Name, dup.Command, err)) } else { - s.Reply(fmt.Sprintf("已隐藏重复任务 %v %v", dup.Name, dup.Command)) + // s.Reply(fmt.Sprintf("已隐藏重复任务 %v %v", dup.Name, dup.Command)) } } else { tasks[crons[i].Name] = crons[i] diff --git a/go.mod b/go.mod index a8536f3..3e06129 100644 --- a/go.mod +++ b/go.mod @@ -5,7 +5,9 @@ go 1.16 require ( github.com/astaxie/beego v1.12.3 github.com/beego/beego/v2 v2.0.1 + github.com/boltdb/bolt v1.3.1 github.com/buger/jsonparser v1.1.1 + github.com/robfig/cron/v3 v3.0.1 gopkg.in/tucnak/telebot.v2 v2.4.0 gopkg.in/yaml.v2 v2.4.0 ) diff --git a/go.sum b/go.sum index e9de774..ed30261 100644 --- a/go.sum +++ b/go.sum @@ -16,6 +16,8 @@ github.com/beego/x2j v0.0.0-20131220205130-a0352aadc542/go.mod h1:kSeGC/p1AbBiEp github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= +github.com/boltdb/bolt v1.3.1 h1:JQmyP4ZBrce+ZQu0dY660FMfatumYDLun9hBCUVIkF4= +github.com/boltdb/bolt v1.3.1/go.mod h1:clJnj/oiGkjum5o1McbSZDSLxVThjynRyGBgiAx27Ps= github.com/bradfitz/gomemcache v0.0.0-20180710155616-bc664df96737/go.mod h1:PmM6Mmwb0LSuEubjR8N7PtNe1KxZLtOUHtbeikc5h60= github.com/buger/jsonparser v1.1.1 h1:2PnMjfWD7wBILjqQbt530v576A/cAbQvEW9gGIpYMUs= github.com/buger/jsonparser v1.1.1/go.mod h1:6RYKKt7H4d4+iWqouImQ9R2FZql3VbhNgx27UK13J/0= @@ -128,6 +130,8 @@ github.com/prometheus/common v0.10.0/go.mod h1:Tlit/dnDKsSWFlCLTWaA1cyBgKHSMdTB8 github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= +github.com/robfig/cron/v3 v3.0.1 h1:WdRxkvbJztn8LMz/QEvLN5sBU+xKpSqwwUO1Pjr4qDs= +github.com/robfig/cron/v3 v3.0.1/go.mod h1:eQICP3HwyT7UooqI/z+Ov+PtYAWygg1TEWWzGIFLtro= github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= github.com/shiena/ansicolor v0.0.0-20151119151921-a422bbe96644 h1:X+yvsM2yrEktyI+b2qND5gpH8YhURn0k8OCaeRnkINo= github.com/shiena/ansicolor v0.0.0-20151119151921-a422bbe96644/go.mod h1:nkxAfR/5quYxwPZhyDxgasBMnRtBZd0FCEpawpjMUFg= @@ -198,6 +202,7 @@ golang.org/x/sys v0.0.0-20191010194322-b09406accb47/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200106162015-b016eb3dc98e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200615200032-f1bc736245b1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f h1:+Nyd8tzPX9R7BWHguqsrbFdRx3WQ/1ib8I44HXV5yTA= golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=