2121from stream_chat .async_chat .segment import Segment
2222from stream_chat .types .base import SortParam
2323from stream_chat .types .campaign import CampaignData , QueryCampaignsOptions
24+ from stream_chat .types .draft import QueryDraftsFilter , QueryDraftsOptions
2425from stream_chat .types .segment import (
2526 QuerySegmentsOptions ,
2627 QuerySegmentTargetsOptions ,
@@ -190,6 +191,13 @@ async def restore_users(self, user_ids: Iterable[str]) -> StreamResponse:
190191 async def deactivate_user (self , user_id : str , ** options : Any ) -> StreamResponse :
191192 return await self .post (f"users/{ user_id } /deactivate" , data = options )
192193
194+ async def deactivate_users (
195+ self , user_ids : Iterable [str ], ** options : Any
196+ ) -> StreamResponse :
197+ return await self .post (
198+ "users/deactivate" , data = dict (options , user_ids = user_ids )
199+ )
200+
193201 async def reactivate_user (self , user_id : str , ** options : Any ) -> StreamResponse :
194202 return await self .post (f"users/{ user_id } /reactivate" , data = options )
195203
@@ -215,6 +223,22 @@ async def query_banned_users(self, query_conditions: Dict) -> StreamResponse:
215223 "query_banned_users" , params = {"payload" : json .dumps (query_conditions )}
216224 )
217225
226+ async def block_user (
227+ self , blocked_user_id : str , user_id : str , ** options : Any
228+ ) -> StreamResponse :
229+ data = {"blocked_user_id" : blocked_user_id , "user_id" : user_id , ** options }
230+ return await self .post ("users/block" , data = data )
231+
232+ async def unblock_user (
233+ self , blocked_user_id : str , user_id : str , ** options : Any
234+ ) -> StreamResponse :
235+ data = {"blocked_user_id" : blocked_user_id , "user_id" : user_id , ** options }
236+ return await self .post ("users/unblock" , data = data )
237+
238+ async def get_blocked_users (self , user_id : str , ** options : Any ) -> StreamResponse :
239+ params = {"user_id" : user_id , ** options }
240+ return await self .get ("users/block" , params = params )
241+
218242 async def run_message_action (self , message_id : str , data : Dict ) -> StreamResponse :
219243 return await self .post (f"messages/{ message_id } /action" , data = data )
220244
@@ -353,6 +377,13 @@ async def query_message_history(
353377 )
354378 return await self .post ("messages/history" , data = params )
355379
380+ async def query_threads (
381+ self , filter : Dict = None , sort : List [Dict ] = None , ** options : Any
382+ ) -> StreamResponse :
383+ params = options .copy ()
384+ params .update ({"filter" : filter , "sort" : self .normalize_sort (sort )})
385+ return await self .post ("threads" , data = params )
386+
356387 async def query_users (
357388 self , filter_conditions : Dict , sort : List [Dict ] = None , ** options : Any
358389 ) -> StreamResponse :
@@ -818,6 +849,28 @@ async def unread_counts(self, user_id: str) -> StreamResponse:
818849 async def unread_counts_batch (self , user_ids : List [str ]) -> StreamResponse :
819850 return await self .post ("unread_batch" , data = {"user_ids" : user_ids })
820851
852+ async def query_drafts (
853+ self ,
854+ user_id : str ,
855+ filter : Optional [QueryDraftsFilter ] = None ,
856+ sort : Optional [List [SortParam ]] = None ,
857+ options : Optional [QueryDraftsOptions ] = None ,
858+ ) -> StreamResponse :
859+ data : Dict [str , Union [str , Dict [str , Any ], List [SortParam ]]] = {
860+ "user_id" : user_id
861+ }
862+
863+ if filter is not None :
864+ data ["filter" ] = cast (dict , filter )
865+
866+ if sort is not None :
867+ data ["sort" ] = cast (dict , sort )
868+
869+ if options is not None :
870+ data .update (cast (dict , options ))
871+
872+ return await self .post ("drafts/query" , data = data )
873+
821874 async def create_reminder (
822875 self ,
823876 message_id : str ,
0 commit comments