Skip to main content
Advanced Member Discovery: The query member feature enables comprehensive member search and retrieval within chat channels. With support for filtering by membership status, roles, deletion status, and flexible sorting options, you can create seamless member management experiences.

Query Capabilities

Member querying provides flexible search and filtering options to help users find and manage channel participants effectively.

Advanced Filtering

Multiple filter criteria
  • Membership status filtering (active, muted, banned)
  • Role-based member filtering
  • Include/exclude deleted users
  • Flexible sorting options

Paginated Results

Efficient data loading
  • Pagination support for large member lists
  • Real-time updates with Live Collections
  • Search functionality with keyword matching
  • Customizable page sizes and limits

Implementation Guide

  • Basic Query
  • Advanced Filtering
  • Search Members
Essential member retrieval functionalityQuery members within a chat channel with flexible filtering and sorting options. This enables comprehensive member discovery and management within your chat application.

Required Parameters

ParameterTypeDescription
channelIdStringUnique identifier of the channel to query members from

Optional Parameters

ParameterTypeDefaultDescription
filterFilterEnumALLFilter members by membership status (ALL, MEMBER, MUTED, BANNED)
rolesArray<String>[]Filter members by specific roles assigned in the channel
includeDeletedBooleanfalseInclude members whose user accounts have been deleted
sortBySortEnumLAST_CREATEDSort order for member results (FIRST_CREATED, LAST_CREATED)

Code Examples

var token: AmityNotificationToken?

func queryMemberExample() {
  let membershipParticipation = AmityChannelParticipation(client: client, andChannel: "channel1")
    token = membershipParticipation
                .getMembers(filter: .all, sortBy: .firstCreated, roles: roles)
                .observe { collection, change, error in
        // ...
    }
}
Member Count Calculation: Channel member count value is based on all members in the channel including the members whose user has been deleted.

API Reference

Filter Options

Membership status filtering
  • ALL: Members with any membership status
  • MEMBER: Only active members
  • MUTED: Only muted members
  • BANNED: Only banned members

Sort Options

Result ordering
  • FIRST_CREATED: Oldest members first
  • LAST_CREATED: Newest members first

Membership Status Filters

FilterDescriptionUse Case
ALLMembers with any membership statusGeneral member lists, comprehensive views
MEMBEROnly active membersUser-facing member lists, active participant views
MUTEDOnly muted membersModeration interfaces, review muted users
BANNEDOnly banned membersAdministrative tools, ban management

Role-Based Filtering

ParameterTypeDescription
rolesArray<String>Filter members by specific roles (e.g., “moderator”, “admin”)

Data Inclusion Options

ParameterTypeDescription
includeDeletedBooleanWhether to include members whose user accounts have been deleted

Sorting Options

Sort OptionDescriptionBehavior
FIRST_CREATEDSort by membership creation date ascendingShows oldest members first
LAST_CREATEDSort by membership creation date descendingShows newest members first
Membership Creation Date: The membership creation date refers to when the user joined the channel, not when their user account was created.

Best Practices

Performance and efficiency strategiesTargeted Filtering
  • Use specific filters to reduce result set size and improve load times
  • Combine multiple filter criteria when searching for specific member types
  • Consider your use case when deciding whether to include deleted users
Pagination Management
  • Implement proper pagination for channels with large member counts (>20 members)
  • Use appropriate page sizes (20-50 items) to balance performance and UX
  • Load additional pages only when needed to conserve bandwidth
Handling different member states effectivelyStatus-Specific UI Design
  • Active Members: Primary focus for user-facing features and interactions
  • Muted Members: Separate moderation views with clear status indicators
  • Banned Members: Administrative interfaces with appropriate warnings
  • Deleted Users: Consider data retention and privacy requirements
Real-Time Status Updates
  • Utilize live collections to receive instant status changes
  • Update UI immediately when member status changes
  • Handle status transitions gracefully in your interface
Privacy Considerations
  • Respect user privacy when displaying member information
  • Implement appropriate access controls for sensitive member data
  • Consider anonymization for deleted user accounts
User experience optimization for member discoverySearch Implementation
  • Implement debounced search (300-500ms delay) to reduce API calls
  • Provide real-time search results as users type
  • Show search suggestions or recent searches for better UX
Filter Interface Design
  • Provide intuitive filter controls for membership status and roles
  • Show active filter indicators and easy reset options
Loading States & Feedback
  • Show appropriate loading indicators during queries
  • Implement skeleton screens for better perceived performance
  • Provide clear error messages when queries fail
Progressive Enhancement
  • Load basic member list first, then apply filters
  • Implement infinite scroll for seamless browsing
  • Cache search results for faster subsequent queries
Implementing proper access controlsPermission-Based Queries
  • Filter query results based on user permissions
  • Restrict sensitive member information to authorized users only
  • Implement role-based visibility controls
Administrative Features
  • Provide comprehensive member management for admins and moderators
  • Include banned and muted member views for moderation purposes
  • Implement bulk actions for efficient member management
User Privacy
  • Respect channel privacy settings when displaying members
  • Implement appropriate member visibility controls
  • Consider opt-out preferences for member discovery
Example: Permission-Based Filtering
fun getVisibleMembers(userRole: String): Observable<PagingData<AmityChannelMember>> {
    val filter = when (userRole) {
        "admin", "moderator" -> AmityChannelMembershipFilter.ALL
        else -> AmityChannelMembershipFilter.MEMBER
    }
    
    return channelRepository.membership(channelId)
        .getMembers()
        .filter(filter)
        .build()
        .query()
}
Implementation Strategy: Start with basic member queries using default parameters, then progressively add filtering, search, and role-based access as your application grows. Use specific filters and pagination to optimize performance for channels with large member counts.