pull/458/head
withchao 2 years ago
parent f379546455
commit d4b67f18bf

@ -3,6 +3,7 @@ package msg
import (
"context"
"encoding/json"
"github.com/google/uuid"
"time"
"github.com/OpenIMSDK/Open-IM-Server/pkg/common/constant"
@ -40,15 +41,19 @@ func (m *msgServer) RevokeMsg(ctx context.Context, req *msg.RevokeMsgReq) (*msg.
if len(msgs) == 0 || msgs[0] == nil {
return nil, errs.ErrRecordNotFound.Wrap("msg not found")
}
// todo: 判断是否已经撤回
if msgs[0].ContentType == constant.MsgRevokeNotification {
return nil, errs.ErrMsgAlreadyRevoke.Wrap("msg already revoke")
}
data, _ := json.Marshal(msgs[0])
log.ZInfo(ctx, "GetMsgBySeqs", "conversationID", req.ConversationID, "seq", req.Seq, "msg", string(data))
var role int32
if !tokenverify.IsAppManagerUid(ctx) {
switch msgs[0].SessionType {
case constant.SingleChatType:
if err := tokenverify.CheckAccessV3(ctx, msgs[0].SendID); err != nil {
return nil, err
}
role = user.AppMangerLevel
case constant.SuperGroupChatType:
members, err := m.Group.GetGroupMemberInfoMap(ctx, msgs[0].GroupID, utils.Distinct([]string{req.UserID, msgs[0].SendID}), true)
if err != nil {
@ -65,23 +70,28 @@ func (m *msgServer) RevokeMsg(ctx context.Context, req *msg.RevokeMsgReq) (*msg.
return nil, errs.ErrNoPermission.Wrap("no permission")
}
}
if member := members[req.UserID]; member != nil {
role = member.RoleLevel
}
default:
return nil, errs.ErrInternalServer.Wrap("msg sessionType not supported")
}
}
now := time.Now().UnixMilli()
err = m.MsgDatabase.RevokeMsg(ctx, req.ConversationID, req.Seq, &unRelationTb.RevokeModel{
ID: uuid.New().String(),
Role: role,
UserID: req.UserID,
Nickname: user.Nickname,
Time: time.Now().UnixMilli(),
Time: now,
})
if err != nil {
return nil, err
}
tips := sdkws.RevokeMsgTips{
RevokerUserID: req.UserID,
ClientMsgID: "",
RevokeTime: utils.GetCurrentTimestampByMill(),
ClientMsgID: msgs[0].ClientMsgID,
RevokeTime: now,
Seq: req.Seq,
SesstionType: msgs[0].SessionType,
ConversationID: req.ConversationID,

@ -21,6 +21,8 @@ type MsgDocModel struct {
}
type RevokeModel struct {
ID string `bson:"id"`
Role int32 `bson:"role"`
UserID string `bson:"user_id"`
Nickname string `bson:"nickname"`
Time int64 `bson:"time"`

@ -246,24 +246,30 @@ func (m *MsgMongoDriver) GetMsgBySeqIndexIn1Doc(ctx context.Context, userID stri
continue
}
if msg.Revoke != nil {
// var conversationID string
// if index := strings.LastIndex(docID, ":"); index > 0 {
// conversationID = docID[:index]
// }
revokeContent := sdkws.MessageRevokedContent{
// RevokerID: msg.Revoke.UserID,
// ClientMsgID: msg.Msg.ClientMsgID,
// RevokeTime: msg.Revoke.Time,
// SesstionType: msg.Msg.SessionType,
// Seq: msg.Msg.Seq,
// ConversationID: conversationID,
// ex: msg.Msg.Ex,
RevokerID: msg.Revoke.ID,
RevokerRole: msg.Revoke.Role,
ClientMsgID: msg.Msg.ClientMsgID,
RevokerNickname: msg.Revoke.Nickname,
RevokeTime: msg.Revoke.Time,
SourceMessageSendTime: msg.Msg.SendTime,
SourceMessageSendID: msg.Msg.SendID,
SourceMessageSenderNickname: msg.Msg.SenderNickname,
SessionType: msg.Msg.SessionType,
Seq: msg.Msg.Seq,
Ex: msg.Msg.Ex,
}
data, err := json.Marshal(&revokeContent)
if err != nil {
return nil, err
}
data, _ := json.Marshal(&revokeContent)
elem := sdkws.NotificationElem{
Detail: string(data),
}
content, _ := json.Marshal(&elem)
content, err := json.Marshal(&elem)
if err != nil {
return nil, err
}
msg.Msg.ContentType = constant.MsgRevokeNotification
msg.Msg.Content = string(content)
}

@ -68,6 +68,7 @@ const (
MutedInGroup = 1402 //群成员被禁言
MutedGroup = 1403 //群被禁言
UserNotRecvMsg = 1404 //用户设置了不接收消息
MsgAlreadyRevoke = 1405 //消息已撤回
// token错误码
TokenExpiredError = 1501

@ -49,9 +49,10 @@ var (
//不是对方的好友
ErrNotPeersFriend = NewCodeError(NotPeersFriend, "NotPeersFriend")
ErrMutedInGroup = NewCodeError(MutedInGroup, "MutedInGroup")
ErrMutedGroup = NewCodeError(MutedGroup, "MutedGroup")
ErrUserNotRecvMsg = NewCodeError(UserNotRecvMsg, "UserNotRecvMsg")
ErrMutedInGroup = NewCodeError(MutedInGroup, "MutedInGroup")
ErrMutedGroup = NewCodeError(MutedGroup, "MutedGroup")
ErrUserNotRecvMsg = NewCodeError(UserNotRecvMsg, "UserNotRecvMsg")
ErrMsgAlreadyRevoke = NewCodeError(MsgAlreadyRevoke, "MsgAlreadyRevoke")
ErrConnOverMaxNumLimit = NewCodeError(ConnOverMaxNumLimit, "ConnOverMaxNumLimit")

Loading…
Cancel
Save