Skip to main content
Quick Reference for AI Agents & Developers
// Edit a text message
val updatedMessage = TextMessage(
    message.receiverUid, 
    "Updated text", 
    message.receiverType
)
updatedMessage.id = message.id

CometChat.editMessage(updatedMessage, object: CometChat.CallbackListener<BaseMessage>() {
    override fun onSuccess(message: BaseMessage) { }
    override fun onError(e: CometChatException) { }
})

// Listen for edit events
CometChat.addMessageListener("LISTENER_ID", object : CometChat.MessageListener() {
    override fun onMessageEdited(message: BaseMessage) { }
})
Available via: SDK | REST API | UI Kits
While editing a message is straightforward, receiving events for edited messages with CometChat has two parts:
  1. Adding a listener to receive real-time message edit events when your app is running
  2. Calling a method to retrieve missed message edit events when your app was not running

Edit a Message

How do I edit a message? To edit a message, use the editMessage() method. This method takes an object of the BaseMessage class. Currently, you can only edit TextMessage and CustomMessage. Thus, the BaseMessage object must either be a Text or a Custom Message. For more details on message types, see Message Structure & Hierarchy.

Add/Update Tags

While editing a message, you can update the tags associated with the Message. You can use the setTags() method to do so. The tags added while editing a message will replace the tags set when the message was sent.
List<String> tags = new ArrayList<>();
tags.add("pinned");
textMessage.setTags(tags);
` Once the message object is ready, you can use the editMessage() method and pass the message object to it.
TextMessage updatedMessage = new TextMessage(message.getReceiverUid(), ((TextMessage)message).getText() + "edited",message.getReceiverType());

updatedMessage.setId(message.getId());

CometChat.editMessage(updatedMessage, new CometChat.CallbackListener<BaseMessage>() {
  @Override
  public void onSuccess(BaseMessage message) {
    Log.d(TAG,"Message Edited successfully: "+message.toString());
  }

  @Override
  public void onError(CometChatException e) {
    Log.d(TAG,"Message Edited failed with exception: "+e.getMessage());
  }
}); 
The object of the edited message will be returned in the onSucess() callback method of the listener. The message object will contain the editedAt field set with the timestamp of the time the message was edited. This will help you identify if the message was edited while iterating through the list of messages. The editedBy field is also set to the UID of the user who edited the message. By default, CometChat allows certain roles to edit a message.
User RoleConversation TypeEdit Capabilities
Message SenderOne-on-one ConversationMessages they’ve sent
Message SenderGroup ConversationMessages they’ve sent
Group OwnerGroup ConversationAll messages in the group
Group ModeratorGroup ConversationAll messages in the group

Real-time Message Edit Events

How do I know when someone has edited their message while my app is running? To receive real-time events for messages being edited, override the onMessageEdited() method of the MessageListener class. For more information on message listeners, see Real-Time Listeners.
CometChat.addMessageListener(listenerID, new CometChat.MessageListener() {
  @Override
  public void onMessageEdited(BaseMessage message) {
    Log.d(TAG, "Message Edited");
  }
});
Always remove listeners when they’re no longer needed (e.g., in onDestroy() or when navigating away). Failing to remove listeners can cause memory leaks and duplicate event handling.
CometChat.removeMessageListener("LISTENER_ID")

Missed Message Edit Events

How do I know when someone edited their message while my app was not running? When you retrieve the list of previous messages, for the message that was edited, the editedAt and the editedBy fields will be set. Also, for example, if the total number of messages for a conversation is 100, and the message with message ID 50 was edited, the message with ID 50 will have the editedAt and the editedBy fields set whenever it is pulled from the history. Additionally, the 101st message will be an Action message informing you that the message with ID 50 has been edited.. For the message edited event, in the Action object received, the following fields can help you get the relevant information-
  1. action - edited
  2. actionOn - Updated message object with the edited details.
  3. actionBy - User object containing the details of the user who has edited the message.
  4. actionFor - User/group object having the details of the receiver to which the message was sent.
In order to edit a message, you need to be either the sender of the message or the admin/moderator of the group in which the message was sent.

Best Practices

Always set the message ID from the original message using setId() before calling editMessage(). Without the correct ID, the edit operation will fail.
Tags set during editing completely replace the original tags. If you want to preserve existing tags, retrieve them first and merge with new tags before calling setTags().
Check user roles before allowing edits in your UI. Only message senders, group owners, and group moderators can edit messages to prevent unauthorized modifications.

Troubleshooting

Symptom: editMessage() fails with “Permission denied” error.Cause: User attempting to edit a message they didn’t send, or lacking admin/moderator privileges in a group.Solution: Verify the logged-in user is either the message sender or has admin/moderator role in the group. Use message.getSender().getUid() to check message ownership.
Symptom: editMessage() fails with “Invalid message ID” error.Cause: The message ID was not set on the updated message object before calling editMessage().Solution: Always call updatedMessage.setId(originalMessage.getId()) before editing. The ID is required to identify which message to update.
Symptom: Attempting to edit a media message fails.Cause: CometChat only supports editing TextMessage and CustomMessage types. Media messages cannot be edited.Solution: Check the message type before allowing edits. Only enable edit functionality for text and custom messages in your UI.

Next Steps