Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 16 additions & 0 deletions stream_chat/async_chat/client.py
Original file line number Diff line number Diff line change
Expand Up @@ -223,6 +223,22 @@ async def query_banned_users(self, query_conditions: Dict) -> StreamResponse:
"query_banned_users", params={"payload": json.dumps(query_conditions)}
)

async def block_user(
self, blocked_user_id: str, user_id: str, **options: Any
) -> StreamResponse:
data = {"blocked_user_id": blocked_user_id, "user_id": user_id, **options}
return await self.post("users/block", data=data)

async def unblock_user(
self, blocked_user_id: str, user_id: str, **options: Any
) -> StreamResponse:
data = {"blocked_user_id": blocked_user_id, "user_id": user_id, **options}
return await self.post("users/unblock", data=data)

async def get_blocked_users(self, user_id: str, **options: Any) -> StreamResponse:
params = {"user_id": user_id, **options}
return await self.get("users/block", params=params)

async def run_message_action(self, message_id: str, data: Dict) -> StreamResponse:
return await self.post(f"messages/{message_id}/action", data=data)

Expand Down
31 changes: 31 additions & 0 deletions stream_chat/base/client.py
Original file line number Diff line number Diff line change
Expand Up @@ -355,6 +355,37 @@ def query_banned_users(
"""
pass

@abc.abstractmethod
def block_user(
self, blocked_user_id: str, user_id: str, **options: Any
) -> Union[StreamResponse, Awaitable[StreamResponse]]:
"""
Blocks a user. When a user is blocked, they will not be able to communicate with the
blocking user in 1-on-1 channels, and will not be able to add the blocking user to channels.
To unblock a user, use `unblock_user` method.
"""
pass

@abc.abstractmethod
def unblock_user(
self, blocked_user_id: str, user_id: str, **options: Any
) -> Union[StreamResponse, Awaitable[StreamResponse]]:
"""
Unblocks a user. This allows the previously blocked user to communicate with the
unblocking user in 1-on-1 channels again, and all previous messages become visible.
To block a user, use `block_user` method.
"""
pass

@abc.abstractmethod
def get_blocked_users(
self, user_id: str, **options: Any
) -> Union[StreamResponse, Awaitable[StreamResponse]]:
"""
Retrieves the list of users that have been blocked by the specified user.
"""
pass

@abc.abstractmethod
def run_message_action(
self, message_id: str, data: Dict
Expand Down
16 changes: 16 additions & 0 deletions stream_chat/client.py
Original file line number Diff line number Diff line change
Expand Up @@ -209,6 +209,22 @@ def query_banned_users(self, query_conditions: Dict) -> StreamResponse:
"query_banned_users", params={"payload": json.dumps(query_conditions)}
)

def block_user(
self, blocked_user_id: str, user_id: str, **options: Any
) -> StreamResponse:
data = {"blocked_user_id": blocked_user_id, "user_id": user_id, **options}
return self.post("users/block", data=data)

def unblock_user(
self, blocked_user_id: str, user_id: str, **options: Any
) -> StreamResponse:
data = {"blocked_user_id": blocked_user_id, "user_id": user_id, **options}
return self.post("users/unblock", data=data)

def get_blocked_users(self, user_id: str, **options: Any) -> StreamResponse:
params = {"user_id": user_id, **options}
return self.get("users/block", params=params)

def run_message_action(self, message_id: str, data: Dict) -> StreamResponse:
return self.post(f"messages/{message_id}/action", data=data)

Expand Down
23 changes: 23 additions & 0 deletions stream_chat/tests/async_chat/test_client.py
Original file line number Diff line number Diff line change
Expand Up @@ -304,6 +304,29 @@ async def test_query_banned_user(
)
assert len(resp["bans"]) == 1

async def test_block_user(
self, client: StreamChatAsync, random_user, server_user: Dict
):
await client.block_user(random_user["id"], server_user["id"])
response = await client.get_blocked_users(server_user["id"])
assert len(response["blocks"]) > 0

async def test_unblock_user(
self, client: StreamChatAsync, random_user, server_user: Dict
):
await client.block_user(random_user["id"], server_user["id"])
await client.unblock_user(random_user["id"], server_user["id"])

response = await client.get_blocked_users(server_user["id"])
assert len(response["blocks"]) == 0

async def test_get_blocked_users(
self, client: StreamChatAsync, random_user, server_user: Dict
):
await client.block_user(random_user["id"], server_user["id"])
response = await client.get_blocked_users(server_user["id"])
assert len(response["blocks"]) > 0

async def test_flag_user(
self, client: StreamChatAsync, random_user, server_user: Dict
):
Expand Down
19 changes: 19 additions & 0 deletions stream_chat/tests/test_client.py
Original file line number Diff line number Diff line change
Expand Up @@ -319,6 +319,25 @@ def test_query_banned_user(
)
assert len(resp["bans"]) == 1

def test_block_user(self, client: StreamChat, random_user, server_user: Dict):
client.block_user(random_user["id"], server_user["id"])
response = client.get_blocked_users(server_user["id"])
assert len(response["blocks"]) > 0

def test_unblock_user(self, client: StreamChat, random_user, server_user: Dict):
client.block_user(random_user["id"], server_user["id"])
client.unblock_user(random_user["id"], server_user["id"])

response = client.get_blocked_users(server_user["id"])
assert len(response["blocks"]) == 0

def test_get_blocked_users(
self, client: StreamChat, random_user, server_user: Dict
):
client.block_user(random_user["id"], server_user["id"])
response = client.get_blocked_users(server_user["id"])
assert len(response["blocks"]) > 0

def test_flag_user(self, client: StreamChat, random_user, server_user: Dict):
client.flag_user(random_user["id"], user_id=server_user["id"])

Expand Down
Loading