diff --git a/model/message.go b/model/message.go index f2d240b..951ee0f 100644 --- a/model/message.go +++ b/model/message.go @@ -88,7 +88,13 @@ func (m Message) IsRevokeMsg() bool { // @receiver m // @return bool func (m Message) IsNewUserJoin() bool { - sysFlag := m.Type == types.MsgTypeSys && strings.Contains(m.Content, "\"邀请\"") && strings.Contains(m.Content, "\"加入了群聊") + if m.Type != types.MsgTypeSys { + return false + } + + isInvitation := strings.Contains(m.Content, "\"邀请\"") && strings.Contains(m.Content, "\"加入了群聊") + isScanQrCode := strings.Contains(m.Content, "通过扫描") && strings.Contains(m.Content, "加入群聊") + sysFlag := isInvitation || isScanQrCode if sysFlag { return true } @@ -97,7 +103,7 @@ func (m Message) IsNewUserJoin() bool { if err := xml.Unmarshal([]byte(m.Content), &d); err != nil { return false } - return m.Type == types.MsgTypeSys && d.Type == "delchatroommember" + return d.Type == "delchatroommember" } // IsAt diff --git a/mq/handler.go b/mq/handler.go index 3350a87..223014b 100644 --- a/mq/handler.go +++ b/mq/handler.go @@ -22,6 +22,11 @@ func parse(msg []byte) { // 记录原始数据 m.Raw = string(msg) + // 如果不是自己的消息,直接返回 + if m.ToUser == current.GetRobotInfo().WxId { + return + } + // 提取出群成员信息 // Sys类型的消息正文不包含微信 Id,所以不需要处理 if m.IsGroup() && m.Type != types.MsgTypeSys { diff --git a/tcpserver/parse.go b/tcpserver/parse.go index 981d543..6f3b35d 100644 --- a/tcpserver/parse.go +++ b/tcpserver/parse.go @@ -23,6 +23,11 @@ func parse(remoteAddr net.Addr, msg []byte) { // 记录原始数据 m.Raw = string(msg) + // 如果不是自己的消息,直接返回 + if m.ToUser == current.GetRobotInfo().WxId { + return + } + // 提取出群成员信息 // Sys类型的消息正文不包含微信 Id,所以不需要处理 if m.IsGroup() && m.Type != types.MsgTypeSys {