2026-05-12 17:24:53 +08:00

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
}