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/channel.py
Original file line number Diff line number Diff line change
Expand Up @@ -272,3 +272,19 @@ async def get_draft(
if parent_id:
params["parent_id"] = parent_id
return await self.client.get(f"{self.url}/draft", params=params)

async def add_filter_tags(
self,
tags: Iterable[str],
message: Dict = None,
) -> StreamResponse:
payload = {"add_filter_tags": tags, "message": message}
return await self.client.post(self.url, data=payload)

async def remove_filter_tags(
self,
tags: Iterable[str],
message: Dict = None,
) -> StreamResponse:
payload = {"remove_filter_tags": tags, "message": message}
return await self.client.post(self.url, data=payload)
26 changes: 26 additions & 0 deletions stream_chat/base/channel.py
Original file line number Diff line number Diff line change
Expand Up @@ -527,6 +527,32 @@ def get_draft(
"""
pass

@abc.abstractmethod
def add_filter_tags(
self, tags: Iterable[str], message: Dict = None
) -> Union[StreamResponse, Awaitable[StreamResponse]]:
"""
Adds filter tags to the channel

:param tags: list of tags to add
:param message: optional system message
:return: The server response
"""
pass

@abc.abstractmethod
def remove_filter_tags(
self, tags: Iterable[str], message: Dict = None
) -> Union[StreamResponse, Awaitable[StreamResponse]]:
"""
Removes filter tags from the channel

:param tags: list of tags to remove
:param message: optional system message
:return: The server response
"""
pass


def add_user_id(payload: Dict, user_id: str) -> Dict:
return {**payload, "user": {"id": user_id}}
16 changes: 16 additions & 0 deletions stream_chat/channel.py
Original file line number Diff line number Diff line change
Expand Up @@ -276,3 +276,19 @@ def get_draft(
params["parent_id"] = parent_id

return self.client.get(f"{self.url}/draft", params=params)

def add_filter_tags(
self,
tags: Iterable[str],
message: Dict = None,
) -> StreamResponse:
payload = {"add_filter_tags": tags, "message": message}
return self.client.post(self.url, data=payload)

def remove_filter_tags(
self,
tags: Iterable[str],
message: Dict = None,
) -> StreamResponse:
payload = {"remove_filter_tags": tags, "message": message}
return self.client.post(self.url, data=payload)
19 changes: 19 additions & 0 deletions stream_chat/tests/test_filter_tags.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
import pytest

from stream_chat.channel import Channel


@pytest.mark.incremental
class TestFilterTags:
def test_add_and_remove_filter_tags(self, channel: Channel):
# Add tags
add_resp = channel.add_filter_tags(["vip", "premium"])
assert "channel" in add_resp
assert set(add_resp["channel"].get("filter_tags", [])) >= {"vip", "premium"}

# Remove one tag
remove_resp = channel.remove_filter_tags(["premium"])
assert "channel" in remove_resp
remaining = remove_resp["channel"].get("filter_tags", [])
assert "premium" not in remaining
assert "vip" in remaining