> ## 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 chat messages and handle delete events with the CometChat JavaScript SDK.

While [deleting a message](/sdk/javascript/delete-message#delete-a-message) is straightforward, receiving events for deleted messages with CometChat 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: string = "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 editing 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/javascript/edit-message">
    Edit sent messages in conversations
  </Card>

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

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

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