From a905c3ca99db70ad91c8be7a7454cbb5a0587f33 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E5=AF=BB=E6=AC=A2?= Date: Fri, 5 Jul 2024 09:16:43 +0800 Subject: [PATCH] =?UTF-8?q?:sparkles:=20=E6=8E=A8=E9=80=81=E9=82=80?= =?UTF-8?q?=E8=AF=B7=E5=8A=A0=E7=BE=A4=E6=B6=88=E6=81=AF=E5=88=B0=E9=85=8D?= =?UTF-8?q?=E7=BD=AE=E7=9A=84=E7=94=A8=E6=88=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- model/message.go | 50 ++++++++++++++++++++++++++++++++++++++++++++++ mq/handler.go | 12 +++++++++++ tcpserver/parse.go | 12 +++++++++++ 3 files changed, 74 insertions(+) diff --git a/model/message.go b/model/message.go index 951ee0f..1e99cc9 100644 --- a/model/message.go +++ b/model/message.go @@ -32,6 +32,39 @@ type systemMsgDataXml struct { Type string `xml:"type,attr"` } +// appMsgDataXml +// @description: 微信app消息的xml结构 +type appMsgDataXml struct { + XMLName xml.Name `xml:"msg"` + Text string `xml:",chardata"` + AppMsg struct { + Text string `xml:",chardata"` + Appid string `xml:"appid,attr"` + SdkVer string `xml:"sdkver,attr"` + Title string `xml:"title"` + Des string `xml:"des"` + Action string `xml:"action"` + Type string `xml:"type"` + ShowType string `xml:"showtype"` + Content string `xml:"content"` + URL string `xml:"url"` + ThumbUrl string `xml:"thumburl"` + LowUrl string `xml:"lowurl"` + AppAttach struct { + Text string `xml:",chardata"` + TotalLen string `xml:"totallen"` + AttachId string `xml:"attachid"` + FileExt string `xml:"fileext"` + } `xml:"appattach"` + ExtInfo string `xml:"extinfo"` + } `xml:"appmsg"` + AppInfo struct { + Text string `xml:",chardata"` + Version string `xml:"version"` + AppName string `xml:"appname"` + } `xml:"appinfo"` +} + // atMsgDataXml // @description: 微信@消息的xml结构 type atMsgDataXml struct { @@ -163,3 +196,20 @@ func (m Message) CleanContentStartWith(prefix string) bool { return strings.HasPrefix(content, prefix) } + +// IsInvitationJoinGroup +// @description: 是否是邀请入群消息 +// @receiver m +// @return bool 是否是邀请入群消息 +// @return string 邀请入群消息内容 +func (m Message) IsInvitationJoinGroup() (flag bool, str string) { + if m.Type == types.MsgTypeApp { + // 解析xml + var md appMsgDataXml + if err := xml.Unmarshal([]byte(m.Content), &md); err != nil { + return + } + return md.AppMsg.Type == "5" && strings.Contains(md.AppMsg.Content, "邀请你加入群聊"), md.AppMsg.Des + } + return +} diff --git a/mq/handler.go b/mq/handler.go index 3350a87..be76ac3 100644 --- a/mq/handler.go +++ b/mq/handler.go @@ -3,8 +3,10 @@ package mq import ( "encoding/json" "go-wechat/common/current" + "go-wechat/config" "go-wechat/model" "go-wechat/types" + "go-wechat/utils" "log" "strings" ) @@ -37,6 +39,16 @@ func parse(msg []byte) { } log.Printf("收到新微信消息\n消息来源: %s\n群成员: %s\n消息类型: %v\n消息内容: %s", m.FromUser, m.GroupUser, m.Type, m.Content) + // 如果是邀请进群,推送到配置的用户 + if flag, dec := m.IsInvitationJoinGroup(); flag { + for _, user := range config.Conf.System.NewFriendNotify.ToUser { + if user != "" { + // 发送一条新消息 + utils.SendMessage(user, "", dec, 0) + } + } + } + // 插件不为空,开始执行 if p := current.GetRobotMessageHandler(); p != nil { p(&m) diff --git a/tcpserver/parse.go b/tcpserver/parse.go index 981d543..8dd971c 100644 --- a/tcpserver/parse.go +++ b/tcpserver/parse.go @@ -3,8 +3,10 @@ package tcpserver import ( "encoding/json" "go-wechat/common/current" + "go-wechat/config" "go-wechat/model" "go-wechat/types" + "go-wechat/utils" "log" "net" "strings" @@ -38,6 +40,16 @@ func parse(remoteAddr net.Addr, msg []byte) { } log.Printf("%s\n消息来源: %s\n群成员: %s\n消息类型: %v\n消息内容: %s", remoteAddr, m.FromUser, m.GroupUser, m.Type, m.Content) + // 如果是邀请进群,推送到配置的用户 + if flag, dec := m.IsInvitationJoinGroup(); flag { + for _, user := range config.Conf.System.NewFriendNotify.ToUser { + if user != "" { + // 发送一条新消息 + utils.SendMessage(user, "", dec, 0) + } + } + } + // 插件不为空,开始执行 if p := current.GetRobotMessageHandler(); p != nil { p(&m)