def direct_thread_by_participants(self, user_ids: List[int]) -> DirectThread: """ Get direct thread by participants Parameters ---------- user_ids: List[int] List of unique identifier of Users id Returns ------- DirectThread An object of DirectThread """ recipient_users = dumps([int(uid) for uid in user_ids]) result = self.private_request("direct_v2/threads/get_by_participants/", params={ "recipient_users": recipient_users, "seq_id": 2580572, "limit": 20 }) if 'thread' not in result: raise DirectThreadNotFound( f'Thread not found by recipient_users={recipient_users}', user_ids=user_ids, **self.last_json) return extract_direct_thread(result['thread'])
def direct_threads( self, amount: int = 20, selected_filter: SELECTED_FILTER = "", thread_message_limit: Optional[int] = None) -> List[DirectThread]: """ Get direct message threads Parameters ---------- amount: int, optional Maximum number of media to return, default is 20 Returns ------- List[DirectThread] A list of objects of DirectThread """ assert self.user_id, "Login required" params = { "visual_message_return_type": "unseen", "thread_message_limit": "10", "persistentBadging": "true", "limit": "20", } if selected_filter: assert selected_filter in SELECTED_FILTERS, \ f'Unsupported selected_filter="{selected_filter}" {SELECTED_FILTERS}' params.update({ "selected_filter": selected_filter, "fetch_reason": "manual_refresh", }) if thread_message_limit: params.update({"thread_message_limit": thread_message_limit}) cursor = None threads = [] # self.private_request("direct_v2/get_presence/") while True: if cursor: params["cursor"] = cursor result = self.private_request("direct_v2/inbox/", params=params) inbox = result.get("inbox", {}) for thread in inbox.get("threads", []): threads.append(extract_direct_thread(thread)) cursor = inbox.get("oldest_cursor") if not cursor or (amount and len(threads) >= amount): break if amount: threads = threads[:amount] return threads
def direct_thread(self, thread_id: int, amount: int = 20) -> DirectThread: """ Get all the information about a Direct Message thread Parameters ---------- thread_id: int Unique identifier of a Direct Message thread amount: int, optional Maximum number of media to return, default is 20 Returns ------- DirectThread An object of DirectThread """ assert self.user_id, "Login required" params = { "visual_message_return_type": "unseen", "direction": "older", "seq_id": "40065", # 59663 "limit": "20", } cursor = None items = [] while True: if cursor: params["cursor"] = cursor try: result = self.private_request( f"direct_v2/threads/{thread_id}/", params=params) except ClientNotFoundError as e: raise DirectThreadNotFound(e, thread_id=thread_id, **self.last_json) thread = result["thread"] for item in thread["items"]: items.append(item) cursor = thread.get("oldest_cursor") if not cursor or (amount and len(items) >= amount): break if amount: items = items[:amount] thread["items"] = items return extract_direct_thread(thread)
def direct_pending(self, amount: int = 20) -> List[DirectThread]: """ Get direct message threads Parameters ---------- amount: int, optional Maximum number of media to return, default is 20 Returns ------- List[DirectThread] A list of objects of DirectThread """ assert self.user_id, "Login required" params = { "visual_message_return_type": "unseen", "thread_message_limit": "10", "persistentBadging": "true", "limit": "20", } cursor = None threads = [] self.private_request("direct_v2/get_presence/") while True: if cursor: params["cursor"] = cursor result = self.private_request("direct_v2/pending_box/", params=params) inbox = result.get("inbox", {}) for thread in inbox.get("threads", []): threads.append(extract_direct_thread(thread)) cursor = inbox.get("oldest_cursor") if not cursor or (amount and len(threads) >= amount): break if amount: threads = threads[:amount] return threads