import type { IUser } from '@rocket.chat/core-typings'; import type { FindPaginated } from '@rocket.chat/model-typings'; import { Users } from '@rocket.chat/models'; import type { FindCursor, FindOptions, Filter } from 'mongodb'; import { settings } from '../../app/settings/server'; type FindUsersParam = { rid: string; status?: Filter['status']; skip?: number; limit?: number; filter?: string; sort?: Record; }; export function findUsersOfRoom({ rid, status, skip = 0, limit = 0, filter = '', sort }: FindUsersParam): FindPaginated> { const options: FindOptions = { projection: { name: 1, username: 1, nickname: 1, status: 1, avatarETag: 1, _updatedAt: 1, federated: 1, }, sort: { statusConnection: -1, ...(sort || { ...(settings.get('UI_Use_Real_Name') && { name: 1 }), username: 1 }), }, ...(skip > 0 && { skip }), ...(limit > 0 && { limit }), }; const searchFields = settings.get('Accounts_SearchFields').trim().split(','); return Users.findPaginatedByActiveUsersExcept(filter, undefined, options, searchFields, [ { __rooms: rid, ...(status && { status }), }, ]); }