> ## Documentation Index
> Fetch the complete documentation index at: https://cometchat-013b37f0.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Delete A Message

While [deleting a Message](/sdk/ios/3.0/delete-a-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/ios/3.0/delete-a-message#real-time-message-delete-events) when your app is running.
2. Calling a method to retrieve [missed message deletes](/sdk/ios/3.0/delete-a-message#missed-message-delete-events) 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="Swift">
    ```swift theme={null}
    CometChat.delete(messageId: 12345, onSuccess: { (baseMessage) in
                    
       print("message deleted successfully. \(baseMessage)")
                    
    }) { (error) in
                    
       print("delete message failed with error: \(error.errorDescription)")
    }
    ```
  </Tab>
</Tabs>

Once the message is deleted, In the `onSuccess()` callback, you get an object of the `BaseMessage` class, with the `deletedAt` fieldset 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 the message being edited, you must add protocol conformance `CometChatMessageDelegate` as Shown Below :

<Tabs>
  <Tab title="Swift">
    ```swift theme={null}
    extension ViewController: CometChatMessageDelegate {

    		func onMessageDeleted(message: BaseMessage) {
            
            print("received deleted message successfully.")
        }
    }
    ```
  </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, 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 and `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 edit or 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>
