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

> Delete CometChat messages in React Native apps by message ID and listen for real-time deletion events.

<Accordion title="AI Integration Quick Reference">
  ```javascript theme={null}
  let messageId = "MESSAGE_ID";

  // Delete a message
  await CometChat.deleteMessage(messageId);

  // Listen for real-time deletions
  CometChat.addMessageListener("ID", new CometChat.MessageListener({
    onMessageDeleted: (message) => {
      console.log("Deleted:", message.getId(), message.getDeletedAt());
    }
  }));
  ```

  **Who can delete:** Message sender, Group admin, Group moderator
  **Deleted fields:** `deletedAt` (timestamp), `deletedBy` (user who deleted)
</Accordion>

<Warning>
  This operation is irreversible. Deleted messages cannot be recovered.
</Warning>

Deleting a message is straightforward. Receiving delete events has two parts:

1. Adding a listener for [real-time deletes](#real-time-message-delete-events) when your app is running
2. Fetching [missed deletes](#missed-message-delete-events) when your app was offline

## Delete a Message

Use `deleteMessage()` with the message ID.

<Tabs>
  <Tab title="TypeScript">
    ```typescript theme={null}
    let messageId: number = 1;

    CometChat.deleteMessage(messageId).then(
      (message: CometChat.BaseMessage) => {
          console.log("Message deleted", message);
      }, (error: CometChat.CometChatException) => {
          console.log("Message delete failed with error:", error);
      }
    );
    ```
  </Tab>

  <Tab title="JavaScript">
    ```javascript theme={null}
    let messageId = "ID_OF_THE_MESSAGE_YOU_WANT_TO_DELETE";

    CometChat.deleteMessage(messageId).then(
    message => {
      console.log("Message deleted", message);
    }, error => {
      console.log("Message delete failed with error:", error);
    }
    );
    ```

    Alternatively, you can use the `async/await` syntax:

    ```javascript theme={null}
    let messageId = "ID_OF_THE_MESSAGE_YOU_WANT_TO_DELETE";

    try {
      const message = await CometChat.deleteMessage(messageId);
      console.log("Message deleted", message);
    } catch (error) {
      console.log("Message delete failed with error:", error);
    }
    ```
  </Tab>
</Tabs>

The deleted message object is returned with `deletedAt` (timestamp) and `deletedBy` (UID of deleter) fields set.

The `deleteMessage()` method returns a [`BaseMessage`](/sdk/reference/messages#basemessage) object.

Relevant fields to access on the returned message:

| Field     | Getter           | Return Type | Description                             |
| --------- | ---------------- | ----------- | --------------------------------------- |
| deletedAt | `getDeletedAt()` | `number`    | Timestamp when the message was deleted  |
| deletedBy | `getDeletedBy()` | `string`    | UID of the user who deleted the message |

Message deletion in CometChat is controlled by -

| User            | Conversation Type       | Deletion Capabilities          |
| --------------- | ----------------------- | ------------------------------ |
| Message Sender  | One-on-One Conversation | Messages they have sent.       |
| Message Sender  | Group Conversation      | Messages they have sent.       |
| Group Admin     | Group Conversation      | All the messages in the group. |
| Group Moderator | Group Conversation      | All the messages in the group. |

## Real-time Message Delete Events

Use `onMessageDeleted` in `MessageListener` to receive real-time delete events.

<Tabs>
  <Tab title="TypeScript">
    ```typescript theme={null}
    let listenerID: string = "UNIQUE_LISTENER_ID";

    CometChat.addMessageListener(
      listenerID,
      new CometChat.MessageListener({
          onMessageDeleted: (message: CometChat.BaseMessage) => {
              console.log("Deleted Message", message);
          }
      })
    );
    ```
  </Tab>

  <Tab title="JavaScript">
    ```javascript theme={null}
    let listenerID = "UNIQUE_LISTENER_ID";

    CometChat.addMessageListener(
    listenerID,
    new CometChat.MessageListener({
      onMessageDeleted: message => {
        console.log("Deleted Message", message);
      }
    })
    );
    ```
  </Tab>
</Tabs>

The `onMessageDeleted` callback receives a [`BaseMessage`](/sdk/reference/messages#basemessage) object with the `deletedAt` and `deletedBy` fields set.

Relevant fields to access on the returned message:

| Field     | Getter           | Return Type | Description                             |
| --------- | ---------------- | ----------- | --------------------------------------- |
| deletedAt | `getDeletedAt()` | `number`    | Timestamp when the message was deleted  |
| deletedBy | `getDeletedBy()` | `string`    | UID of the user who deleted the message |

## Missed Message Delete Events

When fetching message history, deleted messages have `deletedAt` and `deletedBy` fields set. Additionally, an [`Action`](/sdk/reference/messages#action) message is created when a message is deleted.

The [`Action`](/sdk/reference/messages#action) object contains:

* `action` — `deleted`
* `actionOn` — Deleted message object
* `actionBy` — User who deleted the message
* `actionFor` — Receiver (User/Group)

<Note>
  You must be the message sender or a group admin/moderator to delete a message.
</Note>

<Warning>
  Always remove message listeners when they're no longer needed to prevent memory leaks.
</Warning>

***

## Next Steps

<CardGroup cols={2}>
  <Card title="Edit a Message" icon="pen-to-square" href="/sdk/react-native/edit-message">
    Edit sent messages in conversations
  </Card>

  <Card title="Send Messages" icon="paper-plane" href="/sdk/react-native/send-message">
    Send text, media, and custom messages
  </Card>

  <Card title="Receive Messages" icon="inbox" href="/sdk/react-native/receive-messages">
    Listen for incoming messages in real-time
  </Card>

  <Card title="Flag a Message" icon="flag" href="/sdk/react-native/flag-message">
    Report inappropriate messages
  </Card>
</CardGroup>
