diff --git a/models/bot.go b/models/bot.go index ff49589..42e17c6 100644 --- a/models/bot.go +++ b/models/bot.go @@ -140,6 +140,8 @@ var handleMessage = func(msgs ...interface{}) interface{} { sendMessagee("小滴滴重启程序", msgs...) Daemon() return nil + case "ping": + case "查询", "query": cks := GetJdCookies() tmp := []JdCookie{} @@ -296,6 +298,11 @@ var handleMessage = func(msgs ...interface{}) interface{} { return "你没有权限操作" } runTask(&Task{Path: v}, msgs...) + case "cmd", "command": + if !isAdmin(msgs...) { + return "你没有权限操作" + } + cmd(v, msgs...) } } diff --git a/models/task.go b/models/task.go index 271f38e..cb0b903 100644 --- a/models/task.go +++ b/models/task.go @@ -156,3 +156,44 @@ func runTask(task *Task, msgs ...interface{}) string { err = cmd.Wait() return msg } + +func cmd(str string, msgs ...interface{}) { + cmd := exec.Command("sh", "-c", str) + stdout, err := cmd.StdoutPipe() + stderr, err := cmd.StderrPipe() + if err != nil { + logs.Warn("cmd.StdoutPipe: ", err) + return + } + cmd.Dir = ExecPath + "/scripts/" + err = cmd.Start() + if err != nil { + logs.Warn("%v", err) + return + } + go func() { + msg := "" + reader := bufio.NewReader(stderr) + for { + line, err2 := reader.ReadString('\n') + if err2 != nil || io.EOF == err2 { + break + } + msg += line + } + if msg != "" { + sendMessagee(msg, msgs...) + } + }() + reader := bufio.NewReader(stdout) + for { + line, err2 := reader.ReadString('\n') + if err2 != nil || io.EOF == err2 { + break + } + if len(msgs) > 0 { + sendMessagee(strings.Replace(line, "\n", "", -1), msgs...) + } + } + err = cmd.Wait() +}