@@ -147,6 +147,51 @@ func QryGroupInfo(ctx context.Context, groupId string) (errs.IMErrorCode, *apimo
147147 return errs .IMErrorCode_SUCCESS , ret
148148}
149149
150+ func GetGroupSettings (ctx context.Context , groupId string ) * apimodels.GroupManagement {
151+ ret := & apimodels.GroupManagement {
152+ GroupEditMsgRight : utils .IntPtr (7 ),
153+ GroupAddMemberRight : utils .IntPtr (7 ),
154+ GroupMentionAllRight : utils .IntPtr (7 ),
155+ GroupTopMsgRight : utils .IntPtr (7 ),
156+ GroupSendMsgRight : utils .IntPtr (7 ),
157+ GroupSetMsgLifeRight : utils .IntPtr (7 ),
158+ }
159+ appkey := ctxs .GetAppKeyFromCtx (ctx )
160+ grpExtStorage := storages .NewGroupExtStorage ()
161+ exts , err := grpExtStorage .QryExtFields (appkey , groupId )
162+ if err == nil {
163+ for _ , ext := range exts {
164+ if ext .ItemKey == apimodels .AttItemKey_GrpVerifyType {
165+ verifyType := utils .ToInt (ext .ItemValue )
166+ ret .GroupVerifyType = verifyType
167+ } else if ext .ItemKey == apimodels .AttItemKey_HideGrpMsg {
168+ hidGrpMsg := utils .ToInt (ext .ItemValue )
169+ var visible int = 0
170+ if hidGrpMsg > 0 {
171+ visible = 0
172+ } else {
173+ visible = 1
174+ }
175+ ret .GroupHisMsgVisible = * utils .IntPtr (visible )
176+ } else if ext .ItemKey == apimodels .AttItemKey_GrpEditMsgRight {
177+ editMsgRight := utils .ToInt (ext .ItemValue )
178+ ret .GroupEditMsgRight = utils .IntPtr (editMsgRight )
179+ } else if ext .ItemKey == apimodels .AttItemKey_AddMemberRight {
180+ ret .GroupAddMemberRight = utils .IntPtr (utils .ToInt (ext .ItemValue ))
181+ } else if ext .ItemKey == apimodels .AttItemKey_MentionAllRight {
182+ ret .GroupMentionAllRight = utils .IntPtr (utils .ToInt (ext .ItemValue ))
183+ } else if ext .ItemKey == apimodels .AttItemKey_TopMsgRight {
184+ ret .GroupTopMsgRight = utils .IntPtr (utils .ToInt (ext .ItemValue ))
185+ } else if ext .ItemKey == apimodels .AttItemKey_SendMsgRight {
186+ ret .GroupSendMsgRight = utils .IntPtr (utils .ToInt (ext .ItemValue ))
187+ } else if ext .ItemKey == apimodels .AttItemKey_SetMsgLifeRight {
188+ ret .GroupSetMsgLifeRight = utils .IntPtr (utils .ToInt (ext .ItemValue ))
189+ }
190+ }
191+ }
192+ return ret
193+ }
194+
150195func CheckGroupMembers (ctx context.Context , req * apimodels.CheckGroupMembersReq ) (errs.IMErrorCode , * apimodels.CheckGroupMembersResp ) {
151196 appkey := ctxs .GetAppKeyFromCtx (ctx )
152197 ret := & apimodels.CheckGroupMembersResp {
@@ -367,15 +412,13 @@ func GrpInviteMembers(ctx context.Context, req *apimodels.GroupInviteReq) (errs.
367412 Results : make (map [string ]apimodels.GrpInviteResultReason ),
368413 }
369414 //TODO check grp member exist
370- //check user's setting
371- directAddMemberIds := []string {}
372- for _ , memberId := range req .MemberIds {
373- reason := apimodels .GrpInviteResultReason_InviteSucc
374- mUserSetting := GetUserSettings (ctx , memberId )
375- if mUserSetting .GrpVerifyType == apimodels .GrpVerifyType_DeclineGroup {
376- reason = apimodels .GrpInviteResultReason_InviteDecline
377- } else if mUserSetting .GrpVerifyType == apimodels .GrpVerifyType_NeedGrpVerify {
378- storage := storages .NewGrpApplicationStorage ()
415+ //check group's setting
416+ grpSettings := GetGroupSettings (ctx , req .GroupId )
417+ if grpSettings .GroupVerifyType == apimodels .GrpVerifyType_DeclineGroup {
418+ results .Reason = apimodels .GrpInviteResultReason_InviteDecline
419+ } else if grpSettings .GroupVerifyType == apimodels .GrpVerifyType_NeedGrpVerify {
420+ storage := storages .NewGrpApplicationStorage ()
421+ for _ , memberId := range req .MemberIds {
379422 storage .InviteUpsert (models.GrpApplication {
380423 GroupId : req .GroupId ,
381424 ApplyType : models .GrpApplicationType_Invite ,
@@ -385,42 +428,64 @@ func GrpInviteMembers(ctx context.Context, req *apimodels.GroupInviteReq) (errs.
385428 Status : models .GrpApplicationStatus_Invite ,
386429 AppKey : appkey ,
387430 })
388- reason = apimodels .GrpInviteResultReason_InviteSendOut
389- } else if mUserSetting .GrpVerifyType == apimodels .GrpVerifyType_NoNeedGrpVerify {
390- directAddMemberIds = append (directAddMemberIds , memberId )
391- reason = apimodels .GrpInviteResultReason_InviteSucc
392431 }
393- results .Results [memberId ] = reason
394- }
395- if len (directAddMemberIds ) > 0 {
396- memberStorage := storages .NewGroupMemberStorage ()
397- items := []models.GroupMember {}
398- for _ , mId := range directAddMemberIds {
399- items = append (items , models.GroupMember {
400- GroupId : req .GroupId ,
401- MemberId : mId ,
402- AppKey : appkey ,
403- })
404- }
405- memberStorage .BatchCreate (items )
406- //sync to imserver
407- if sdk := imsdk .GetImSdk (appkey ); sdk != nil {
408- sdk .GroupAddMembers (juggleimsdk.GroupMembersReq {
409- GroupId : req .GroupId ,
410- MemberIds : directAddMemberIds ,
411- })
412- }
413- //send notify msg
414- targetUsers := []* apimodels.UserObj {}
415- for _ , memberId := range directAddMemberIds {
416- targetUsers = append (targetUsers , GetUser (ctx , memberId ))
432+ results .Reason = apimodels .GrpInviteResultReason_InviteSendOut
433+ } else {
434+ //check user's setting
435+ directAddMemberIds := []string {}
436+ for _ , memberId := range req .MemberIds {
437+ reason := apimodels .GrpInviteResultReason_InviteSucc
438+ mUserSetting := GetUserSettings (ctx , memberId )
439+ if mUserSetting .GrpVerifyType == apimodels .GrpVerifyType_DeclineGroup {
440+ reason = apimodels .GrpInviteResultReason_InviteDecline
441+ } else if mUserSetting .GrpVerifyType == apimodels .GrpVerifyType_NeedGrpVerify {
442+ storage := storages .NewGrpApplicationStorage ()
443+ storage .InviteUpsert (models.GrpApplication {
444+ GroupId : req .GroupId ,
445+ ApplyType : models .GrpApplicationType_Invite ,
446+ RecipientId : memberId ,
447+ InviterId : requesterId ,
448+ ApplyTime : time .Now ().UnixMilli (),
449+ Status : models .GrpApplicationStatus_Invite ,
450+ AppKey : appkey ,
451+ })
452+ reason = apimodels .GrpInviteResultReason_InviteSendOut
453+ } else if mUserSetting .GrpVerifyType == apimodels .GrpVerifyType_NoNeedGrpVerify {
454+ directAddMemberIds = append (directAddMemberIds , memberId )
455+ reason = apimodels .GrpInviteResultReason_InviteSucc
456+ }
457+ results .Results [memberId ] = reason
417458 }
418- notify := & apimodels.GroupNotify {
419- Operator : GetUser (ctx , requesterId ),
420- Members : targetUsers ,
421- Type : apimodels .GroupNotifyType_AddMember ,
459+ if len (directAddMemberIds ) > 0 {
460+ memberStorage := storages .NewGroupMemberStorage ()
461+ items := []models.GroupMember {}
462+ for _ , mId := range directAddMemberIds {
463+ items = append (items , models.GroupMember {
464+ GroupId : req .GroupId ,
465+ MemberId : mId ,
466+ AppKey : appkey ,
467+ })
468+ }
469+ memberStorage .BatchCreate (items )
470+ //sync to imserver
471+ if sdk := imsdk .GetImSdk (appkey ); sdk != nil {
472+ sdk .GroupAddMembers (juggleimsdk.GroupMembersReq {
473+ GroupId : req .GroupId ,
474+ MemberIds : directAddMemberIds ,
475+ })
476+ }
477+ //send notify msg
478+ targetUsers := []* apimodels.UserObj {}
479+ for _ , memberId := range directAddMemberIds {
480+ targetUsers = append (targetUsers , GetUser (ctx , memberId ))
481+ }
482+ notify := & apimodels.GroupNotify {
483+ Operator : GetUser (ctx , requesterId ),
484+ Members : targetUsers ,
485+ Type : apimodels .GroupNotifyType_AddMember ,
486+ }
487+ SendGrpNotify (ctx , req .GroupId , notify )
422488 }
423- SendGrpNotify (ctx , req .GroupId , notify )
424489 }
425490 return errs .IMErrorCode_SUCCESS , results
426491}
0 commit comments