> ## 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.

# Delete A Message

> Delete A Message — CometChat documentation.

While [deleting a message](/sdk/android/2.0/delete-message#delete-a-message) is straightforward, receiving events for deleted messages with CometChat has two parts:

1. Adding a listener to receive [real-time message deletes](/sdk/android/2.0/delete-message#real-time-message-delete-events) when your app is running.
2. Calling a method to retrieve [missed message delete events](/sdk/android/2.0/delete-message#missed-message-delete-events)-me when your app was not running.

## Delete a Message

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

In case you have to delete a message, you can use the `deleteMessage()` method. This method takes the message ID of the message to be deleted.

<Tabs>
  <Tab title="Java">
    ```java theme={null}
    private int messageId=1234;

    CometChat.deleteMessage(messageId, new CometChat.CallbackListener<BaseMessage>() {
       @Override
         public void onSuccess(BaseMessage message) {
         Log.d(TAG, "Message deleted successfully at : " + message.getDeletedAt());
       }

       @Override
         public void onError(CometChatException e) {
         Log.d(TAG, e.getMessage());
       }
     
     });
    ```
  </Tab>

  <Tab title="Kotlin">
    ```kotlin theme={null}
    private val messageId = 1234

    CometChat.deleteMessage(messageId,object : CometChat.CallbackListener<BaseMessage>(){
        override fun onSuccess(message: BaseMessage) {
             Log.d(TAG, "deleteMessage onSuccess : " + message.deletedAt)
             }

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

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

Once the message is deleted, In the `onSuccess()` callback, you get an object of the `BaseMessage` class, with the `deletedAt` field set with the timestamp of the time the message was deleted. Also, the `deletedBy` field is set. These two fields can be used to identify if the message is deleted while iterating through a list of messages.

By default, CometChat allows certain roles to delete a message.

| User Role       | Conversation Type       | Deletion Capabilities     |
| --------------- | ----------------------- | ------------------------- |
| Message Sender  | One-on-one Conversation | Messages they've sent     |
| Message Sender  | Group Conversation      | Messages they've sent     |
| Group Admin     | Group Conversation      | All messages in the group |
| Group Moderator | Group Conversation      | All messages in the group |

## Real-time Message Delete Events

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

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

<Tabs>
  <Tab title="Java">
    ```java theme={null}
    CometChat.addMessageListener(listenerID, new CometChat.MessageListener() {
      @Override
       public void onMessageDeleted(BaseMessage message) {
          Log.d(TAG, "Message Edited");
        }
    });
    ```
  </Tab>

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

## Missed Message Delete Events

*In other words, as a recipient, how do I know if someone deleted a message when my app was not running?*

When you retrieve the list of previous messages, for the messages that were deleted, the `deletedAt` and the `deletedBy` fields will be set. Also, for example, if the total number of messages for a conversation are 100, and the message with message ID 50 was deleted. Now the message with ID 50 will have the `deletedAt` and the `deletedBy` 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 deleted.

For the message deleted event, in the `Action` object received, the following fields can help you get the relevant information-

1. `action` - `deleted`
2. `actionOn` - Updated message object which was deleted.
3. `actionBy` - User object containing the details of the user who has deleted the message.
4. `actionFor` - User/group object having the details of the receiver to which the message was sent.

<Note>
  In order to delete 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>
