From ee5e9a0f9025853c346683b46f4743a93e43db73 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Tue, 27 Jun 2023 20:17:35 +0800 Subject: [PATCH] feat: conversation set @ type --- internal/rpc/msg/send.go | 48 ++++++++++++++++++++++++++++++++++- pkg/rpcclient/conversation.go | 4 +++ 2 files changed, 51 insertions(+), 1 deletion(-) diff --git a/internal/rpc/msg/send.go b/internal/rpc/msg/send.go index 89f015315..6046c086c 100644 --- a/internal/rpc/msg/send.go +++ b/internal/rpc/msg/send.go @@ -2,12 +2,15 @@ package msg import ( "context" - "github.com/OpenIMSDK/Open-IM-Server/pkg/common/constant" "github.com/OpenIMSDK/Open-IM-Server/pkg/common/log" + "github.com/OpenIMSDK/Open-IM-Server/pkg/common/mcontext" promePkg "github.com/OpenIMSDK/Open-IM-Server/pkg/common/prome" "github.com/OpenIMSDK/Open-IM-Server/pkg/errs" + pbConversation "github.com/OpenIMSDK/Open-IM-Server/pkg/proto/conversation" pbMsg "github.com/OpenIMSDK/Open-IM-Server/pkg/proto/msg" + "github.com/OpenIMSDK/Open-IM-Server/pkg/proto/sdkws" + "github.com/OpenIMSDK/Open-IM-Server/pkg/proto/wrapperspb" "github.com/OpenIMSDK/Open-IM-Server/pkg/utils" ) @@ -46,6 +49,9 @@ func (m *msgServer) sendMsgSuperGroupChat(ctx context.Context, req *pbMsg.SendMs if err != nil { return nil, err } + if req.MsgData.ContentType == constant.AtText { + go m.setConversationAtInfo(ctx, req.MsgData) + } if err = callbackAfterSendGroupMsg(ctx, req); err != nil { log.ZWarn(ctx, "CallbackAfterSendGroupMsg", err) } @@ -56,6 +62,46 @@ func (m *msgServer) sendMsgSuperGroupChat(ctx context.Context, req *pbMsg.SendMs resp.ClientMsgID = req.MsgData.ClientMsgID return resp, nil } +func (m *msgServer) setConversationAtInfo(nctx context.Context, msg *sdkws.MsgData) { + ctx := mcontext.NewCtx("@@@" + mcontext.GetOperationID(nctx)) + var atUserID []string + conversation := &pbConversation.ConversationReq{ + ConversationID: utils.GetConversationIDByMsg(msg), + ConversationType: msg.SessionType, + GroupID: msg.GroupID, + } + tagAll := utils.IsContain(constant.AtAllString, msg.AtUserIDList) + if tagAll { + memberUserIDList, err := m.Group.GetGroupMemberIDs(ctx, msg.GroupID) + if err != nil { + log.ZWarn(ctx, "GetGroupMemberIDs", err) + return + } + atUserID = utils.DifferenceString([]string{constant.AtAllString}, msg.AtUserIDList) + if len(atUserID) == 0 { //just @everyone + conversation.GroupAtType = &wrapperspb.Int32Value{Value: constant.AtAll} + } else { //@Everyone and @other people + conversation.GroupAtType = &wrapperspb.Int32Value{Value: constant.AtAllAtMe} + err := m.Conversation.SetConversations(ctx, atUserID, conversation) + if err != nil { + log.ZWarn(ctx, "SetConversations", err, atUserID, conversation) + } + memberUserIDList = utils.DifferenceString(atUserID, memberUserIDList) + } + conversation.GroupAtType = &wrapperspb.Int32Value{Value: constant.AtAll} + err = m.Conversation.SetConversations(ctx, memberUserIDList, conversation) + if err != nil { + log.ZWarn(ctx, "SetConversations", err, memberUserIDList, conversation) + } + } else { + conversation.GroupAtType = &wrapperspb.Int32Value{Value: constant.AtMe} + err := m.Conversation.SetConversations(ctx, msg.AtUserIDList, conversation) + if err != nil { + log.ZWarn(ctx, "SetConversations", err, msg.AtUserIDList, conversation) + } + } + +} func (m *msgServer) sendMsgNotification(ctx context.Context, req *pbMsg.SendMsgReq) (resp *pbMsg.SendMsgResp, err error) { promePkg.Inc(promePkg.SingleChatMsgRecvSuccessCounter) diff --git a/pkg/rpcclient/conversation.go b/pkg/rpcclient/conversation.go index a41565558..e9a7b1ea4 100644 --- a/pkg/rpcclient/conversation.go +++ b/pkg/rpcclient/conversation.go @@ -63,6 +63,10 @@ func (c *ConversationRpcClient) SetConversationMaxSeq(ctx context.Context, owner _, err := c.Client.SetConversationMaxSeq(ctx, &pbConversation.SetConversationMaxSeqReq{OwnerUserID: ownerUserIDs, ConversationID: conversationID, MaxSeq: maxSeq}) return err } +func (c *ConversationRpcClient) SetConversations(ctx context.Context, userIDs []string, conversation *pbConversation.ConversationReq) error { + _, err := c.Client.SetConversations(ctx, &pbConversation.SetConversationsReq{UserIDs: userIDs, Conversation: conversation}) + return err +} func (c *ConversationRpcClient) GetConversationIDs(ctx context.Context, ownerUserID string) ([]string, error) { resp, err := c.Client.GetConversationIDs(ctx, &pbConversation.GetConversationIDsReq{UserID: ownerUserID})