From a5373063078fe515dcc378d5dcafc0ded43b0f9c Mon Sep 17 00:00:00 2001 From: huoxue1 <3343780376@qq.com> Date: Fri, 12 Nov 2021 18:12:31 +0800 Subject: [PATCH] =?UTF-8?q?webui=E5=8A=9F=E8=83=BD=E6=B7=BB=E5=8A=A0=20(#7?= =?UTF-8?q?5)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * feat: webui添加功能 为webui添加处理request的请求 包括好友添加请求,群邀请请求,群申请加入请求 * feat: webui添加功能 为webui添加手动处理request的请求的功能 包括好友添加请求,群邀请请求,群申请加入请求 * fix: 修改request对象为指针存储 --- control/web/gui.go | 102 +++++++++++++++++++++++++++++++++++++++++++++ go.mod | 2 +- go.sum | 2 + 3 files changed, 105 insertions(+), 1 deletion(-) diff --git a/control/web/gui.go b/control/web/gui.go index d2a677a0..6be18ea1 100644 --- a/control/web/gui.go +++ b/control/web/gui.go @@ -1,3 +1,7 @@ +// Package webctrl +/* + * 一个用户webui的包,里面包含了webui所需的所有内容 + */ package webctrl import ( @@ -7,6 +11,7 @@ import ( "net/http" "os" "strconv" + "sync" manager "github.com/FloatTech/bot-manager" // 依赖gin监听server @@ -28,6 +33,8 @@ var ( logConn *websocket.Conn l logWriter + // 存储请求事件,flag作为键,一个request对象作为值 + requestData sync.Map ) // logWriter @@ -36,6 +43,20 @@ var ( type logWriter struct { } +// request +// @Description: 一个请求事件的结构体 +// +type request struct { + RequestType string `json:"request_type"` + SubType string `json:"sub_type"` + Type string `json:"type"` + Comment string `json:"comment"` + GroupID int64 `json:"group_id"` + UserID int64 `json:"user_id"` + Flag string `json:"flag"` + SelfID int64 `json:"self_id"` +} + // InitGui 初始化gui func InitGui() { // 将日志重定向到前端hook @@ -94,6 +115,10 @@ func controller() { }) context.JSON(200, datas) }) + // 获取所有请求 + engine.POST("/get_requests", getRequests) + // 执行一个请求事件 + engine.POST("handle_request", handelRequest) // 链接日志 engine.GET("/get_log", getLogs) // 获取前端标签 @@ -111,6 +136,41 @@ func controller() { } } +// handelRequest +/** + * @Description: 处理一个请求 + * @param context + */ +func handelRequest(context *gin.Context) { + var data map[string]interface{} + err := context.BindJSON(&data) + if err != nil { + context.JSON(404, nil) + return + } + r, ok := requestData.LoadAndDelete(data["flag"].(string)) + if !ok { + context.JSON(404, "flag not found") + } + r2 := r.(*request) + r2.handle(data["approve"].(bool), data["reason"].(string)) + context.JSON(200, "操作成功") +} + +// getRequests +/** + * @Description: 获取所有的请求 + * @param context + */ +func getRequests(context *gin.Context) { + var data []interface{} + requestData.Range(func(key, value interface{}) bool { + data = append(data, value) + return true + }) + context.JSON(200, data) +} + // updateAllPluginStatus /** * @Description: 改变所有插件的状态 @@ -367,6 +427,31 @@ func messageHandle() { } } }) + // 直接注册一个request请求监听器,优先级设置为最高,设置不阻断事件传播 + zero.OnRequest(func(ctx *zero.Ctx) bool { + if ctx.Event.RequestType == "friend" { + ctx.State["type_name"] = "好友添加" + } else { + if ctx.Event.SubType == "add" { + ctx.State["type_name"] = "加群请求" + } else { + ctx.State["type_name"] = "群邀请" + } + } + return true + }).SetBlock(false).FirstPriority().Handle(func(ctx *zero.Ctx) { + r := &request{ + RequestType: ctx.Event.RequestType, + SubType: ctx.Event.SubType, + Type: ctx.State["type_name"].(string), + GroupID: ctx.Event.GroupID, + UserID: ctx.Event.UserID, + Flag: ctx.Event.Flag, + Comment: ctx.Event.Comment, + SelfID: ctx.Event.SelfID, + } + requestData.Store(ctx.Event.Flag, r) + }) } // upgrade @@ -451,6 +536,23 @@ func cors() gin.HandlerFunc { } } +// handle +/** + * @Description: 提交一个请求 + * @receiver r + * @param approve 是否通过 + * @param reason 拒绝的理由 + */ +func (r *request) handle(approve bool, reason string) { + bot := zero.GetBot(r.SelfID) + if r.RequestType == "friend" { + bot.SetFriendAddRequest(r.Flag, approve, "") + } else { + bot.SetGroupAddRequest(r.Flag, r.SubType, approve, reason) + } + log.Debugln("[gui] ", "已处理", r.UserID, "的"+r.Type) +} + func (l logWriter) Write(p []byte) (n int, err error) { if logConn != nil { err := logConn.WriteMessage(websocket.TextMessage, p) diff --git a/go.mod b/go.mod index 6cb7877c..8c0e56d4 100644 --- a/go.mod +++ b/go.mod @@ -5,7 +5,7 @@ go 1.16 require ( github.com/FloatTech/AnimeAPI v1.1.10 github.com/FloatTech/ZeroBot-Plugin-Gif v0.2.4 - github.com/FloatTech/bot-manager v1.0.0 + github.com/FloatTech/bot-manager v1.0.1-0.20211112011524-85b9895271ed github.com/fogleman/gg v1.3.0 github.com/fumiama/cron v1.3.0 github.com/fumiama/go-base16384 v1.2.1 diff --git a/go.sum b/go.sum index c22c8b76..eb12167b 100644 --- a/go.sum +++ b/go.sum @@ -7,6 +7,8 @@ github.com/FloatTech/ZeroBot-Plugin-Gif v0.2.4/go.mod h1:W7ag6hml1pZTNzRXKU74OMr 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/bot-manager v1.0.1-0.20211112011524-85b9895271ed h1:GEOgDVbvaxXqZxgWE/y5JOlbMXrmq7n0M+m9g3md2To= +github.com/FloatTech/bot-manager v1.0.1-0.20211112011524-85b9895271ed/go.mod h1:8YYRJ16oroGHQGD2En0oVnmcKJkxR9O/jd5BPSfWfOQ= 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/StackExchange/wmi v1.2.1 h1:VIkavFPXSjcnS+O8yTq7NI32k0R5Aj+v39y29VYDOSA=