diff --git a/internal/rpc/msg/send_msg.go b/internal/rpc/msg/send_msg.go index e712afcfd..269758dc6 100644 --- a/internal/rpc/msg/send_msg.go +++ b/internal/rpc/msg/send_msg.go @@ -96,15 +96,16 @@ func isMessageHasReadEnabled(pb *pbChat.SendMsgReq) (bool, int32, string) { return true, 0, "" } -func userIsMuteInGroup(groupID, userID string) (bool, error) { +func userIsMuteAndIsAdminInGroup(groupID, userID string) (isMute bool, isAdmin bool, err error) { groupMemberInfo, err := rocksCache.GetGroupMemberInfoFromCache(groupID, userID) if err != nil { - return false, utils.Wrap(err, "") + return false, false, utils.Wrap(err, "") } + if groupMemberInfo.MuteEndTime.Unix() >= time.Now().Unix() { - return true, nil + return true, groupMemberInfo.RoleLevel > constant.GroupOrdinaryUsers, nil } - return false, nil + return false, groupMemberInfo.RoleLevel > constant.GroupOrdinaryUsers, nil } func groupIsMuted(groupID string) (bool, error) { @@ -193,15 +194,7 @@ func (rpc *rpcChat) messageVerification(data *pbChat.SendMsgReq) (bool, int32, s return false, 202, "you are not in group", nil } } - isMute, err := groupIsMuted(data.MsgData.GroupID) - if err != nil { - errMsg := data.OperationID + err.Error() - return false, 223, errMsg, nil - } - if isMute { - return false, 225, "group id muted", nil - } - isMute, err = userIsMuteInGroup(data.MsgData.GroupID, data.MsgData.SendID) + isMute, isAdmin, err := userIsMuteAndIsAdminInGroup(data.MsgData.GroupID, data.MsgData.SendID) if err != nil { errMsg := data.OperationID + err.Error() return false, 223, errMsg, nil @@ -209,6 +202,17 @@ func (rpc *rpcChat) messageVerification(data *pbChat.SendMsgReq) (bool, int32, s if isMute { return false, 224, "you are muted", nil } + if isAdmin { + return true, 0, "", userIDList + } + isMute, err = groupIsMuted(data.MsgData.GroupID) + if err != nil { + errMsg := data.OperationID + err.Error() + return false, 223, errMsg, nil + } + if isMute { + return false, 225, "group id muted", nil + } return true, 0, "", userIDList case constant.SuperGroupChatType: groupInfo, err := rocksCache.GetGroupInfoFromCache(data.MsgData.GroupID) @@ -264,15 +268,7 @@ func (rpc *rpcChat) messageVerification(data *pbChat.SendMsgReq) (bool, int32, s return false, 202, "you are not in group", nil } } - isMute, err := groupIsMuted(data.MsgData.GroupID) - if err != nil { - errMsg := data.OperationID + err.Error() - return false, 223, errMsg, nil - } - if isMute { - return false, 225, "group id muted", nil - } - isMute, err = userIsMuteInGroup(data.MsgData.GroupID, data.MsgData.SendID) + isMute, isAdmin, err := userIsMuteAndIsAdminInGroup(data.MsgData.GroupID, data.MsgData.SendID) if err != nil { errMsg := data.OperationID + err.Error() return false, 223, errMsg, nil @@ -280,6 +276,17 @@ func (rpc *rpcChat) messageVerification(data *pbChat.SendMsgReq) (bool, int32, s if isMute { return false, 224, "you are muted", nil } + if isAdmin { + return true, 0, "", userIDList + } + isMute, err = groupIsMuted(data.MsgData.GroupID) + if err != nil { + errMsg := data.OperationID + err.Error() + return false, 223, errMsg, nil + } + if isMute { + return false, 225, "group id muted", nil + } return true, 0, "", userIDList } default: