|
@@ -138,11 +138,38 @@ class ThreadAPI(BaseAndroidAPI):
|
|
|
f"/api/v1/direct_v2/threads/{thread_id}/", query=query, response_type=DMThreadResponse
|
|
|
)
|
|
|
|
|
|
+ # /threads/.../get_items/ with urlencoded form body:
|
|
|
+ # visual_message_return_type: unseen
|
|
|
+ # _uuid: device uuid
|
|
|
+ # original_message_client_contexts:["client context"]
|
|
|
+ # item_ids: [item id]
|
|
|
+
|
|
|
+ async def get_thread_participant_requests(self, thread_id: str, page_size: int = 10):
|
|
|
+ return await self.std_http_get(
|
|
|
+ f"/api/v1/direct_v2/threads/{thread_id}/participant_requests/",
|
|
|
+ query={"page_size": str(page_size)},
|
|
|
+ )
|
|
|
+
|
|
|
+ async def mark_seen(
|
|
|
+ self, thread_id: str, item_id: str, client_context: str | None = None
|
|
|
+ ) -> None:
|
|
|
+ if not client_context:
|
|
|
+ client_context = self.state.gen_client_context()
|
|
|
+ data = {
|
|
|
+ "thread_id": thread_id,
|
|
|
+ "action": "mark_seen",
|
|
|
+ "client_context": client_context,
|
|
|
+ "_uuid": self.state.device.uuid,
|
|
|
+ "offline_threading_id": client_context,
|
|
|
+ }
|
|
|
+ await self.std_http_post(
|
|
|
+ f"/api/v1/direct_v2/threads/{thread_id}/items/{item_id}/seen/", data=data
|
|
|
+ )
|
|
|
+
|
|
|
async def create_group_thread(self, recipient_users: list[int | str]) -> Thread:
|
|
|
return await self.std_http_post(
|
|
|
"/api/v1/direct_v2/create_group_thread/",
|
|
|
data={
|
|
|
- "_csrftoken": self.state.cookies.csrf_token,
|
|
|
"_uuid": self.state.device.uuid,
|
|
|
"_uid": self.state.session.ds_user_id,
|
|
|
"recipient_users": json.dumps(
|
|
@@ -173,10 +200,17 @@ class ThreadAPI(BaseAndroidAPI):
|
|
|
},
|
|
|
)
|
|
|
|
|
|
- async def delete_item(self, thread_id: str, item_id: str) -> None:
|
|
|
+ async def delete_item(
|
|
|
+ self, thread_id: str, item_id: str, orig_client_context: str | None = None
|
|
|
+ ) -> None:
|
|
|
await self.std_http_post(
|
|
|
f"/api/v1/direct_v2/threads/{thread_id}/items/{item_id}/delete/",
|
|
|
- data={"_csrftoken": self.state.cookies.csrf_token, "_uuid": self.state.device.uuid},
|
|
|
+ data={
|
|
|
+ "is_shh_mode": "0",
|
|
|
+ "send_attribution": "direct_thread",
|
|
|
+ "_uuid": self.state.device.uuid,
|
|
|
+ "original_message_client_context": orig_client_context,
|
|
|
+ },
|
|
|
)
|
|
|
|
|
|
async def _broadcast(
|
|
@@ -195,12 +229,12 @@ class ThreadAPI(BaseAndroidAPI):
|
|
|
"thread_ids": f"[{thread_id}]",
|
|
|
"is_shh_mode": "0",
|
|
|
"client_context": client_context,
|
|
|
- "_csrftoken": self.state.cookies.csrf_token,
|
|
|
"device_id": self.state.device.id,
|
|
|
"mutation_token": client_context,
|
|
|
"_uuid": self.state.device.uuid,
|
|
|
**kwargs,
|
|
|
"offline_threading_id": client_context,
|
|
|
+ "is_x_transport_forward": "false",
|
|
|
}
|
|
|
return await self.std_http_post(
|
|
|
f"/api/v1/direct_v2/threads/broadcast/{item_type}/",
|