更新
This commit is contained in:
@@ -0,0 +1,32 @@
|
||||
"""Parse Douyin IM Response protobuf for conversation metadata."""
|
||||
from __future__ import annotations
|
||||
|
||||
|
||||
def extract_conv_meta_from_response_bytes(raw: bytes) -> dict[str, dict]:
|
||||
"""Return {conversation_id: {conversation_short_id, ticket}} from IM API protobuf body."""
|
||||
if not raw:
|
||||
return {}
|
||||
try:
|
||||
from .static import Response_pb2 as ResponseProto
|
||||
|
||||
response_proto = ResponseProto.Response()
|
||||
response_proto.ParseFromString(raw)
|
||||
body = response_proto.body
|
||||
out: dict[str, dict] = {}
|
||||
for field in (
|
||||
"create_conversation_v2_body",
|
||||
"get_conversation_info_list_v2_response_body",
|
||||
):
|
||||
if not body.HasField(field):
|
||||
continue
|
||||
conv_body = getattr(body, field)
|
||||
for conv in conv_body.conversation_info_list:
|
||||
if not conv.conversation_id:
|
||||
continue
|
||||
out[conv.conversation_id] = {
|
||||
"conversation_short_id": str(conv.conversation_short_id),
|
||||
"ticket": conv.ticket,
|
||||
}
|
||||
return out
|
||||
except Exception:
|
||||
return {}
|
||||
Reference in New Issue
Block a user