package logic import ( "context" "spark-server/internal/module/group/entity" "spark-server/internal/pkg/errs" "spark-server/internal/pkg/i18n" "spark-server/internal/pkg/reqctx" ) func (s *Service) CheckMentions(ctx context.Context, userID, conversationID int64, atAll bool, uids []int64) error { if !s.ready() || userID <= 0 || conversationID <= 0 { return errs.ErrForbidden } if !atAll && len(uids) == 0 { return nil } g, err := s.repo.GetByConversation(ctx, conversationID) if err != nil || !g.Active() { return errs.ErrForbidden } mem, err := s.requireMember(ctx, g.ID, userID) if err != nil { return err } lang := reqctx.Lang(ctx) if atAll && !mem.CanManage() { return errs.ErrForbidden.WithMsg(i18n.T(lang, i18n.KeyGroupMentionDenied, nil)) } if len(uids) == 0 { return nil } ids, err := s.repo.ListMemberIDs(ctx, g.ID) if err != nil { return err } inGroup := make(map[int64]struct{}, len(ids)) for _, id := range ids { inGroup[id] = struct{}{} } for _, uid := range entity.UniqueUIDs(uids) { if _, ok := inGroup[uid]; !ok { return errs.ErrInvalidArgument.WithMsg(i18n.T(lang, i18n.KeyGroupMentionInvalid, nil)) } } return nil }