// Removes all of the messages of the channel but doesn't affect the channel data or members channelClient.truncate().enqueue { result -> if (result is Result.Success) { // Channel is truncated } else { // Handle Result.Failure } } // Or with message parameter. val message = Message(text = "Dear Everyone. The channel has been truncated.") channelClient.truncate(systemMessage = message).enqueue { result -> if (result is Result.Success) { // Channel is truncated } else { // Handle Result.Failure } }Truncate Channel
Truncating a channel removes all messages but preserves the channel data and members. To delete both the channel and its messages, use Delete Channel instead.
Truncation can be performed client-side or server-side. Client-side truncation requires the TruncateChannel permission.
On server-side calls, use the user_id field to identify who performed the truncation.
By default, truncation hides messages. To permanently delete messages, set hard_delete to true.
Truncate a Channel
await channel.truncate(); // Or with parameters: await channel.truncate({ 'hard_delete': true, 'skip_push': false, 'message': { 'text': 'Dear Everyone. The channel has been truncated.' 'user_id': user['id'] } }); // Setting user_id server side: await channel.truncate({ 'user_id': user['id'] });channel.truncate() # Or with parameters: channel.truncate( hard_delete=True, skip_push=True, message={ "text": "Dear Everyone. The channel has been truncated.", "user_id": random_user["id"], }, )await channelClient.TruncateAsync(channel.Type, channel.Id); // Or with parameters: await channelClient.TruncateAsync(channel.Type, channel.Id, new TruncateOptions { SkipPush = true, HardDelete = true, Message = new MessageRequest { Text = "Dear Everyone. The channel has been truncated.", User = new UserRequest { Id = user.Id }, }, });# require 'stream-chat' channel.truncate # Or with parameters: text = "Dear Everyone. The channel has been truncated." channel.truncate(skip_push: true, message: { text: text, user_id: @user[:id] })$channel->truncate(); // Or with parameters: $truncateOpts = [ "message" => ["text" => "Dear Everyone. The channel has been truncated.", "user_id" => $user["id"]], "skip_push" => true, ]; $channel->truncate($truncateOpts);err := ch.Truncate(context.Background()) // Or with parameters: err := ch.Truncate(context.Background(), TruncateWithSkipPush(true), TruncateWithHardDelete(true), TruncateWithMessage(&Message{Text: "Truncated channel.", User: &User{ID: user.ID}}), )let controller = client.channelController(for: .init(type: .messaging, id: "general")) controller.truncateChannel()await channel.TruncateAsync(systemMessage: "Clearing up the history!");// Android SDK // Removes all of the messages of the channel but doesn't affect the channel data or members channelClient.truncate().enqueue(result -> { if (result.isSuccess()) { // Channel is truncated } else { // Handle result.error() } }); // Backend SDK Channel.truncate(type, id).request();Channel->Truncate(); // Or with parameters: Channel->Truncate( true, // bHardDelete {}, // TruncatedAt FMessage{TEXT("Dear Everyone. The channel has been truncated.")}, false, // bSkipPush [] { // Channel is truncated });Truncate Options
| Field | Type | Description | Optional |
|---|---|---|---|
| truncated_at | Date | Truncate messages up to this time | ✓ |
| user_id | string | User who performed the truncation (server-side only) | ✓ |
| message | object | A system message to add after truncation | ✓ |
| skip_push | bool | Do not send a push notification for the system message | ✓ |
| hard_delete | bool | Permanently delete messages instead of hiding them | ✓ |