From cd4880e30e4b58f3c75c3e00cb4daf8702803301 Mon Sep 17 00:00:00 2001 From: linquan <349589071@qq.com> Date: Wed, 9 Jul 2025 11:49:51 +0800 Subject: [PATCH] send webhook --- api/v1/game/loginUrl.go | 11 ++++++ internal/controller/game_login_url.go | 5 +++ internal/serviceGame/internal/dbinit.go | 10 +++++ internal/serviceGame/loginUrl.go | 49 +++++++++++++++++++++++++ 4 files changed, 75 insertions(+) diff --git a/api/v1/game/loginUrl.go b/api/v1/game/loginUrl.go index 27a9d08..59b0c1f 100644 --- a/api/v1/game/loginUrl.go +++ b/api/v1/game/loginUrl.go @@ -121,3 +121,14 @@ type GetGameLoginUrlRes struct { g.Meta `mime:"application/json"` UrlStr []LoginUrlData `json:"serverList"` } + +type ServerUpdateMsgReq struct { + g.Meta `path:"/loginUrl/sendMsg" tags:"server" method:"post" summary:"sendMsg"` + Title string `json:"title"` + Subtitle string `json:"subtitle"` + Content string `json:"content"` +} + +type ServerUpdateMsgRes struct { + g.Meta `mime:"application/json"` +} diff --git a/internal/controller/game_login_url.go b/internal/controller/game_login_url.go index 35ff57f..4234318 100644 --- a/internal/controller/game_login_url.go +++ b/internal/controller/game_login_url.go @@ -71,3 +71,8 @@ func (c *loginUrlController) UpdateRouter(ctx context.Context, req *game.AddRout res, err = serviceGame.GameLoginUrl().UpdateRouter(ctx, req) return res, err } + +func (c *loginUrlController) ServerUpdateMsg(ctx context.Context, req *game.ServerUpdateMsgReq) (res *game.ServerUpdateMsgRes, err error) { + res, err = serviceGame.GameLoginUrl().ServerUpdateMsg(ctx, req) + return +} diff --git a/internal/serviceGame/internal/dbinit.go b/internal/serviceGame/internal/dbinit.go index 8cbce72..2f101e3 100644 --- a/internal/serviceGame/internal/dbinit.go +++ b/internal/serviceGame/internal/dbinit.go @@ -33,6 +33,7 @@ var ( RouterServer string Md5key string CallbackKey string + Webhook string ) func init() { @@ -72,6 +73,7 @@ func init() { CallbackKey = callbackKeyCfg.String() } + WebHookInit(ctx) } func RedisInit(config []map[string]interface{}) { @@ -172,3 +174,11 @@ func InitRouterServer(ctx context.Context) { log.Println("InitRechargeServer: ", err) } } + +func WebHookInit(ctx context.Context) { + webhook, err := g.Cfg().Get(ctx, "game.webhook") + if err != nil { + return + } + Webhook = webhook.String() +} diff --git a/internal/serviceGame/loginUrl.go b/internal/serviceGame/loginUrl.go index c6451de..bb0a5d0 100644 --- a/internal/serviceGame/loginUrl.go +++ b/internal/serviceGame/loginUrl.go @@ -2,6 +2,7 @@ package serviceGame import ( "context" + "errors" "fmt" "github.com/gogf/gf/v2/encoding/gcharset" "github.com/gogf/gf/v2/encoding/gjson" @@ -33,6 +34,7 @@ type IGameLoginUrl interface { GetRouter(ctx context.Context, req *game.GetRouterReq) (res *game.GetRouterRes, err error) GetServerVersionList(ctx context.Context, req *game.GetServerVersionListReq) (res *game.GetServerVersionListRes, err error) UpdateRouter(ctx context.Context, req *game.AddRouterReq) (res *game.AddRouterRes, err error) + ServerUpdateMsg(ctx context.Context, req *game.ServerUpdateMsgReq) (res *game.ServerUpdateMsgRes, err error) } type gameLoginUrlImpl struct { @@ -233,6 +235,7 @@ func (c *gameLoginUrlImpl) ReConfigServer(ctx context.Context, req *game.ReConfi service.Email().ConfigInit() service.TencentSms().ConfigInit() internal.InitChannel(ctx) + internal.WebHookInit(ctx) } else { internal.InitServer(ctx) internal.InitRechargeServer(ctx) @@ -348,3 +351,49 @@ func (c *gameLoginUrlImpl) GetServerVersionList(ctx context.Context, req *game.G } return } + +func (c *gameLoginUrlImpl) ServerUpdateMsg(ctx context.Context, req *game.ServerUpdateMsgReq) (res *game.ServerUpdateMsgRes, err error) { + //url := "https://open.feishu.cn/open-apis/bot/v2/hook/4033c60d-08b4-4d28-8eab-1d4159df98ed" + //url := "https://open.feishu.cn/open-apis/bot/v2/hook/6c2ebace-6815-49a8-9964-eb580ec0a56b" + url := internal.Webhook + if len(url) == 0 { + return nil, errors.New("地址为空!") + } + normal_v2 := map[string]interface{}{"default": "normal", "pc": "normal", "mobile": "heading"} + text_size := map[string]interface{}{"normal_v2": normal_v2} + style := map[string]interface{}{"text_size": text_size} + config := map[string]interface{}{"update_multi": true, "style": style} + elements := []map[string]interface{}{ + { + "tag": "markdown", + "content": req.Content, + "text_align": "left", + "text_size": "normal_v2", + "margin": "0px 0px 0px 0px", + }, + } + body1 := map[string]interface{}{"direction": "vertical", "padding": "12px 12px 12px 12px", "elements": elements} + title := map[string]interface{}{"tag": "plain_text", "content": req.Title} + subtitle := map[string]interface{}{"tag": "plain_text", "content": req.Subtitle} + header := map[string]interface{}{"title": title, "template": "blue", "subtitle": subtitle, "padding": "12px 12px 12px 12px"} + card := map[string]interface{}{"schema": "2.0", "config": config, "body": body1, "header": header} + body := map[string]interface{}{"msg_type": "interactive", "card": card} + fmt.Println("GetOnlineList - body: ", gjson.MustEncodeString(body)) + bytes := g.Client().PostBytes(ctx, url, gjson.MustEncodeString(body)) + src := string(bytes) + if g.IsEmpty(src) { + return + } + + srcCharset := "UTF-8" + tmp, _ := gcharset.ToUTF8(srcCharset, src) + json, err := gjson.DecodeToJson(tmp) + if err != nil { + return + } + fmt.Println("GetOnlineList - json: ", tmp) + if json.Get("code").Int() != 0 { + err = errors.New(json.Get("msg").String()) + } + return +}