diff --git a/Dockerfile b/Dockerfile deleted file mode 100644 index 113beb2..0000000 --- a/Dockerfile +++ /dev/null @@ -1,9 +0,0 @@ -# 基于 chromedp/headless-shell 基础镜像 -FROM chromedp/headless-shell:latest - -# 安装 Noto 和 Noto CJK 字体 -RUN sed -i 's@http://deb.debian.org@http://mirrors.tuna.tsinghua.edu.cn@g' /etc/apt/sources.list.d/debian.sources \ - && apt-get update -y \ - && apt-get install -y fonts-noto fonts-noto-cjk \ - && apt-get clean \ - && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/ \ No newline at end of file diff --git a/handler/restart/restart.go b/handler/restart/restart.go new file mode 100644 index 0000000..33d4fab --- /dev/null +++ b/handler/restart/restart.go @@ -0,0 +1,147 @@ +package restart + +import ( + "errors" + "log" + "os" + "os/exec" + "time" + + "git.lxtend.com/qqbot/handler" + "git.lxtend.com/qqbot/model" +) + +var hasVaildBuild = true + +func init() { + handler.RegisterHandler("/重启bot", restart) + handler.RegisterHandler("/构建bot", build) + handler.RegisterHandler("/构建重启", buildAndRestart) + handler.RegisterHandler("/gitpull", pullCode) +} + +func restart(msg model.Message) model.Reply { + if !hasVaildBuild { + return model.Reply{ + ReplyMsg: "上次构建失败,请先成功构建再部署", + ReferOriginMsg: true, + FromMsg: msg, + } + } + go restartProgram() + return model.Reply{ + ReplyMsg: "重启中...", + ReferOriginMsg: true, + FromMsg: msg, + } +} + +func build(msg model.Message) model.Reply { + err := buildBot() + if err != nil { + return model.Reply{ + ReplyMsg: "构建失败,报错如下\n" + err.Error(), + ReferOriginMsg: true, + FromMsg: msg, + } + } + return model.Reply{ + ReplyMsg: "构建成功", + ReferOriginMsg: true, + FromMsg: msg, + } +} + +func buildAndRestart(msg model.Message) model.Reply { + err := buildBot() + if err != nil { + return model.Reply{ + ReplyMsg: "构建失败,报错如下\n" + err.Error(), + ReferOriginMsg: true, + FromMsg: msg, + } + } + if !hasVaildBuild { + return model.Reply{ + ReplyMsg: "构建失败,请先成功构建再部署", + ReferOriginMsg: true, + FromMsg: msg, + } + } + go restartProgram() + return model.Reply{ + ReplyMsg: "构建成功,重启中...", + ReferOriginMsg: true, + FromMsg: msg, + } +} + +func pullCode(msg model.Message) model.Reply { + err := gitPull() + if err != nil { + return model.Reply{ + ReplyMsg: "拉取代码失败,报错如下\n" + err.Error(), + ReferOriginMsg: true, + FromMsg: msg, + } + } + return model.Reply{ + ReplyMsg: "拉取代码成功", + ReferOriginMsg: true, + FromMsg: msg, + } +} + +func restartProgram() error { + log.Println("重启程序...") + time.Sleep(500 * time.Millisecond) + path, err := os.Executable() + if err != nil { + return err + } + workDir, err := os.Getwd() + if err != nil { + return err + } + cmd := exec.Command(path) + cmd.Stdout = os.Stdout + cmd.Stderr = os.Stderr + cmd.Dir = workDir + if err := cmd.Start(); err != nil { + return err + } + os.Exit(0) + return nil +} + +func buildBot() error { + hasVaildBuild = false + workDir, err := os.Getwd() + if err != nil { + return err + } + cmd := exec.Command("go", "build", "-o", "qqbot") + cmd.Dir = workDir + + output, err := cmd.CombinedOutput() + if err != nil { + return errors.New(string(output) + err.Error()) + } + hasVaildBuild = true + return nil +} + +func gitPull() error { + workDir, err := os.Getwd() + if err != nil { + return err + } + cmd := exec.Command("git", "pull") + cmd.Dir = workDir + + output, err := cmd.CombinedOutput() + if err != nil { + return errors.New(string(output) + err.Error()) + } + return nil +} diff --git a/register.go b/register.go index d477a09..39ca007 100644 --- a/register.go +++ b/register.go @@ -1,17 +1,17 @@ package main import ( - // _ "git.lxtend.com/qqbot/handler/beatleader" + _ "git.lxtend.com/qqbot/handler/beatleader" _ "git.lxtend.com/qqbot/handler/echo" _ "git.lxtend.com/qqbot/handler/getweb" _ "git.lxtend.com/qqbot/handler/headmaster" _ "git.lxtend.com/qqbot/handler/help" _ "git.lxtend.com/qqbot/handler/jrrp" + _ "git.lxtend.com/qqbot/handler/restart" _ "git.lxtend.com/qqbot/handler/roll" _ "git.lxtend.com/qqbot/handler/scoresaber" _ "git.lxtend.com/qqbot/handler/ticket" _ "git.lxtend.com/qqbot/handler/urlparser" - - // _ "git.lxtend.com/qqbot/handler/wordle" _ "git.lxtend.com/qqbot/handler/xibao" + // _ "git.lxtend.com/qqbot/handler/wordle" )