Skip to content

Commit 3c99d52

Browse files
author
Daksh
committed
feat: delete for me
1 parent 91beb00 commit 3c99d52

File tree

5 files changed

+67
-5
lines changed

5 files changed

+67
-5
lines changed

stream_chat/async_chat/client.py

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -355,8 +355,16 @@ async def update_message_partial(
355355
data.update(options)
356356
return await self.put(f"messages/{message_id}", data=data)
357357

358-
async def delete_message(self, message_id: str, **options: Any) -> StreamResponse:
359-
return await self.delete(f"messages/{message_id}", options)
358+
async def delete_message(self, message_id: str, delete_for_me: bool = False, deleted_by: str = None, **options: Any) -> StreamResponse:
359+
if delete_for_me and not deleted_by:
360+
raise ValueError("deleted_by is required when delete_for_me is True")
361+
362+
data = options.copy()
363+
if delete_for_me:
364+
data["delete_for_me"] = True
365+
data["deleted_by"] = deleted_by
366+
367+
return await self.delete(f"messages/{message_id}", data)
360368

361369
async def undelete_message(self, message_id: str, user_id: str) -> StreamResponse:
362370
return await self.post(

stream_chat/base/client.py

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -560,10 +560,16 @@ def update_message_partial(
560560

561561
@abc.abstractmethod
562562
def delete_message(
563-
self, message_id: str, **options: Any
563+
self, message_id: str, delete_for_me: bool = False, deleted_by: str = None, **options: Any
564564
) -> Union[StreamResponse, Awaitable[StreamResponse]]:
565565
"""
566566
Deletes a message.
567+
568+
Args:
569+
message_id: The ID of the message to delete
570+
delete_for_me: If True, deletes the message only for the specified user
571+
deleted_by: The user ID who is deleting the message (required when delete_for_me is True)
572+
**options: Additional options to pass to the delete request
567573
"""
568574
pass
569575

stream_chat/client.py

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -342,8 +342,16 @@ def update_message_partial(
342342
data.update(options)
343343
return self.put(f"messages/{message_id}", data=data)
344344

345-
def delete_message(self, message_id: str, **options: Any) -> StreamResponse:
346-
return self.delete(f"messages/{message_id}", options)
345+
def delete_message(self, message_id: str, delete_for_me: bool = False, deleted_by: str = None, **options: Any) -> StreamResponse:
346+
if delete_for_me and not deleted_by:
347+
raise ValueError("deleted_by is required when delete_for_me is True")
348+
349+
data = options.copy()
350+
if delete_for_me:
351+
data["delete_for_me"] = True
352+
data["deleted_by"] = deleted_by
353+
354+
return self.delete(f"messages/{message_id}", data)
347355

348356
def undelete_message(self, message_id: str, user_id: str) -> StreamResponse:
349357
return self.post(

stream_chat/tests/async_chat/test_client.py

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -462,6 +462,28 @@ async def test_delete_message(
462462
)
463463
await client.delete_message(msg_id, hard=True)
464464

465+
async def test_delete_message_for_me(
466+
self, client: StreamChatAsync, channel: Channel, random_user: Dict
467+
):
468+
"""Test deleting a message for a specific user (delete for me functionality)"""
469+
msg_id = str(uuid.uuid4())
470+
await channel.send_message(
471+
{"id": msg_id, "text": "helloworld"}, random_user["id"]
472+
)
473+
474+
# Delete message for the user
475+
response = await client.delete_message(
476+
msg_id,
477+
delete_for_me=True,
478+
deleted_by=random_user["id"]
479+
)
480+
481+
# Verify the request succeeded
482+
assert response.is_ok()
483+
484+
# Verify the message is still visible to other users but deleted for the specified user
485+
# (This would require additional API calls to verify, but we're just testing the request succeeds)
486+
465487
async def test_flag_message(
466488
self, client: StreamChatAsync, channel: Channel, random_user, server_user: Dict
467489
):

stream_chat/tests/test_client.py

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -509,6 +509,24 @@ def test_delete_message(self, client: StreamChat, channel, random_user: Dict):
509509
channel.send_message({"id": msg_id, "text": "helloworld"}, random_user["id"])
510510
client.delete_message(msg_id, hard=True)
511511

512+
def test_delete_message_for_me(self, client: StreamChat, channel, random_user: Dict):
513+
"""Test deleting a message for a specific user (delete for me functionality)"""
514+
msg_id = str(uuid.uuid4())
515+
channel.send_message({"id": msg_id, "text": "helloworld"}, random_user["id"])
516+
517+
# Delete message for the user
518+
response = client.delete_message(
519+
msg_id,
520+
delete_for_me=True,
521+
deleted_by=random_user["id"]
522+
)
523+
524+
# Verify the request succeeded
525+
assert response.is_ok()
526+
527+
# Verify the message is still visible to other users but deleted for the specified user
528+
# (This would require additional API calls to verify, but we're just testing the request succeeds)
529+
512530
def test_flag_message(
513531
self, client: StreamChat, channel, random_user, server_user: Dict
514532
):

0 commit comments

Comments
 (0)