mirror of
https://github.com/openimsdk/open-im-server.git
synced 2026-07-03 00:33:22 +08:00
66 lines
1.9 KiB
Go
66 lines
1.9 KiB
Go
package group
|
|
|
|
import (
|
|
"context"
|
|
"time"
|
|
|
|
"github.com/openimsdk/open-im-server/v3/pkg/common/servererrs"
|
|
"github.com/openimsdk/open-im-server/v3/pkg/common/storage/model"
|
|
pbgroup "github.com/openimsdk/protocol/group"
|
|
"github.com/openimsdk/tools/mcontext"
|
|
)
|
|
|
|
func (s *groupServer) SetGroupMute(ctx context.Context, req *pbgroup.SetGroupMuteReq) (*pbgroup.SetGroupMuteResp, error) {
|
|
opUserID := mcontext.GetOpUserID(ctx)
|
|
if opUserID == "" {
|
|
return nil, servererrs.ErrNoPermission.WrapMsg("op user id is empty")
|
|
}
|
|
if _, err := s.db.TakeGroupMember(ctx, req.GroupID, opUserID); err != nil {
|
|
return nil, err
|
|
}
|
|
if req.Duration == 0 {
|
|
return &pbgroup.SetGroupMuteResp{}, s.groupMuteDB.Delete(ctx, opUserID, req.GroupID)
|
|
}
|
|
var muteEnd int64
|
|
if req.Duration != -1 {
|
|
muteEnd = time.Now().Unix() + req.Duration
|
|
}
|
|
return &pbgroup.SetGroupMuteResp{}, s.groupMuteDB.Upsert(ctx, &model.GroupMute{
|
|
OwnerUserID: opUserID,
|
|
GroupID: req.GroupID,
|
|
MuteEndTime: muteEnd,
|
|
MuteDuration: req.Duration,
|
|
CreateTime: time.Now(),
|
|
})
|
|
}
|
|
|
|
func (s *groupServer) GetGroupMute(ctx context.Context, req *pbgroup.GetGroupMuteReq) (*pbgroup.GetGroupMuteResp, error) {
|
|
opUserID := mcontext.GetOpUserID(ctx)
|
|
if opUserID == "" {
|
|
return nil, servererrs.ErrNoPermission.WrapMsg("op user id is empty")
|
|
}
|
|
if _, err := s.db.TakeGroupMember(ctx, req.GroupID, opUserID); err != nil {
|
|
return nil, err
|
|
}
|
|
rec, err := s.groupMuteDB.Get(ctx, opUserID, req.GroupID)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
if rec == nil {
|
|
return &pbgroup.GetGroupMuteResp{}, nil
|
|
}
|
|
now := time.Now().Unix()
|
|
if rec.MuteEndTime != 0 && rec.MuteEndTime <= now {
|
|
return &pbgroup.GetGroupMuteResp{}, nil
|
|
}
|
|
duration := rec.MuteDuration
|
|
if duration == 0 && rec.MuteEndTime == 0 {
|
|
duration = -1
|
|
}
|
|
return &pbgroup.GetGroupMuteResp{
|
|
Muted: true,
|
|
MuteEndTime: rec.MuteEndTime,
|
|
Duration: duration,
|
|
}, nil
|
|
}
|