> ## Documentation Index
> Fetch the complete documentation index at: https://cometchat-22654f5b-docs-rn-guide-message-privately.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Edit A Message

> Edit A Message — CometChat documentation.

While [editing a message](/sdk/android/2.0/edit-message#edit-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](/sdk/android/2.0/edit-message#real-time-message-edit-events) when your app is running
2. Calling a method to retrieve [missed message edit events](/sdk/android/2.0/edit-message#missed-message-edit-events) when your app was not running

## Edit a Message

*In other words, as a sender, how do I edit a message?*

In order to edit a message, you can use the `editMessage()` method. This method takes an object of the `BaseMessage` class. At the moment, you are only allowed to edit `TextMessage` and `CustomMessage`. Thus, the `BaseMessage` object must either be a Text or a Custom Message.

<Tabs>
  <Tab title="Java">
    ```java theme={null}
    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());
      }

    });
    ```
  </Tab>

  <Tab title="Kotlin">
    ```kotlin theme={null}
    val updatedMessage = TextMessage(message.receiverUid, (message as TextMessage).text + "edited", message.receiverType)

    updatedMessage.id=message.id
      
    CometChat.editMessage(updatedMessage, object: CometChat.CallbackListener<BaseMessage>() {
             override fun onSuccess(message: BaseMessage) {
                Log.d(TAG,"editMessage onSuccess: ${message}")
              }

             override fun onError(e: CometChatException) {
                Log.d(TAG,"editMessage onError: ${e.message}")
              }

       })
    ```
  </Tab>
</Tabs>

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 Role       | Conversation Type       | Edit Capabilities         |
| --------------- | ----------------------- | ------------------------- |
| Message Sender  | One-on-one Conversation | Messages they've sent     |
| Message Sender  | Group Conversation      | Messages they've sent     |
| Group Owner     | Group Conversation      | All messages in the group |
| Group Moderator | Group Conversation      | All messages in the group |

## Real-time Message Edit Events

*In other words, as a recipient, how do I know when someone has edited their message when my app is running?*

In order to receive real-time events for message being edited, you need to override the `onMessageEdited()` method of the `MessageListener` class.

<Tabs>
  <Tab title="Java">
    ```java theme={null}
    CometChat.addMessageListener(listenerID, new CometChat.MessageListener() {

    @Override
      public void onMessageEdited(BaseMessage message) {
      Log.d(TAG, "Message Edited");
    }
    });
    ```
  </Tab>

  <Tab title="Kotlin">
    ```kotlin theme={null}
    CometChat.addMessageListener(listenerID, object : CometChat.MessageListener() {
          fun onMessageEdited(message: BaseMessage) {
                    Log.d(TAG, "Message Edited")
                }
         })
    ```
  </Tab>
</Tabs>

## Missed Message Edit Events

*In other words, as a recipient, how do I know when someone edited their message when 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. Now the message with ID 50 will have the `editedAt` and the `editedBy` fields set whenever it is pulled from the history. Also, 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.

<Note>
  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.
</Note>
