Skip to main content

Community and channel events

Use ChannelHandler to receive community channel events and general channel sync events. This single interface covers:

  • Community channel list sync and sub-channel events (type changes, user kicks, deletions)
  • General channel sync status (remote channel list, channel status)
  • Per-channel setting changes synced from other devices (pinned, do-not-disturb, translate strategy)
  • Typing status notifications

Register and remove the handler

kotlin
// Register
NCEngine.addChannelHandler("CHANNEL_HANDLER", object : ChannelHandler {
override fun onChannelStatusSyncCompleted(event: ChannelStatusSyncCompletedEvent) { /* ... */ }
})

// Remove
NCEngine.removeChannelHandler("CHANNEL_HANDLER")

Sync events

kotlin
NCEngine.addChannelHandler("CHANNEL_SYNC_HANDLER", object : ChannelHandler {

// All channel status data sync completed
override fun onChannelStatusSyncCompleted(event: ChannelStatusSyncCompletedEvent) {
if (event.error == null) {
// Sync succeeded — refresh UI
}
}

// Remote channel list sync completed
override fun onRemoteChannelsSyncCompleted(event: RemoteChannelsSyncCompletedEvent) {
if (event.error == null) {
// Remote channels pulled from server
}
}

// Community channel list and latest messages sync completed
override fun onCommunityChannelsSyncCompleted(event: CommunityChannelsSyncCompletedEvent) {
// Community channel list is ready
}

// Channel pinned status changed on another device
override fun onChannelPinnedSync(event: ChannelPinnedSyncEvent) {
println("Channel ${event.channelIdentifier.channelId} pinned: ${event.isPinned}")
}

// Channel do-not-disturb level changed on another device
override fun onChannelNoDisturbLevelSync(event: ChannelNoDisturbLevelSyncEvent) {
println("Channel ${event.channelIdentifier.channelId} DND level: ${event.level}")
}

// Channel translation strategy changed on another device
override fun onChannelTranslateStrategySync(event: ChannelTranslateStrategySyncEvent) {
println("Channel ${event.channelIdentifier.channelId} translate strategy: ${event.strategy}")
}

// Typing status changed in a channel
override fun onTypingStatusChanged(event: TypingStatusChangedEvent) {
// event.channelIdentifier — channel identifier
// event.userTypingStatus — list of users currently typing (empty = stopped)
for (status in event.userTypingStatus) {
println("User ${status.userId} is typing")
}
}
})

Community sub-channel events

kotlin
NCEngine.addChannelHandler("COMMUNITY_HANDLER", object : ChannelHandler {

// Sub-channel changed between public and private
override fun onCommunitySubChannelTypeChanged(event: CommunitySubChannelTypeChangedEvent) {
for (info in event.info) {
// info.channelIdentifier — sub-channel identifier
// info.changeType — CommunitySubChannelChangeType
println("Sub-channel type changed: ${info.changeType}")
}
}

// Current user was kicked from a private sub-channel
override fun onCommunitySubChannelUserKicked(event: CommunitySubChannelUserKickedEvent) {
for (info in event.info) {
// info.channelIdentifier — sub-channel identifier
// info.userId — kicked user ID
println("Kicked from sub-channel: ${info.userId}")
}
}

// A sub-channel was deleted
override fun onCommunitySubChannelDeleted(event: CommunitySubChannelDeletedEvent) {
for (info in event.info) {
// info.channelIdentifier — community channel identifier
// info.subChannelType — CommunitySubChannelType (PUBLIC or PRIVATE)
// info.operationTime — deletion timestamp (ms)
println("Sub-channel deleted at ${info.operationTime}")
}
}
})

Callback reference

CallbackEvent typeTrigger
onChannelStatusSyncCompletedChannelStatusSyncCompletedEventAll channel status data sync completed. Check event.error for failure.
onRemoteChannelsSyncCompletedRemoteChannelsSyncCompletedEventRemote channel list pulled from server. Check event.error for failure.
onCommunityChannelsSyncCompletedCommunityChannelsSyncCompletedEventCommunity channel list and latest messages synced.
onChannelPinnedSyncChannelPinnedSyncEventChannel pinned status changed on another device.
onChannelNoDisturbLevelSyncChannelNoDisturbLevelSyncEventChannel DND level changed on another device.
onChannelTranslateStrategySyncChannelTranslateStrategySyncEventChannel translation strategy changed on another device.
onTypingStatusChangedTypingStatusChangedEventUsers started or stopped typing. userTypingStatus is empty when all stopped.
onCommunitySubChannelTypeChangedCommunitySubChannelTypeChangedEventSub-channel changed between public and private. Iterate event.info.
onCommunitySubChannelUserKickedCommunitySubChannelUserKickedEventUser kicked from a private sub-channel. Iterate event.info.
onCommunitySubChannelDeletedCommunitySubChannelDeletedEventOne or more sub-channels deleted. Iterate event.info.

For more on community channel management, see Community channels.