Muting or Hiding Channels

Muting Channels

Messages added to a channel will not trigger push notifications, unhide a channel, nor change the unread count for the users that muted it. By default, mutes stay in place indefinitely until the user removes it; however, you can optionally set an expiration time. The list of muted channels and their expiration time is returned when the user connects.

// Mute a channel
val channelClient = client.channel("messaging", "general")
channelClient.mute().enqueue { result ->
  if (result.isSuccess) {
    // Channel is muted
  } else {
    // Handle result.error()
  }
}

// Get list of muted channels when user is connected
client.connectUser(User("user-id"), "token")
  .enqueue { result ->
    if (result.isSuccess) {
      val user = result.data().user
      // Result contains the list of channel mutes
      val mutes: List<ChannelMute> = user.channelMutes
    }
  }

// Get updates about muted channels
client.subscribeFor<NotificationChannelMutesUpdatedEvent> { event ->
  val mutes: List<ChannelMute> = event.me.channelsMute
}

Messages added to muted channels do not increase the unread messages count.

Query Muted Channels

Muted channels can be filtered or excluded by using the muted in your query channels filter.

// Filter for all channels excluding muted ones
val notMutedFilter = Filters.and(
  Filters.eq("muted", false),
  Filters.`in`("members", listOf(currentUserId)),
)

// Filter for muted channels
val mutedFilter = Filters.eq("muted", true)

// Executing a channels query with either of the filters
client.queryChannels(QueryChannelsRequest(
  filter = filter, // Set the correct filter here
  offset = 0,
  limit = 10,
)).enqueue { result ->
  if (result.isSuccess) {
    val channels: List<Channel> = result.data()
  } else {
    // Handle result.error()
  }
}

Remove a Channel Mute

Whenever you need to unmute, you are able to.

// Unmute channel for current user
channelClient.unmute().enqueue { result ->
  if (result.isSuccess) {
    // Channel is unmuted
  } else {
    // Handle result.error()
  }
}

Hiding a Channel

Hiding a channel will remove it from query channel requests for that user until a new message is added. Please keep in mind that hiding a channel is only available to members of that channel. Hidden channels may still have unread messages and you may wish to mark the channel as read prior to hiding it.

Optionally you can also clear the entire message history of that channel for the user. This way, when a new message is received, it will be the only one present in the channel.

// Hides the channel until a new message is added there
channelClient.hide().enqueue { result ->
  if (result.isSuccess) {
    // Channel is hidden
  } else {
    // Handle result.error()
  }
}

// Shows a previously hidden channel
channelClient.show().enqueue { result ->
  if (result.isSuccess) {
    // Channel is shown
  } else {
    // Handle result.error()
  }
}

// Hide the channel and clear the message history
channelClient.hide(clearHistory = true).enqueue { result ->
  if (result.isSuccess) {
    // Channel is hidden
  } else {
    // Handle result.error()
  }
}

You can still retrieve the list of hidden channels using the { "hidden" : true } query parameter.

© Getstream.io, Inc. All Rights Reserved.