From af38f09faf1cee142d3321e733c047dedf040122 Mon Sep 17 00:00:00 2001 From: withchao <993506633@qq.com> Date: Fri, 19 May 2023 10:49:03 +0800 Subject: [PATCH 01/13] groupServer --- pkg/rpcclient/notification/group.go | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/pkg/rpcclient/notification/group.go b/pkg/rpcclient/notification/group.go index 0fa14dfbc..d4e6f3ec9 100644 --- a/pkg/rpcclient/notification/group.go +++ b/pkg/rpcclient/notification/group.go @@ -351,9 +351,11 @@ func (g *GroupNotificationSender) JoinGroupApplicationNotification(ctx context.C if err != nil { return err } + if !utils.Contain(mcontext.GetOpUserID(ctx), userIDs...) { + userIDs = append(userIDs, mcontext.GetOpUserID(ctx)) + } tips := &sdkws.JoinGroupApplicationTips{Group: group, Applicant: user, ReqMsg: req.ReqMessage} for _, userID := range userIDs { - log.ZInfo(ctx, "JoinGroupApplicationNotification", "group", req.GroupID, "userID", userID) err = g.msgClient.Notification(ctx, mcontext.GetOpUserID(ctx), userID, constant.JoinGroupApplicationNotification, tips) if err != nil { log.ZError(ctx, "JoinGroupApplicationNotification failed", err, "group", req.GroupID, "userID", userID) From 04b9e328b14c67b8b1269be117f0f76ff61cbab3 Mon Sep 17 00:00:00 2001 From: withchao <993506633@qq.com> Date: Fri, 19 May 2023 10:54:23 +0800 Subject: [PATCH 02/13] groupServer --- pkg/rpcclient/notification/group.go | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/pkg/rpcclient/notification/group.go b/pkg/rpcclient/notification/group.go index d4e6f3ec9..f5589f4ce 100644 --- a/pkg/rpcclient/notification/group.go +++ b/pkg/rpcclient/notification/group.go @@ -351,11 +351,9 @@ func (g *GroupNotificationSender) JoinGroupApplicationNotification(ctx context.C if err != nil { return err } - if !utils.Contain(mcontext.GetOpUserID(ctx), userIDs...) { - userIDs = append(userIDs, mcontext.GetOpUserID(ctx)) - } + userIDs = append(userIDs, req.InviterUserID, mcontext.GetOpUserID(ctx)) tips := &sdkws.JoinGroupApplicationTips{Group: group, Applicant: user, ReqMsg: req.ReqMessage} - for _, userID := range userIDs { + for _, userID := range utils.Distinct(userIDs) { err = g.msgClient.Notification(ctx, mcontext.GetOpUserID(ctx), userID, constant.JoinGroupApplicationNotification, tips) if err != nil { log.ZError(ctx, "JoinGroupApplicationNotification failed", err, "group", req.GroupID, "userID", userID) From 394b609a4424a0a8978b4dad0b20ef43262a7498 Mon Sep 17 00:00:00 2001 From: withchao <993506633@qq.com> Date: Fri, 19 May 2023 11:32:40 +0800 Subject: [PATCH 03/13] sec --- pkg/common/convert/user.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkg/common/convert/user.go b/pkg/common/convert/user.go index de25fd434..625bfef7d 100644 --- a/pkg/common/convert/user.go +++ b/pkg/common/convert/user.go @@ -14,7 +14,7 @@ func UsersDB2Pb(users []*relationTb.UserModel) (result []*sdkws.UserInfo) { userPb.Nickname = user.Nickname userPb.FaceURL = user.FaceURL userPb.Ex = user.Ex - userPb.CreateTime = user.CreateTime.Unix() + userPb.CreateTime = user.CreateTime.UnixMilli() userPb.AppMangerLevel = user.AppMangerLevel userPb.GlobalRecvMsgOpt = user.GlobalRecvMsgOpt result = append(result, &userPb) @@ -28,7 +28,7 @@ func UserPb2DB(user *sdkws.UserInfo) *relationTb.UserModel { userDB.Nickname = user.Nickname userDB.FaceURL = user.FaceURL userDB.Ex = user.Ex - userDB.CreateTime = time.Unix(user.CreateTime, 0) + userDB.CreateTime = time.UnixMilli(user.CreateTime) userDB.AppMangerLevel = user.AppMangerLevel userDB.GlobalRecvMsgOpt = user.GlobalRecvMsgOpt return &userDB From 6f273832eaecd95b4801bc0014ab95e387410362 Mon Sep 17 00:00:00 2001 From: withchao <993506633@qq.com> Date: Fri, 19 May 2023 11:38:02 +0800 Subject: [PATCH 04/13] group notification --- pkg/rpcclient/notification/group.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/rpcclient/notification/group.go b/pkg/rpcclient/notification/group.go index f5589f4ce..3d1973388 100644 --- a/pkg/rpcclient/notification/group.go +++ b/pkg/rpcclient/notification/group.go @@ -694,7 +694,7 @@ func (g *GroupNotificationSender) MemberEnterDirectlyNotification(ctx context.Co return err } tips := &sdkws.MemberEnterTips{Group: group, EntrantUser: user} - return g.msgClient.Notification(ctx, mcontext.GetOpUserID(ctx), group.GroupID, constant.GroupMemberCancelMutedNotification, tips) + return g.msgClient.Notification(ctx, mcontext.GetOpUserID(ctx), group.GroupID, constant.MemberEnterNotification, tips) } func (g *GroupNotificationSender) SuperGroupNotification(ctx context.Context, sendID, recvID string) (err error) { From 49d391d9bd4119fd63cb4f26e20bc214007a5580 Mon Sep 17 00:00:00 2001 From: withchao <993506633@qq.com> Date: Fri, 19 May 2023 11:46:39 +0800 Subject: [PATCH 05/13] group notification --- internal/rpc/group/group.go | 1 + 1 file changed, 1 insertion(+) diff --git a/internal/rpc/group/group.go b/internal/rpc/group/group.go index f66ea934e..926acb6bf 100644 --- a/internal/rpc/group/group.go +++ b/internal/rpc/group/group.go @@ -723,6 +723,7 @@ func (s *groupServer) GroupApplicationResponse(ctx context.Context, req *pbGroup } func (s *groupServer) JoinGroup(ctx context.Context, req *pbGroup.JoinGroupReq) (resp *pbGroup.JoinGroupResp, err error) { + defer log.ZInfo(ctx, "JoinGroup.Return") user, err := s.User.GetUserInfo(ctx, req.InviterUserID) if err != nil { return nil, err From 044741ff205cf45c074ef39cb5ad804111e6f98a Mon Sep 17 00:00:00 2001 From: withchao <993506633@qq.com> Date: Fri, 19 May 2023 11:51:11 +0800 Subject: [PATCH 06/13] group notification --- internal/rpc/group/group.go | 1 + 1 file changed, 1 insertion(+) diff --git a/internal/rpc/group/group.go b/internal/rpc/group/group.go index 926acb6bf..82f523ce5 100644 --- a/internal/rpc/group/group.go +++ b/internal/rpc/group/group.go @@ -741,6 +741,7 @@ func (s *groupServer) JoinGroup(ctx context.Context, req *pbGroup.JoinGroupReq) } else if !s.IsNotFound(err) && utils.Unwrap(err) != errs.ErrRecordNotFound { return nil, err } + log.ZInfo(ctx, "JoinGroup.groupInfo", "group", group, "eq", group.NeedVerification == constant.Directly) resp = &pbGroup.JoinGroupResp{} if group.NeedVerification == constant.Directly { if group.GroupType == constant.SuperGroup { From 4ae5acefc0f6df138fd8a054788f7394a52b7cd0 Mon Sep 17 00:00:00 2001 From: withchao <993506633@qq.com> Date: Fri, 19 May 2023 14:21:18 +0800 Subject: [PATCH 07/13] group notification --- pkg/common/db/controller/conversation.go | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/pkg/common/db/controller/conversation.go b/pkg/common/db/controller/conversation.go index cb2dc6f15..cc27f8f73 100644 --- a/pkg/common/db/controller/conversation.go +++ b/pkg/common/db/controller/conversation.go @@ -221,9 +221,11 @@ func (c *ConversationDataBase) CreateGroupChatConversation(ctx context.Context, conversations = append(conversations, &conversation) } cache = cache.DelConversationIDs(notExistUserIDs...).DelUserConversationIDsHash(notExistUserIDs...) - err = c.conversationDB.Create(ctx, conversations) - if err != nil { - return err + if len(conversations) > 0 { + err = c.conversationDB.Create(ctx, conversations) + if err != nil { + return err + } } _, err = c.conversationDB.UpdateByMap(ctx, existConversationUserIDs, conversationID, map[string]interface{}{"max_seq": 0}) if err != nil { From e7797167cbee556c022c203fe9d7fa708d5e25e3 Mon Sep 17 00:00:00 2001 From: withchao <993506633@qq.com> Date: Fri, 19 May 2023 14:41:16 +0800 Subject: [PATCH 08/13] group notification --- pkg/rpcclient/notification/group.go | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/pkg/rpcclient/notification/group.go b/pkg/rpcclient/notification/group.go index 3d1973388..5f4453a83 100644 --- a/pkg/rpcclient/notification/group.go +++ b/pkg/rpcclient/notification/group.go @@ -87,7 +87,8 @@ func (g *GroupNotificationSender) getGroupInfo(ctx context.Context, groupID stri } func (g *GroupNotificationSender) getGroupMembers(ctx context.Context, groupID string, userIDs []string) ([]*sdkws.GroupMemberFullInfo, error) { - members, err := g.db.FindGroupMember(ctx, []string{groupID}, userIDs, []int32{constant.GroupOwner}) + //members, err := g.db.FindGroupMember(ctx, []string{groupID}, userIDs, []int32{constant.GroupOwner}) + members, err := g.db.FindGroupMember(ctx, []string{groupID}, userIDs, nil) if err != nil { return nil, err } From 3a1dd0cb1db1800ce0838804c914fca02962a7cc Mon Sep 17 00:00:00 2001 From: withchao <993506633@qq.com> Date: Fri, 19 May 2023 15:18:19 +0800 Subject: [PATCH 09/13] group notification --- internal/rpc/group/group.go | 1 + pkg/rpcclient/notification/group.go | 9 +++++++-- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/internal/rpc/group/group.go b/internal/rpc/group/group.go index 82f523ce5..27cdb2f2c 100644 --- a/internal/rpc/group/group.go +++ b/internal/rpc/group/group.go @@ -781,6 +781,7 @@ func (s *groupServer) JoinGroup(ctx context.Context, req *pbGroup.JoinGroupReq) s.Notification.JoinGroupApplicationNotification(ctx, req) return resp, nil } +} func (s *groupServer) QuitGroup(ctx context.Context, req *pbGroup.QuitGroupReq) (*pbGroup.QuitGroupResp, error) { resp := &pbGroup.QuitGroupResp{} diff --git a/pkg/rpcclient/notification/group.go b/pkg/rpcclient/notification/group.go index 5f4453a83..81dfffa0b 100644 --- a/pkg/rpcclient/notification/group.go +++ b/pkg/rpcclient/notification/group.go @@ -614,11 +614,16 @@ func (g *GroupNotificationSender) GroupMutedNotification(ctx context.Context, gr if err != nil { return err } - user, err := g.getGroupMember(ctx, groupID, mcontext.GetOpUserID(ctx)) + users, err := g.getGroupMembers(ctx, groupID, []string{mcontext.GetOpUserID(ctx)}) if err != nil { return err } - tips := &sdkws.GroupMutedTips{Group: group, OpUser: user} + tips := &sdkws.GroupMutedTips{Group: group} + if len(users) > 0 { + tips.OpUser = users[0] + } else { + tips.OpUser = &sdkws.GroupMemberFullInfo{UserID: mcontext.GetOpUserID(ctx), GroupID: groupID} + } return g.msgClient.Notification(ctx, mcontext.GetOpUserID(ctx), group.GroupID, constant.GroupMutedNotification, tips) } From b776b3f15e1feb67b66b98eea46f927230e94df1 Mon Sep 17 00:00:00 2001 From: withchao <993506633@qq.com> Date: Fri, 19 May 2023 15:19:11 +0800 Subject: [PATCH 10/13] group notification --- internal/rpc/group/group.go | 1 - 1 file changed, 1 deletion(-) diff --git a/internal/rpc/group/group.go b/internal/rpc/group/group.go index 27cdb2f2c..82f523ce5 100644 --- a/internal/rpc/group/group.go +++ b/internal/rpc/group/group.go @@ -781,7 +781,6 @@ func (s *groupServer) JoinGroup(ctx context.Context, req *pbGroup.JoinGroupReq) s.Notification.JoinGroupApplicationNotification(ctx, req) return resp, nil } -} func (s *groupServer) QuitGroup(ctx context.Context, req *pbGroup.QuitGroupReq) (*pbGroup.QuitGroupResp, error) { resp := &pbGroup.QuitGroupResp{} From 628a18c3ed2bf7c956f5ab2ab4078339b0c6b0a7 Mon Sep 17 00:00:00 2001 From: withchao <993506633@qq.com> Date: Fri, 19 May 2023 15:22:56 +0800 Subject: [PATCH 11/13] group notification --- pkg/rpcclient/notification/group.go | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/pkg/rpcclient/notification/group.go b/pkg/rpcclient/notification/group.go index 81dfffa0b..6e3919e46 100644 --- a/pkg/rpcclient/notification/group.go +++ b/pkg/rpcclient/notification/group.go @@ -638,11 +638,16 @@ func (g *GroupNotificationSender) GroupCancelMutedNotification(ctx context.Conte if err != nil { return err } - user, err := g.getGroupMember(ctx, groupID, mcontext.GetOpUserID(ctx)) + users, err := g.getGroupMembers(ctx, groupID, []string{mcontext.GetOpUserID(ctx)}) if err != nil { return err } - tips := &sdkws.GroupCancelMutedTips{Group: group, OpUser: user} + tips := &sdkws.GroupCancelMutedTips{Group: group} + if len(users) > 0 { + tips.OpUser = users[0] + } else { + tips.OpUser = &sdkws.GroupMemberFullInfo{UserID: mcontext.GetOpUserID(ctx), GroupID: groupID} + } return g.msgClient.Notification(ctx, mcontext.GetOpUserID(ctx), group.GroupID, constant.GroupMutedNotification, tips) } From 37f8718bbb44d4291fadb7608a889f6f6578f562 Mon Sep 17 00:00:00 2001 From: withchao <993506633@qq.com> Date: Fri, 19 May 2023 15:26:32 +0800 Subject: [PATCH 12/13] group notification --- pkg/rpcclient/notification/group.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/rpcclient/notification/group.go b/pkg/rpcclient/notification/group.go index 6e3919e46..18c64464e 100644 --- a/pkg/rpcclient/notification/group.go +++ b/pkg/rpcclient/notification/group.go @@ -648,7 +648,7 @@ func (g *GroupNotificationSender) GroupCancelMutedNotification(ctx context.Conte } else { tips.OpUser = &sdkws.GroupMemberFullInfo{UserID: mcontext.GetOpUserID(ctx), GroupID: groupID} } - return g.msgClient.Notification(ctx, mcontext.GetOpUserID(ctx), group.GroupID, constant.GroupMutedNotification, tips) + return g.msgClient.Notification(ctx, mcontext.GetOpUserID(ctx), group.GroupID, constant.GroupCancelMutedNotification, tips) } func (g *GroupNotificationSender) GroupMemberInfoSetNotification(ctx context.Context, groupID, groupMemberUserID string) (err error) { From b6b77376d5e9bbedcd0944482cdf157c11ebbc18 Mon Sep 17 00:00:00 2001 From: withchao <993506633@qq.com> Date: Fri, 19 May 2023 15:49:48 +0800 Subject: [PATCH 13/13] group notification --- internal/push/push_to_client.go | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/internal/push/push_to_client.go b/internal/push/push_to_client.go index 54844678b..8c218f5a0 100644 --- a/internal/push/push_to_client.go +++ b/internal/push/push_to_client.go @@ -2,6 +2,7 @@ package push import ( "context" + "encoding/json" "errors" "github.com/OpenIMSDK/Open-IM-Server/internal/push/offlinepush" @@ -101,6 +102,16 @@ func (p *Pusher) Push2User(ctx context.Context, userIDs []string, msg *sdkws.Msg return nil } +func (p *Pusher) UnmarshalNotificationElem(bytes []byte, t interface{}) error { + var notificationElem struct { + Detail string `json:"detail,omitempty"` + } + if err := json.Unmarshal(bytes, ¬ificationElem); err != nil { + return err + } + return json.Unmarshal([]byte(notificationElem.Detail), t) +} + func (p *Pusher) Push2SuperGroup(ctx context.Context, groupID string, msg *sdkws.MsgData) (err error) { operationID := mcontext.GetOperationID(ctx) log.Debug(operationID, "Get super group msg from msg_transfer And push msg", msg.String(), groupID) @@ -113,6 +124,21 @@ func (p *Pusher) Push2SuperGroup(ctx context.Context, groupID string, msg *sdkws if err != nil { return err } + switch msg.ContentType { + case constant.MemberQuitNotification: + var tips sdkws.MemberQuitTips + if p.UnmarshalNotificationElem(msg.Content, &tips) != nil { + return err + } + pushToUserIDs = append(pushToUserIDs, tips.QuitUser.UserID) + case constant.MemberKickedNotification: + var tips sdkws.MemberKickedTips + if p.UnmarshalNotificationElem(msg.Content, &tips) != nil { + return err + } + kickedUsers := utils.Slice(tips.KickedUserList, func(e *sdkws.GroupMemberFullInfo) string { return e.UserID }) + pushToUserIDs = append(pushToUserIDs, kickedUsers...) + } } wsResults, err := p.GetConnsAndOnlinePush(ctx, msg, pushToUserIDs) if err != nil {