diff --git a/control/rule.go b/control/rule.go index 2f8d6ebd..05a54452 100644 --- a/control/rule.go +++ b/control/rule.go @@ -19,6 +19,7 @@ var ( // managers 每个插件对应的管理 managers = map[string]*Control{} mu = sync.RWMutex{} + hasinit bool ) // Control is to control the plugins. @@ -122,61 +123,66 @@ func copyMap(m map[string]*Control) map[string]*Control { } func init() { - err := os.MkdirAll("data/control", 0755) - if err != nil { - panic(err) + if !hasinit { + mu.Lock() + if !hasinit { + err := os.MkdirAll("data/control", 0755) + if err != nil { + panic(err) + } else { + hasinit = true + zero.OnCommandGroup([]string{"启用", "enable"}, zero.AdminPermission, zero.OnlyGroup). + Handle(func(ctx *zero.Ctx) { + model := extension.CommandModel{} + _ = ctx.Parse(&model) + service, ok := lookup(model.Args) + if !ok { + ctx.Send("没有找到指定服务!") + } + service.enable(ctx.Event.GroupID) + ctx.Send(message.Text("已启用服务: " + model.Args)) + }) + + zero.OnCommandGroup([]string{"禁用", "disable"}, zero.AdminPermission, zero.OnlyGroup). + Handle(func(ctx *zero.Ctx) { + model := extension.CommandModel{} + _ = ctx.Parse(&model) + service, ok := lookup(model.Args) + if !ok { + ctx.Send("没有找到指定服务!") + } + service.disable(ctx.Event.GroupID) + ctx.Send(message.Text("已关闭服务: " + model.Args)) + }) + + zero.OnCommandGroup([]string{"用法", "usage"}, zero.AdminPermission, zero.OnlyGroup). + Handle(func(ctx *zero.Ctx) { + model := extension.CommandModel{} + _ = ctx.Parse(&model) + service, ok := lookup(model.Args) + if !ok { + ctx.Send("没有找到指定服务!") + } + if service.options.Help != "" { + ctx.Send(service.options.Help) + } else { + ctx.Send("该服务无帮助!") + } + }) + + zero.OnCommandGroup([]string{"服务列表", "service_list"}, zero.AdminPermission, zero.OnlyGroup). + Handle(func(ctx *zero.Ctx) { + msg := `---服务列表---` + i := 0 + forEach(func(key string, manager *Control) bool { + i++ + msg += "\n" + strconv.Itoa(i) + `: ` + key + return true + }) + ctx.Send(message.Text(msg)) + }) + } + } + mu.Unlock() } } - -func Init() { - zero.OnCommandGroup([]string{"启用", "enable"}, zero.AdminPermission, zero.OnlyGroup). - Handle(func(ctx *zero.Ctx) { - model := extension.CommandModel{} - _ = ctx.Parse(&model) - service, ok := lookup(model.Args) - if !ok { - ctx.Send("没有找到指定服务!") - } - service.enable(ctx.Event.GroupID) - ctx.Send(message.Text("已启用服务: " + model.Args)) - }) - - zero.OnCommandGroup([]string{"禁用", "disable"}, zero.AdminPermission, zero.OnlyGroup). - Handle(func(ctx *zero.Ctx) { - model := extension.CommandModel{} - _ = ctx.Parse(&model) - service, ok := lookup(model.Args) - if !ok { - ctx.Send("没有找到指定服务!") - } - service.disable(ctx.Event.GroupID) - ctx.Send(message.Text("已关闭服务: " + model.Args)) - }) - - zero.OnCommandGroup([]string{"用法", "usage"}, zero.AdminPermission, zero.OnlyGroup). - Handle(func(ctx *zero.Ctx) { - model := extension.CommandModel{} - _ = ctx.Parse(&model) - service, ok := lookup(model.Args) - if !ok { - ctx.Send("没有找到指定服务!") - } - if service.options.Help != "" { - ctx.Send(service.options.Help) - } else { - ctx.Send("该服务无帮助!") - } - }) - - zero.OnCommandGroup([]string{"服务列表", "service_list"}, zero.AdminPermission, zero.OnlyGroup). - Handle(func(ctx *zero.Ctx) { - msg := `---服务列表---` - i := 0 - forEach(func(key string, manager *Control) bool { - i++ - msg += "\n" + strconv.Itoa(i) + `: ` + key - return true - }) - ctx.Send(message.Text(msg)) - }) -} diff --git a/main.go b/main.go index 5586685b..8a72c6eb 100644 --- a/main.go +++ b/main.go @@ -42,8 +42,6 @@ import ( easy "github.com/t-tomalak/logrus-easy-formatter" zero "github.com/wdvxdr1123/ZeroBot" "github.com/wdvxdr1123/ZeroBot/driver" - - "github.com/FloatTech/ZeroBot-Plugin/control" ) var ( @@ -62,7 +60,6 @@ func init() { LogFormat: "[zero][%time%][%lvl%]: %msg% \n", }) log.SetLevel(log.DebugLevel) - control.Init() } func main() {