11import zlib
2- from typing import List , Tuple , Sequence , TYPE_CHECKING , cast , Literal
2+ from typing import List , Tuple , Sequence , TYPE_CHECKING , cast , Literal , Union
33
44from lagrange .client .events .group import GroupMessage
55from lagrange .client .events .friend import FriendMessage
@@ -37,7 +37,8 @@ def parse_friend_info(pkg: MsgPushBody) -> Tuple[int, str, int, str]:
3737 return from_uin , from_uid , to_uin , to_uid
3838
3939
40- async def parse_msg_new (client : "Client" , pkg : MsgPushBody ) -> Sequence [Element ]:
40+ async def parse_msg_new (client : "Client" , pkg : MsgPushBody ,
41+ fri_id : Union [str , None ] = None , grp_id : Union [int , None ] = None ) -> Sequence [Element ]:
4142 if not pkg .message or not pkg .message .body :
4243 if pkg .content_head .sub_type == 4 :
4344 data = FileExtra .decode (pkg .message .buf2 )
@@ -53,6 +54,7 @@ async def parse_msg_new(client: "Client", pkg: MsgPushBody) -> Sequence[Element]
5354 rich : RichText = pkg .message .body
5455 if rich .ptt :
5556 ptt = rich .ptt
57+ file_key = ptt .group_file_key if ptt .group_file_key else ptt .friend_file_key
5658 return [
5759 elems .Audio (
5860 name = ptt .name ,
@@ -61,8 +63,9 @@ async def parse_msg_new(client: "Client", pkg: MsgPushBody) -> Sequence[Element]
6163 md5 = ptt .md5 ,
6264 text = f"[audio:{ ptt .name } ]" ,
6365 time = ptt .time ,
64- file_key = ptt .group_file_key if not ptt .to_uin else ptt .friend_file_key ,
66+ file_key = ptt .group_file_key if ptt .group_file_key else ptt .friend_file_key ,
6567 qmsg = None ,
68+ url = await client .fetch_audio_url (file_key , uid = fri_id , gid = grp_id )
6669 )
6770 ]
6871 el : List [Elems ] = rich .content
@@ -280,6 +283,7 @@ async def parse_msg_new(client: "Client", pkg: MsgPushBody) -> Sequence[Element]
280283 width = video .width ,
281284 height = video .height ,
282285 qmsg = None ,
286+ url = "" # TODO: fetch video url
283287 )
284288 )
285289 else :
@@ -294,7 +298,7 @@ async def parse_friend_msg(client: "Client", pkg: MsgPushBody) -> FriendMessage:
294298 seq = pkg .content_head .seq
295299 msg_id = pkg .content_head .msg_id
296300 timestamp = pkg .content_head .timestamp
297- parsed_msg = await parse_msg_new (client , pkg )
301+ parsed_msg = await parse_msg_new (client , pkg , fri_id = from_uid , grp_id = None )
298302 msg_text = "" .join ([getattr (msg , "text" , "" ) for msg in parsed_msg ])
299303
300304 return FriendMessage (
@@ -322,7 +326,7 @@ async def parse_grp_msg(client: "Client", pkg: MsgPushBody) -> GroupMessage:
322326 if isinstance (grp_name , bytes ): # unexpected end of data
323327 grp_name = grp_name .decode ("utf-8" , errors = "ignore" )
324328
325- parsed_msg = await parse_msg_new (client , pkg )
329+ parsed_msg = await parse_msg_new (client , pkg , fri_id = None , grp_id = grp_id )
326330 msg_text = "" .join ([getattr (msg , "text" , "" ) for msg in parsed_msg ])
327331
328332 return GroupMessage (
0 commit comments