mirror of
https://github.com/FloatTech/ZeroBot-Plugin.git
synced 2025-12-19 22:00:11 +08:00
feat: 添加webui的初步支持 (#63)
* feat: 添加webui的初步支持
使用gin监听server,前端使用vuecli
目前已支持:
前端发送信息
前端获取信息
获取插件列表
预计实现功能:
改变插件状态
获取日志
获取配置信息
改变配置信息
获取好友请求列表以及群请求列表
手动同意申请列表
* feat: 继续实现webui功能
改变插件状态
获取日志
获取配置信息
前端仓库位置更改
* fix: 修复golangLint的提示信息
* 🎨 改进代码样式
* Update gui.go
* fix: 修复golangLint的提示信息
* fix: 修复golangLint的提示信息
* feat: 支持通过命令行参数禁用gui
* fix: 设置gin在非debug模式下禁用日志
* Update gui.go
* Update gui.go
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: 源文雨 <41315874+fumiama@users.noreply.github.com>
This commit is contained in:
parent
ae6d83c675
commit
21013bde98
484
control/gui.go
Normal file
484
control/gui.go
Normal file
@ -0,0 +1,484 @@
|
|||||||
|
package control
|
||||||
|
|
||||||
|
import (
|
||||||
|
"encoding/json"
|
||||||
|
"fmt"
|
||||||
|
"io"
|
||||||
|
"net/http"
|
||||||
|
"os"
|
||||||
|
"strconv"
|
||||||
|
|
||||||
|
manager "github.com/FloatTech/bot-manager"
|
||||||
|
// 依赖gin监听server
|
||||||
|
"github.com/gin-gonic/gin"
|
||||||
|
"github.com/gorilla/websocket"
|
||||||
|
|
||||||
|
// 前端静态文件
|
||||||
|
log "github.com/sirupsen/logrus"
|
||||||
|
zero "github.com/wdvxdr1123/ZeroBot"
|
||||||
|
"github.com/wdvxdr1123/ZeroBot/message"
|
||||||
|
)
|
||||||
|
|
||||||
|
var (
|
||||||
|
// 向前端推送消息的ws链接
|
||||||
|
conn *websocket.Conn
|
||||||
|
// 向前端推送日志的ws链接
|
||||||
|
logConn *websocket.Conn
|
||||||
|
|
||||||
|
l logWriter
|
||||||
|
)
|
||||||
|
|
||||||
|
// logWriter
|
||||||
|
// @Description:
|
||||||
|
//
|
||||||
|
type logWriter struct {
|
||||||
|
}
|
||||||
|
|
||||||
|
// InitGui 初始化gui
|
||||||
|
func InitGui() {
|
||||||
|
// 将日志重定向到前端hook
|
||||||
|
writer := io.MultiWriter(l, os.Stderr)
|
||||||
|
log.SetOutput(writer)
|
||||||
|
// 监听后端
|
||||||
|
go controller()
|
||||||
|
// 注册消息handle
|
||||||
|
messageHandle()
|
||||||
|
}
|
||||||
|
|
||||||
|
// websocket的协议升级
|
||||||
|
var upGrader = websocket.Upgrader{
|
||||||
|
CheckOrigin: func(r *http.Request) bool {
|
||||||
|
return true
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
func controller() {
|
||||||
|
defer func() {
|
||||||
|
err := recover()
|
||||||
|
if err != nil {
|
||||||
|
log.Errorln("[gui]" + "bot-manager出现不可恢复的错误")
|
||||||
|
log.Errorln("[gui]", err)
|
||||||
|
}
|
||||||
|
}()
|
||||||
|
|
||||||
|
if log.GetLevel() != log.DebugLevel {
|
||||||
|
gin.SetMode(gin.ReleaseMode)
|
||||||
|
gin.DefaultWriter = io.Discard
|
||||||
|
}
|
||||||
|
|
||||||
|
engine := gin.New()
|
||||||
|
// 支持跨域
|
||||||
|
engine.Use(cors())
|
||||||
|
// 注册静态文件
|
||||||
|
engine.StaticFS("/dist", http.FS(manager.Dist))
|
||||||
|
engine.POST("/get_bots", getBots)
|
||||||
|
engine.POST("/get_group_list", getGroupList)
|
||||||
|
engine.POST("/get_friend_list", getFriendList)
|
||||||
|
// 注册主路径路由,使其跳转到主页面
|
||||||
|
engine.GET("/", func(context *gin.Context) {
|
||||||
|
context.Redirect(http.StatusMovedPermanently, "/dist/dist/default.html")
|
||||||
|
})
|
||||||
|
// 更改某个插件状态
|
||||||
|
engine.POST("/update_plugin_status", updatePluginStatus)
|
||||||
|
// 更改某一个插件在所有群的状态
|
||||||
|
engine.POST("/update_plugin_all_group_status", updatePluginAllGroupStatus)
|
||||||
|
// 更改所有插件状态
|
||||||
|
engine.POST("/update_all_plugin_status", updateAllPluginStatus)
|
||||||
|
// 获取所有插件状态
|
||||||
|
engine.POST("/get_plugins_status", getPluginsStatus)
|
||||||
|
// 获取一个插件状态
|
||||||
|
engine.POST("/get_plugin_status", getPluginStatus)
|
||||||
|
// 获取插件列表
|
||||||
|
engine.POST("/get_plugins", func(context *gin.Context) {
|
||||||
|
var datas []map[string]interface{}
|
||||||
|
forEach(func(key string, manager *Control) bool {
|
||||||
|
datas = append(datas, map[string]interface{}{"id": 1, "handle_type": "", "name": key, "enable": manager.isEnabledIn(0)})
|
||||||
|
return true
|
||||||
|
})
|
||||||
|
context.JSON(200, datas)
|
||||||
|
})
|
||||||
|
// 链接日志
|
||||||
|
engine.GET("/get_log", getLogs)
|
||||||
|
// 获取前端标签
|
||||||
|
engine.GET("/get_label", func(context *gin.Context) {
|
||||||
|
context.JSON(200, "ZeroBot-Plugin")
|
||||||
|
})
|
||||||
|
|
||||||
|
// 发送信息
|
||||||
|
engine.POST("/send_msg", sendMsg)
|
||||||
|
engine.GET("/data", upgrade)
|
||||||
|
log.Infoln("[gui] the webui is running http://127.0.0.1:3000")
|
||||||
|
log.Infoln("[gui] ", "you input the `ZeroBot-Plugin.exe -g` can disable the gui")
|
||||||
|
if err := engine.Run("127.0.0.1:3000"); err != nil {
|
||||||
|
log.Debugln("[gui] ", err.Error())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// updateAllPluginStatus
|
||||||
|
/**
|
||||||
|
* @Description: 改变所有插件的状态
|
||||||
|
* @param context
|
||||||
|
* example
|
||||||
|
*/
|
||||||
|
func updateAllPluginStatus(context *gin.Context) {
|
||||||
|
enable, err := strconv.ParseBool(context.PostForm("enable"))
|
||||||
|
if err != nil {
|
||||||
|
var parse map[string]interface{}
|
||||||
|
err := context.BindJSON(&parse)
|
||||||
|
if err != nil {
|
||||||
|
log.Errorln("[gui] " + err.Error())
|
||||||
|
return
|
||||||
|
}
|
||||||
|
enable = parse["enable"].(bool)
|
||||||
|
}
|
||||||
|
var groups []int64
|
||||||
|
zero.RangeBot(func(id int64, ctx *zero.Ctx) bool {
|
||||||
|
for _, group := range ctx.GetGroupList().Array() {
|
||||||
|
groups = append(groups, group.Get("group_id").Int())
|
||||||
|
}
|
||||||
|
return true
|
||||||
|
})
|
||||||
|
|
||||||
|
forEach(func(key string, manager *Control) bool {
|
||||||
|
if enable {
|
||||||
|
for _, group := range groups {
|
||||||
|
manager.enable(group)
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
for _, group := range groups {
|
||||||
|
manager.disable(group)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true
|
||||||
|
})
|
||||||
|
context.JSON(200, nil)
|
||||||
|
}
|
||||||
|
|
||||||
|
// updatePluginAllGroupStatus
|
||||||
|
/**
|
||||||
|
* @Description: 改变插件在所有群的状态
|
||||||
|
* @param context
|
||||||
|
* example
|
||||||
|
*/
|
||||||
|
func updatePluginAllGroupStatus(context *gin.Context) {
|
||||||
|
name := context.PostForm("name")
|
||||||
|
enable, err := strconv.ParseBool(context.PostForm("enable"))
|
||||||
|
if err != nil {
|
||||||
|
var parse map[string]interface{}
|
||||||
|
err := context.BindJSON(&parse)
|
||||||
|
if err != nil {
|
||||||
|
log.Errorln("[gui]" + err.Error())
|
||||||
|
return
|
||||||
|
}
|
||||||
|
name = parse["name"].(string)
|
||||||
|
enable = parse["enable"].(bool)
|
||||||
|
}
|
||||||
|
control, b := lookup(name)
|
||||||
|
if !b {
|
||||||
|
context.JSON(404, nil)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
zero.RangeBot(func(id int64, ctx *zero.Ctx) bool {
|
||||||
|
for _, group := range ctx.GetGroupList().Array() {
|
||||||
|
if enable {
|
||||||
|
control.enable(group.Get("group_id").Int())
|
||||||
|
} else {
|
||||||
|
control.disable(group.Get("group_id").Int())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return true
|
||||||
|
})
|
||||||
|
|
||||||
|
context.JSON(200, nil)
|
||||||
|
}
|
||||||
|
|
||||||
|
// updatePluginStatus
|
||||||
|
/**
|
||||||
|
* @Description: 更改某一个插件状态
|
||||||
|
* @param context
|
||||||
|
* example
|
||||||
|
*/
|
||||||
|
func updatePluginStatus(context *gin.Context) {
|
||||||
|
var parse map[string]interface{}
|
||||||
|
err := context.BindJSON(&parse)
|
||||||
|
if err != nil {
|
||||||
|
log.Errorln("[gui] ", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
groupID := int64(parse["group_id"].(float64))
|
||||||
|
name := parse["name"].(string)
|
||||||
|
enable := parse["enable"].(bool)
|
||||||
|
fmt.Println(name)
|
||||||
|
control, b := lookup(name)
|
||||||
|
if !b {
|
||||||
|
context.JSON(404, "服务不存在")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if enable {
|
||||||
|
control.enable(groupID)
|
||||||
|
} else {
|
||||||
|
control.disable(groupID)
|
||||||
|
}
|
||||||
|
context.JSON(200, nil)
|
||||||
|
}
|
||||||
|
|
||||||
|
// getPluginStatus
|
||||||
|
/**
|
||||||
|
* @Description: 获取一个插件的状态
|
||||||
|
* @param context
|
||||||
|
* example
|
||||||
|
*/
|
||||||
|
func getPluginStatus(context *gin.Context) {
|
||||||
|
groupID, err := strconv.ParseInt(context.PostForm("group_id"), 10, 64)
|
||||||
|
name := context.PostForm("name")
|
||||||
|
if err != nil {
|
||||||
|
var parse map[string]interface{}
|
||||||
|
err := context.BindJSON(&parse)
|
||||||
|
if err != nil {
|
||||||
|
log.Errorln("[gui]" + err.Error())
|
||||||
|
return
|
||||||
|
}
|
||||||
|
groupID = int64(parse["group_id"].(float64))
|
||||||
|
name = parse["name"].(string)
|
||||||
|
}
|
||||||
|
control, b := lookup(name)
|
||||||
|
if !b {
|
||||||
|
context.JSON(404, "服务不存在")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
context.JSON(200, gin.H{"enable": control.isEnabledIn(groupID)})
|
||||||
|
}
|
||||||
|
|
||||||
|
// getPluginsStatus
|
||||||
|
/**
|
||||||
|
* @Description: 获取所有插件的状态
|
||||||
|
* @param context
|
||||||
|
* example
|
||||||
|
*/
|
||||||
|
func getPluginsStatus(context *gin.Context) {
|
||||||
|
groupID, err := strconv.ParseInt(context.PostForm("group_id"), 10, 64)
|
||||||
|
if err != nil {
|
||||||
|
var parse map[string]interface{}
|
||||||
|
err := context.BindJSON(&parse)
|
||||||
|
if err != nil {
|
||||||
|
log.Errorln("[gui]" + err.Error())
|
||||||
|
return
|
||||||
|
}
|
||||||
|
groupID = int64(parse["group_id"].(float64))
|
||||||
|
}
|
||||||
|
var datas []map[string]interface{}
|
||||||
|
forEach(func(key string, manager *Control) bool {
|
||||||
|
enable := manager.isEnabledIn(groupID)
|
||||||
|
datas = append(datas, map[string]interface{}{"name": key, "enable": enable})
|
||||||
|
return true
|
||||||
|
})
|
||||||
|
context.JSON(200, datas)
|
||||||
|
}
|
||||||
|
|
||||||
|
// getLogs
|
||||||
|
/**
|
||||||
|
* @Description: 连接日志
|
||||||
|
* @param context
|
||||||
|
* example
|
||||||
|
*/
|
||||||
|
func getLogs(context *gin.Context) {
|
||||||
|
con1, err := upGrader.Upgrade(context.Writer, context.Request, nil)
|
||||||
|
if err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
logConn = con1
|
||||||
|
}
|
||||||
|
|
||||||
|
// getFriendList
|
||||||
|
/**
|
||||||
|
* @Description: 获取好友列表
|
||||||
|
* @param context
|
||||||
|
* example
|
||||||
|
*/
|
||||||
|
func getFriendList(context *gin.Context) {
|
||||||
|
selfID, err := strconv.Atoi(context.PostForm("self_id"))
|
||||||
|
if err != nil {
|
||||||
|
log.Errorln("[gui]" + err.Error())
|
||||||
|
var data map[string]interface{}
|
||||||
|
err := context.BindJSON(&data)
|
||||||
|
if err != nil {
|
||||||
|
log.Errorln("[gui]" + err.Error())
|
||||||
|
log.Errorln("[gui]" + "绑定错误")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
selfID = int(data["self_id"].(float64))
|
||||||
|
}
|
||||||
|
bot := zero.GetBot(int64(selfID))
|
||||||
|
var resp []interface{}
|
||||||
|
list := bot.GetFriendList().String()
|
||||||
|
err = json.Unmarshal([]byte(list), &resp)
|
||||||
|
if err != nil {
|
||||||
|
log.Errorln("[gui]" + err.Error())
|
||||||
|
log.Errorln("[gui]" + "解析json错误")
|
||||||
|
}
|
||||||
|
context.JSON(200, resp)
|
||||||
|
}
|
||||||
|
|
||||||
|
// getGroupList
|
||||||
|
/**
|
||||||
|
* @Description: 获取群列表
|
||||||
|
* @param context
|
||||||
|
* example
|
||||||
|
*/
|
||||||
|
func getGroupList(context *gin.Context) {
|
||||||
|
selfID, err := strconv.Atoi(context.PostForm("self_id"))
|
||||||
|
if err != nil {
|
||||||
|
var data map[string]interface{}
|
||||||
|
err := context.BindJSON(&data)
|
||||||
|
if err != nil {
|
||||||
|
log.Errorln("[gui]" + err.Error())
|
||||||
|
return
|
||||||
|
}
|
||||||
|
selfID = int(data["self_id"].(float64))
|
||||||
|
}
|
||||||
|
|
||||||
|
bot := zero.GetBot(int64(selfID))
|
||||||
|
var resp []interface{}
|
||||||
|
list := bot.GetGroupList().String()
|
||||||
|
err = json.Unmarshal([]byte(list), &resp)
|
||||||
|
if err != nil {
|
||||||
|
log.Errorln("[gui]" + err.Error())
|
||||||
|
}
|
||||||
|
context.JSON(200, resp)
|
||||||
|
}
|
||||||
|
|
||||||
|
// getBots
|
||||||
|
/**
|
||||||
|
* @Description: 获取机器人qq号
|
||||||
|
* @param context
|
||||||
|
* example
|
||||||
|
*/
|
||||||
|
func getBots(context *gin.Context) {
|
||||||
|
var bots []int64
|
||||||
|
|
||||||
|
zero.RangeBot(func(id int64, ctx *zero.Ctx) bool {
|
||||||
|
bots = append(bots, id)
|
||||||
|
return true
|
||||||
|
})
|
||||||
|
context.JSON(200, bots)
|
||||||
|
}
|
||||||
|
|
||||||
|
// MessageHandle
|
||||||
|
/**
|
||||||
|
* @Description: 定义一个向前端发送信息的handle
|
||||||
|
* example
|
||||||
|
*/
|
||||||
|
func messageHandle() {
|
||||||
|
defer func() {
|
||||||
|
err := recover()
|
||||||
|
if err != nil {
|
||||||
|
log.Errorln("[gui]" + "bot-manager出现不可恢复的错误")
|
||||||
|
log.Errorln("[gui] ", err)
|
||||||
|
}
|
||||||
|
}()
|
||||||
|
|
||||||
|
matcher := zero.OnMessage().SetBlock(false).SetPriority(1)
|
||||||
|
|
||||||
|
matcher.Handle(func(ctx *zero.Ctx) {
|
||||||
|
if conn != nil {
|
||||||
|
err := conn.WriteJSON(ctx.Event)
|
||||||
|
if err != nil {
|
||||||
|
log.Debugln("[gui] " + "向发送错误")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// upgrade
|
||||||
|
/**
|
||||||
|
* @Description: 连接ws,向前端推送message
|
||||||
|
* @param context
|
||||||
|
* example
|
||||||
|
*/
|
||||||
|
func upgrade(context *gin.Context) {
|
||||||
|
con, err := upGrader.Upgrade(context.Writer, context.Request, nil)
|
||||||
|
if err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
conn = con
|
||||||
|
}
|
||||||
|
|
||||||
|
// sendMsg
|
||||||
|
/**
|
||||||
|
* @Description: 前端调用发送信息
|
||||||
|
* @param context
|
||||||
|
* example
|
||||||
|
*/
|
||||||
|
func sendMsg(context *gin.Context) {
|
||||||
|
var data map[string]interface{}
|
||||||
|
err := context.BindJSON(&data)
|
||||||
|
if err != nil {
|
||||||
|
context.JSON(404, nil)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
selfID := int64(data["self_id"].(float64))
|
||||||
|
id := int64(data["id"].(float64))
|
||||||
|
message1 := data["message"].(string)
|
||||||
|
messageType := data["message_type"].(string)
|
||||||
|
|
||||||
|
bot := zero.GetBot(selfID)
|
||||||
|
var msgID int64
|
||||||
|
if messageType == "group" {
|
||||||
|
msgID = bot.SendGroupMessage(id, message.ParseMessageFromString(message1))
|
||||||
|
} else {
|
||||||
|
msgID = bot.SendPrivateMessage(id, message.ParseMessageFromString(message1))
|
||||||
|
}
|
||||||
|
context.JSON(200, msgID)
|
||||||
|
}
|
||||||
|
|
||||||
|
// cors
|
||||||
|
/**
|
||||||
|
* @Description: 支持跨域访问
|
||||||
|
* @return gin.HandlerFunc
|
||||||
|
* example
|
||||||
|
*/
|
||||||
|
func cors() gin.HandlerFunc {
|
||||||
|
return func(c *gin.Context) {
|
||||||
|
method := c.Request.Method
|
||||||
|
origin := c.Request.Header.Get("Origin") // 请求头部
|
||||||
|
if origin != "" {
|
||||||
|
// 接收客户端发送的origin (重要!)
|
||||||
|
c.Writer.Header().Set("Access-Control-Allow-Origin", origin)
|
||||||
|
// 服务器支持的所有跨域请求的方法
|
||||||
|
c.Header("Access-Control-Allow-Methods", "POST, GET, OPTIONS, PUT, DELETE,UPDATE")
|
||||||
|
// 允许跨域设置可以返回其他子段,可以自定义字段
|
||||||
|
c.Header("Access-Control-Allow-Headers", "Authorization, Content-Length, X-CSRF-Token, Token,session, Content-Type")
|
||||||
|
// 允许浏览器(客户端)可以解析的头部 (重要)
|
||||||
|
c.Header("Access-Control-Expose-Headers", "Content-Length, Access-Control-Allow-Origin, Access-Control-Allow-Headers")
|
||||||
|
// 设置缓存时间
|
||||||
|
c.Header("Access-Control-Max-Age", "172800")
|
||||||
|
// 允许客户端传递校验信息比如 cookie (重要)
|
||||||
|
c.Header("Access-Control-Allow-Credentials", "true")
|
||||||
|
}
|
||||||
|
|
||||||
|
// 允许类型校验
|
||||||
|
if method == "OPTIONS" {
|
||||||
|
c.JSON(http.StatusOK, "ok!")
|
||||||
|
}
|
||||||
|
|
||||||
|
defer func() {
|
||||||
|
if err := recover(); err != nil {
|
||||||
|
log.Printf("Panic info is: %v", err)
|
||||||
|
}
|
||||||
|
}()
|
||||||
|
|
||||||
|
c.Next()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (l logWriter) Write(p []byte) (n int, err error) {
|
||||||
|
if logConn != nil {
|
||||||
|
err := logConn.WriteMessage(websocket.TextMessage, p)
|
||||||
|
if err != nil {
|
||||||
|
return len(p), nil
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return len(p), nil
|
||||||
|
}
|
||||||
3
go.mod
3
go.mod
@ -6,7 +6,10 @@ require (
|
|||||||
github.com/FloatTech/AnimeAPI v1.1.9
|
github.com/FloatTech/AnimeAPI v1.1.9
|
||||||
github.com/FloatTech/ZeroBot-Plugin-Gif v0.1.5
|
github.com/FloatTech/ZeroBot-Plugin-Gif v0.1.5
|
||||||
github.com/FloatTech/ZeroBot-Plugin-Timer v1.4.3
|
github.com/FloatTech/ZeroBot-Plugin-Timer v1.4.3
|
||||||
|
github.com/FloatTech/bot-manager v1.0.0
|
||||||
|
github.com/gin-gonic/gin v1.7.4
|
||||||
github.com/golang/protobuf v1.5.2
|
github.com/golang/protobuf v1.5.2
|
||||||
|
github.com/gorilla/websocket v1.4.2
|
||||||
github.com/imroc/req v0.3.0
|
github.com/imroc/req v0.3.0
|
||||||
github.com/robfig/cron v1.2.0
|
github.com/robfig/cron v1.2.0
|
||||||
github.com/shirou/gopsutil v3.21.8+incompatible
|
github.com/shirou/gopsutil v3.21.8+incompatible
|
||||||
|
|||||||
29
go.sum
29
go.sum
@ -5,6 +5,8 @@ github.com/FloatTech/ZeroBot-Plugin-Gif v0.1.5 h1:SighsMMD7s0cB4r5ya/7B8sOLQ6W1w
|
|||||||
github.com/FloatTech/ZeroBot-Plugin-Gif v0.1.5/go.mod h1:W7ag6hml1pZTNzRXKU74OMr6rS8awQKSU+o2g7Gj4O0=
|
github.com/FloatTech/ZeroBot-Plugin-Gif v0.1.5/go.mod h1:W7ag6hml1pZTNzRXKU74OMr6rS8awQKSU+o2g7Gj4O0=
|
||||||
github.com/FloatTech/ZeroBot-Plugin-Timer v1.4.3 h1:jn/dH+OwPSRozkmeCeQQPrAGJRBudcm3OK5tXhGItRk=
|
github.com/FloatTech/ZeroBot-Plugin-Timer v1.4.3 h1:jn/dH+OwPSRozkmeCeQQPrAGJRBudcm3OK5tXhGItRk=
|
||||||
github.com/FloatTech/ZeroBot-Plugin-Timer v1.4.3/go.mod h1:MVOQQ4e6AVGFm993blXXU4Sd6bAsLY2+Zb+/HMrEeEc=
|
github.com/FloatTech/ZeroBot-Plugin-Timer v1.4.3/go.mod h1:MVOQQ4e6AVGFm993blXXU4Sd6bAsLY2+Zb+/HMrEeEc=
|
||||||
|
github.com/FloatTech/bot-manager v1.0.0 h1:d63J5htLhVBc2ITG09WBJI+qAB0ubPjYhfXl6hljBNk=
|
||||||
|
github.com/FloatTech/bot-manager v1.0.0/go.mod h1:8YYRJ16oroGHQGD2En0oVnmcKJkxR9O/jd5BPSfWfOQ=
|
||||||
github.com/FloatTech/imgfactory v0.1.1 h1:ooL2+fV8yrMhv1ShGGKsN0Rm/flWoKnvqXaUD+dC3DQ=
|
github.com/FloatTech/imgfactory v0.1.1 h1:ooL2+fV8yrMhv1ShGGKsN0Rm/flWoKnvqXaUD+dC3DQ=
|
||||||
github.com/FloatTech/imgfactory v0.1.1/go.mod h1:ThDALab8aOuU6KVYESVWFqmjcqtm03e0SvGlTw6s+aw=
|
github.com/FloatTech/imgfactory v0.1.1/go.mod h1:ThDALab8aOuU6KVYESVWFqmjcqtm03e0SvGlTw6s+aw=
|
||||||
github.com/StackExchange/wmi v1.2.1 h1:VIkavFPXSjcnS+O8yTq7NI32k0R5Aj+v39y29VYDOSA=
|
github.com/StackExchange/wmi v1.2.1 h1:VIkavFPXSjcnS+O8yTq7NI32k0R5Aj+v39y29VYDOSA=
|
||||||
@ -25,13 +27,26 @@ github.com/ericpauley/go-quantize v0.0.0-20200331213906-ae555eb2afa4/go.mod h1:H
|
|||||||
github.com/fogleman/gg v1.3.0 h1:/7zJX8F6AaYQc57WQCyN9cAIz+4bCJGO9B+dyW29am8=
|
github.com/fogleman/gg v1.3.0 h1:/7zJX8F6AaYQc57WQCyN9cAIz+4bCJGO9B+dyW29am8=
|
||||||
github.com/fogleman/gg v1.3.0/go.mod h1:R/bRT+9gY/C5z7JzPU0zXsXHKM4/ayA+zqcVNZzPa1k=
|
github.com/fogleman/gg v1.3.0/go.mod h1:R/bRT+9gY/C5z7JzPU0zXsXHKM4/ayA+zqcVNZzPa1k=
|
||||||
github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
|
github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
|
||||||
|
github.com/gin-contrib/sse v0.1.0 h1:Y/yl/+YNO8GZSjAhjMsSuLt29uWRFHdHYUb5lYOV9qE=
|
||||||
|
github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI=
|
||||||
|
github.com/gin-gonic/gin v1.7.4 h1:QmUZXrvJ9qZ3GfWvQ+2wnW/1ePrTEJqPKMYEU3lD/DM=
|
||||||
|
github.com/gin-gonic/gin v1.7.4/go.mod h1:jD2toBW3GZUr5UMcdrwQA10I7RuaFOl/SGeDjXkfUtY=
|
||||||
github.com/go-ole/go-ole v1.2.5 h1:t4MGB5xEDZvXI+0rMjjsfBsD7yAgp/s9ZDkL1JndXwY=
|
github.com/go-ole/go-ole v1.2.5 h1:t4MGB5xEDZvXI+0rMjjsfBsD7yAgp/s9ZDkL1JndXwY=
|
||||||
github.com/go-ole/go-ole v1.2.5/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0=
|
github.com/go-ole/go-ole v1.2.5/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0=
|
||||||
|
github.com/go-playground/assert/v2 v2.0.1 h1:MsBgLAaY856+nPRTKrp3/OZK38U/wa0CcBYNjji3q3A=
|
||||||
|
github.com/go-playground/assert/v2 v2.0.1/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4=
|
||||||
|
github.com/go-playground/locales v0.13.0 h1:HyWk6mgj5qFqCT5fjGBuRArbVDfE4hi8+e8ceBS/t7Q=
|
||||||
|
github.com/go-playground/locales v0.13.0/go.mod h1:taPMhCMXrRLJO55olJkUXHZBHCxTMfnGwq/HNwmWNS8=
|
||||||
|
github.com/go-playground/universal-translator v0.17.0 h1:icxd5fm+REJzpZx7ZfpaD876Lmtgy7VtROAbHHXk8no=
|
||||||
|
github.com/go-playground/universal-translator v0.17.0/go.mod h1:UkSxE5sNxxRwHyU+Scu5vgOQjsIJAF8j9muTVoKLVtA=
|
||||||
|
github.com/go-playground/validator/v10 v10.4.1 h1:pH2c5ADXtd66mxoE0Zm9SUhxE20r7aM3F26W0hOn+GE=
|
||||||
|
github.com/go-playground/validator/v10 v10.4.1/go.mod h1:nlOn6nFhuKACm19sB/8EGNn9GlaMV7XkbRSipzJ0Ii4=
|
||||||
github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0 h1:DACJavvAHhabrF08vX0COfcOBJRhZ8lUbR+ZWIs0Y5g=
|
github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0 h1:DACJavvAHhabrF08vX0COfcOBJRhZ8lUbR+ZWIs0Y5g=
|
||||||
github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0/go.mod h1:E/TSTwGwJL78qG/PmXZO1EjYhfJinVAhrmmHX6Z8B9k=
|
github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0/go.mod h1:E/TSTwGwJL78qG/PmXZO1EjYhfJinVAhrmmHX6Z8B9k=
|
||||||
github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e h1:1r7pUrabqp18hOBcwBwiTsbnFeTZHV9eER/QT5JVZxY=
|
github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e h1:1r7pUrabqp18hOBcwBwiTsbnFeTZHV9eER/QT5JVZxY=
|
||||||
github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
|
github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
|
||||||
github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
|
github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
|
||||||
|
github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw=
|
||||||
github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk=
|
github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk=
|
||||||
github.com/golang/protobuf v1.5.2 h1:ROPKBNFfQgOUMifHyP+KYbvpjbdoFNs+aK7DXlji0Tw=
|
github.com/golang/protobuf v1.5.2 h1:ROPKBNFfQgOUMifHyP+KYbvpjbdoFNs+aK7DXlji0Tw=
|
||||||
github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY=
|
github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY=
|
||||||
@ -45,11 +60,14 @@ github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/ad
|
|||||||
github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU=
|
github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU=
|
||||||
github.com/imroc/req v0.3.0 h1:3EioagmlSG+z+KySToa+Ylo3pTFZs+jh3Brl7ngU12U=
|
github.com/imroc/req v0.3.0 h1:3EioagmlSG+z+KySToa+Ylo3pTFZs+jh3Brl7ngU12U=
|
||||||
github.com/imroc/req v0.3.0/go.mod h1:F+NZ+2EFSo6EFXdeIbpfE9hcC233id70kf0byW97Caw=
|
github.com/imroc/req v0.3.0/go.mod h1:F+NZ+2EFSo6EFXdeIbpfE9hcC233id70kf0byW97Caw=
|
||||||
|
github.com/json-iterator/go v1.1.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
|
||||||
github.com/json-iterator/go v1.1.11 h1:uVUAXhF2To8cbw/3xN3pxj6kk7TYKs98NIrTqPlMWAQ=
|
github.com/json-iterator/go v1.1.11 h1:uVUAXhF2To8cbw/3xN3pxj6kk7TYKs98NIrTqPlMWAQ=
|
||||||
github.com/json-iterator/go v1.1.11/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
|
github.com/json-iterator/go v1.1.11/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
|
||||||
github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51 h1:Z9n2FFNUXsshfwJMBgNA0RU6/i7WVaAegv3PtuIHPMs=
|
github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51 h1:Z9n2FFNUXsshfwJMBgNA0RU6/i7WVaAegv3PtuIHPMs=
|
||||||
github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51/go.mod h1:CzGEWj7cYgsdH8dAjBGEr58BoE7ScuLd+fwFZ44+/x8=
|
github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51/go.mod h1:CzGEWj7cYgsdH8dAjBGEr58BoE7ScuLd+fwFZ44+/x8=
|
||||||
github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
|
github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
|
||||||
|
github.com/leodido/go-urn v1.2.0 h1:hpXL4XnriNwQ/ABnpepYM/1vCLWNDfUNts8dX3xTG6Y=
|
||||||
|
github.com/leodido/go-urn v1.2.0/go.mod h1:+8+nEpDfqqsY+g338gtMEUOtuK+4dEMhiQEgxpxOKII=
|
||||||
github.com/mattn/go-isatty v0.0.12 h1:wuysRhFDzyxgEmMf5xjvJ2M9dZoWAXNNr5LSBS7uHXY=
|
github.com/mattn/go-isatty v0.0.12 h1:wuysRhFDzyxgEmMf5xjvJ2M9dZoWAXNNr5LSBS7uHXY=
|
||||||
github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU=
|
github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU=
|
||||||
github.com/mattn/go-sqlite3 v1.14.8 h1:gDp86IdQsN/xWjIEmr9MF6o9mpksUgh0fu+9ByFxzIU=
|
github.com/mattn/go-sqlite3 v1.14.8 h1:gDp86IdQsN/xWjIEmr9MF6o9mpksUgh0fu+9ByFxzIU=
|
||||||
@ -77,6 +95,7 @@ github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+
|
|||||||
github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
|
github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
|
||||||
github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
|
github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
|
||||||
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
|
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
|
||||||
|
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
|
||||||
github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY=
|
github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY=
|
||||||
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
|
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
|
||||||
github.com/syndtr/goleveldb v1.0.0/go.mod h1:ZVVdQEZoIme9iO1Ch2Jdy24qqXrMMOU6lpPAyBWyWuQ=
|
github.com/syndtr/goleveldb v1.0.0/go.mod h1:ZVVdQEZoIme9iO1Ch2Jdy24qqXrMMOU6lpPAyBWyWuQ=
|
||||||
@ -94,6 +113,10 @@ github.com/tklauser/go-sysconf v0.3.9 h1:JeUVdAOWhhxVcU6Eqr/ATFHgXk/mmiItdKeJPev
|
|||||||
github.com/tklauser/go-sysconf v0.3.9/go.mod h1:11DU/5sG7UexIrp/O6g35hrWzu0JxlwQ3LSFUzyeuhs=
|
github.com/tklauser/go-sysconf v0.3.9/go.mod h1:11DU/5sG7UexIrp/O6g35hrWzu0JxlwQ3LSFUzyeuhs=
|
||||||
github.com/tklauser/numcpus v0.3.0 h1:ILuRUQBtssgnxw0XXIjKUC56fgnOrFoQQ/4+DeU2biQ=
|
github.com/tklauser/numcpus v0.3.0 h1:ILuRUQBtssgnxw0XXIjKUC56fgnOrFoQQ/4+DeU2biQ=
|
||||||
github.com/tklauser/numcpus v0.3.0/go.mod h1:yFGUr7TUHQRAhyqBcEg0Ge34zDBAsIvJJcyE6boqnA8=
|
github.com/tklauser/numcpus v0.3.0/go.mod h1:yFGUr7TUHQRAhyqBcEg0Ge34zDBAsIvJJcyE6boqnA8=
|
||||||
|
github.com/ugorji/go v1.1.7 h1:/68gy2h+1mWMrwZFeD1kQialdSzAb432dtpeJ42ovdo=
|
||||||
|
github.com/ugorji/go v1.1.7/go.mod h1:kZn38zHttfInRq0xu/PH0az30d+z6vm202qpg1oXVMw=
|
||||||
|
github.com/ugorji/go/codec v1.1.7 h1:2SvQaVZ1ouYrrKKwoSk2pzd4A9evlKJb9oTL+OaLUSs=
|
||||||
|
github.com/ugorji/go/codec v1.1.7/go.mod h1:Ax+UKWsSmolVDwsd+7N3ZtXu+yMGCf907BLYF3GoBXY=
|
||||||
github.com/wdvxdr1123/ZeroBot v1.2.2/go.mod h1:83nHtG8V5TAxPwH/LCDxLpZk4khIgs29dkr5TBWf7fc=
|
github.com/wdvxdr1123/ZeroBot v1.2.2/go.mod h1:83nHtG8V5TAxPwH/LCDxLpZk4khIgs29dkr5TBWf7fc=
|
||||||
github.com/wdvxdr1123/ZeroBot v1.2.3/go.mod h1:83nHtG8V5TAxPwH/LCDxLpZk4khIgs29dkr5TBWf7fc=
|
github.com/wdvxdr1123/ZeroBot v1.2.3/go.mod h1:83nHtG8V5TAxPwH/LCDxLpZk4khIgs29dkr5TBWf7fc=
|
||||||
github.com/wdvxdr1123/ZeroBot v1.2.4 h1:eC/41Tlkj1jxXW91x4K+qjUlaQXKGgUeLhxw7C6+qkM=
|
github.com/wdvxdr1123/ZeroBot v1.2.4 h1:eC/41Tlkj1jxXW91x4K+qjUlaQXKGgUeLhxw7C6+qkM=
|
||||||
@ -101,6 +124,7 @@ github.com/wdvxdr1123/ZeroBot v1.2.4/go.mod h1:83nHtG8V5TAxPwH/LCDxLpZk4khIgs29d
|
|||||||
github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
|
github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
|
||||||
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
|
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
|
||||||
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
|
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
|
||||||
|
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9 h1:psW17arqaxU48Z5kZ0CQnkZWQJsqcURM6tKiBApRjXI=
|
||||||
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
|
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
|
||||||
golang.org/x/image v0.0.0-20191009234506-e7c1f5e7dbb8/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0=
|
golang.org/x/image v0.0.0-20191009234506-e7c1f5e7dbb8/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0=
|
||||||
golang.org/x/image v0.0.0-20210628002857-a66eb6448b8d h1:RNPAfi2nHY7C2srAV8A49jpsYr0ADedCk1wq6fTMTvs=
|
golang.org/x/image v0.0.0-20210628002857-a66eb6448b8d h1:RNPAfi2nHY7C2srAV8A49jpsYr0ADedCk1wq6fTMTvs=
|
||||||
@ -130,6 +154,7 @@ golang.org/x/sys v0.0.0-20210816074244-15123e1e1f71/go.mod h1:oPkhp1MJrh7nUepCBc
|
|||||||
golang.org/x/sys v0.0.0-20210902050250-f475640dd07b h1:S7hKs0Flbq0bbc9xgYt4stIEG1zNDFqyrPwAX2Wj/sE=
|
golang.org/x/sys v0.0.0-20210902050250-f475640dd07b h1:S7hKs0Flbq0bbc9xgYt4stIEG1zNDFqyrPwAX2Wj/sE=
|
||||||
golang.org/x/sys v0.0.0-20210902050250-f475640dd07b/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
golang.org/x/sys v0.0.0-20210902050250-f475640dd07b/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
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=
|
||||||
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
|
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
|
||||||
golang.org/x/text v0.3.6 h1:aRYxNxv6iGQlyVaZmk6ZgYEDa+Jg18DxebPSrd6bg1M=
|
golang.org/x/text v0.3.6 h1:aRYxNxv6iGQlyVaZmk6ZgYEDa+Jg18DxebPSrd6bg1M=
|
||||||
golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
|
golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
|
||||||
@ -145,10 +170,14 @@ golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8T
|
|||||||
google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
|
google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
|
||||||
google.golang.org/protobuf v1.26.0 h1:bxAC2xTBsZGibn2RTntX0oH50xLsqy1OxA9tTL3p/lk=
|
google.golang.org/protobuf v1.26.0 h1:bxAC2xTBsZGibn2RTntX0oH50xLsqy1OxA9tTL3p/lk=
|
||||||
google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
|
google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
|
||||||
|
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM=
|
||||||
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
||||||
gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys=
|
gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys=
|
||||||
gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw=
|
gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw=
|
||||||
gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
|
gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
|
||||||
|
gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
|
||||||
|
gopkg.in/yaml.v2 v2.2.8 h1:obN1ZagJSUGI0Ek/LBmuj4SNLPfIny3KsKFopxRdj10=
|
||||||
|
gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
|
||||||
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c h1:dUUwHk2QECo/6vqA44rthZ8ie2QXMNeKRTHCNY2nXvo=
|
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c h1:dUUwHk2QECo/6vqA44rthZ8ie2QXMNeKRTHCNY2nXvo=
|
||||||
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
||||||
lukechampine.com/uint128 v1.1.1 h1:pnxCASz787iMf+02ssImqk6OLt+Z5QHMoZyUXR4z6JU=
|
lukechampine.com/uint128 v1.1.1 h1:pnxCASz787iMf+02ssImqk6OLt+Z5QHMoZyUXR4z6JU=
|
||||||
|
|||||||
12
main.go
12
main.go
@ -1,6 +1,7 @@
|
|||||||
package main
|
package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"flag"
|
||||||
"fmt"
|
"fmt"
|
||||||
"os"
|
"os"
|
||||||
"strings"
|
"strings"
|
||||||
@ -44,6 +45,8 @@ import (
|
|||||||
log "github.com/sirupsen/logrus"
|
log "github.com/sirupsen/logrus"
|
||||||
zero "github.com/wdvxdr1123/ZeroBot"
|
zero "github.com/wdvxdr1123/ZeroBot"
|
||||||
"github.com/wdvxdr1123/ZeroBot/driver"
|
"github.com/wdvxdr1123/ZeroBot/driver"
|
||||||
|
|
||||||
|
"github.com/FloatTech/ZeroBot-Plugin/control"
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
@ -54,9 +57,18 @@ var (
|
|||||||
"* Project: https://github.com/FloatTech/ZeroBot-Plugin",
|
"* Project: https://github.com/FloatTech/ZeroBot-Plugin",
|
||||||
}
|
}
|
||||||
banner = strings.Join(contents, "\n")
|
banner = strings.Join(contents, "\n")
|
||||||
|
// 是否禁用gui
|
||||||
|
disableGui bool
|
||||||
)
|
)
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
|
// 解析命令行参数,输入`-g`即可禁用gui
|
||||||
|
flag.BoolVar(&disableGui, "g", false, "Disable the gui")
|
||||||
|
flag.Parse()
|
||||||
|
if !disableGui {
|
||||||
|
control.InitGui()
|
||||||
|
}
|
||||||
|
|
||||||
log.SetLevel(log.DebugLevel)
|
log.SetLevel(log.DebugLevel)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user