@@ -83,9 +83,7 @@ def __init__(
8383 app_info : AppInfo ,
8484 device_info : DeviceInfo ,
8585 sig_info : SigInfo ,
86- sign_provider : Optional [
87- Callable [[str , int , bytes ], Coroutine [None , None , dict ]]
88- ] = None ,
86+ sign_provider : Optional [Callable [[str , int , bytes ], Coroutine [None , None , dict ]]] = None ,
8987 use_ipv6 = True ,
9088 ):
9189 super ().__init__ (uin , app_info , device_info , sig_info , sign_provider , use_ipv6 )
@@ -125,9 +123,7 @@ async def easy_login(self) -> bool:
125123 else :
126124 raise AssertionError ("siginfo not found, you must login first" )
127125
128- async def login (
129- self , password : str = "" , qrcode_path : Optional [str ] = None
130- ) -> bool :
126+ async def login (self , password : str = "" , qrcode_path : Optional [str ] = None ) -> bool :
131127 try :
132128 if self ._sig .temp_pwd :
133129 rsp = await self .easy_login ()
@@ -145,9 +141,7 @@ async def login(
145141 return await self .register ()
146142 elif rsp .captcha_verify :
147143 log .root .warning ("captcha verification required" )
148- self .submit_login_captcha (
149- ticket = input ("ticket?->" ), rand_str = input ("rand_str?->" )
150- )
144+ self .submit_login_captcha (ticket = input ("ticket?->" ), rand_str = input ("rand_str?->" ))
151145 else :
152146 log .root .error (f"Unhandled exception raised: { rsp .name } " )
153147 else : # QrcodeLogin
@@ -169,23 +163,17 @@ async def login(
169163 return await self .register ()
170164 return False
171165
172- async def send_oidb_svc (
173- self , cmd : int , sub_cmd : int , buf : bytes , is_uid = False
174- ) -> OidbResponse :
166+ async def send_oidb_svc (self , cmd : int , sub_cmd : int , buf : bytes , is_uid = False ) -> OidbResponse :
175167 rsp = OidbResponse .decode (
176168 (
177169 await self .send_uni_packet (
178170 f"OidbSvcTrpcTcp.0x{ cmd :0>2X} _{ sub_cmd } " ,
179- OidbRequest (
180- cmd = cmd , sub_cmd = sub_cmd , data = bytes (buf ), is_uid = is_uid
181- ).encode (),
171+ OidbRequest (cmd = cmd , sub_cmd = sub_cmd , data = bytes (buf ), is_uid = is_uid ).encode (),
182172 )
183173 ).data
184174 )
185175 if rsp .ret_code :
186- log .network .error (
187- f"OidbSvc(0x{ cmd :X} _{ sub_cmd } ) return an error: ({ rsp .ret_code } ){ rsp .err_msg } "
188- )
176+ log .network .error (f"OidbSvc(0x{ cmd :X} _{ sub_cmd } ) return an error: ({ rsp .ret_code } ){ rsp .err_msg } " )
189177 return rsp
190178
191179 async def push_handler (self , sso : SSOPacket ):
@@ -219,32 +207,24 @@ async def _send_msg_raw(self, pb: dict, *, grp_id=0, uid="") -> SendMsgRsp:
219207 return SendMsgRsp .decode (packet .data )
220208
221209 async def send_grp_msg (self , msg_chain : list [Element ], grp_id : int ) -> int :
222- result = await self ._send_msg_raw (
223- {1 : build_message (msg_chain ).encode ()}, grp_id = grp_id
224- )
210+ result = await self ._send_msg_raw ({1 : build_message (msg_chain ).encode ()}, grp_id = grp_id )
225211 if result .ret_code :
226212 raise AssertionError (result .ret_code , result .err_msg )
227213 return result .seq
228214
229215 async def send_friend_msg (self , msg_chain : list [Element ], uid : str ) -> int :
230- result = await self ._send_msg_raw (
231- {1 : build_message (msg_chain ).encode ()}, uid = uid
232- )
216+ result = await self ._send_msg_raw ({1 : build_message (msg_chain ).encode ()}, uid = uid )
233217 if result .ret_code :
234218 raise AssertionError (result .ret_code , result .err_msg )
235219 return result .seq
236220
237- async def upload_grp_image (
238- self , image : BinaryIO , grp_id : int , is_emoji = False
239- ) -> Image :
221+ async def upload_grp_image (self , image : BinaryIO , grp_id : int , is_emoji = False ) -> Image :
240222 img = await self ._highway .upload_image (image , gid = grp_id )
241223 if is_emoji :
242224 img .is_emoji = True
243225 return img
244226
245- async def upload_friend_image (
246- self , image : BinaryIO , uid : str , is_emoji = False
247- ) -> Image :
227+ async def upload_friend_image (self , image : BinaryIO , uid : str , is_emoji = False ) -> Image :
248228 img = await self ._highway .upload_image (image , uid = uid )
249229 if is_emoji :
250230 img .is_emoji = True
@@ -265,9 +245,7 @@ async def down_grp_audio(self, audio: Audio, grp_id: int) -> BytesIO:
265245 async def down_friend_audio (self , audio : Audio ) -> BytesIO :
266246 return await self ._highway .download_audio (audio , uid = self .uid )
267247
268- async def fetch_image_url (
269- self , bus_type : Literal [10 , 20 ], node : "IndexNode" , gid : int = 0 , uid : str = ""
270- ):
248+ async def fetch_image_url (self , bus_type : Literal [10 , 20 ], node : "IndexNode" , gid : int = 0 , uid : str = "" ):
271249 if bus_type == 10 :
272250 return await self ._get_pri_img_url (uid , node )
273251 elif bus_type == 20 :
@@ -300,16 +278,10 @@ async def get_grp_list(self) -> GetGrpListResponse:
300278
301279 async def get_grp_member_info (self , grp_id : int , uid : str ) -> GetGrpMemberInfoRsp :
302280 return GetGrpMemberInfoRsp .decode (
303- (
304- await self .send_oidb_svc (
305- 0xFE7 , 4 , PBGetGrpMemberInfoReq .build (grp_id , uid = uid ).encode ()
306- )
307- ).data
281+ (await self .send_oidb_svc (0xFE7 , 4 , PBGetGrpMemberInfoReq .build (grp_id , uid = uid ).encode ())).data
308282 )
309283
310- async def get_grp_members (
311- self , grp_id : int , next_key : Optional [str ] = None
312- ) -> GetGrpMemberInfoRsp :
284+ async def get_grp_members (self , grp_id : int , next_key : Optional [str ] = None ) -> GetGrpMemberInfoRsp :
313285 """
314286 500 members per request,
315287 get next page: fill 'next_key' from GetGrpMemberInfoRsp.next_key
@@ -324,9 +296,7 @@ async def get_grp_members(
324296 ).data
325297 )
326298
327- async def get_grp_msg (
328- self , grp_id : int , start : int , end : int = 0 , filter_deleted_msg = True
329- ) -> list [GroupMessage ]:
299+ async def get_grp_msg (self , grp_id : int , start : int , end : int = 0 , filter_deleted_msg = True ) -> list [GroupMessage ]:
330300 if not end :
331301 end = start
332302 payload = GetGrpMsgRsp .decode (
@@ -339,16 +309,10 @@ async def get_grp_msg(
339309 ).body
340310
341311 assert (
342- payload .grp_id == grp_id
343- and payload .start_seq == start
344- and payload .end_seq == end
312+ payload .grp_id == grp_id and payload .start_seq == start and payload .end_seq == end
345313 ), "return args not matched"
346314
347- rsp = list (
348- await asyncio .gather (
349- * [parse_grp_msg (self , MsgPushBody .decode (i )) for i in payload .elems ]
350- )
351- )
315+ rsp = list (await asyncio .gather (* [parse_grp_msg (self , MsgPushBody .decode (i )) for i in payload .elems ]))
352316 if filter_deleted_msg :
353317 return [* filter (lambda msg : msg .rand != - 1 , rsp )]
354318 return rsp
@@ -419,11 +383,7 @@ async def recall_grp_msg(self, grp_id: int, seq: int):
419383 raise AssertionError (result )
420384
421385 async def rename_grp_name (self , grp_id : int , name : str ) -> int : # not test
422- return (
423- await self .send_oidb_svc (
424- 0x89A , 15 , PBGroupRenameRequest .build (grp_id , name ).encode ()
425- )
426- ).ret_code
386+ return (await self .send_oidb_svc (0x89A , 15 , PBGroupRenameRequest .build (grp_id , name ).encode ())).ret_code
427387
428388 async def rename_grp_member (self , grp_id : int , target_uid : str , name : str ): # fixme
429389 rsp = await self .send_oidb_svc (
@@ -436,11 +396,7 @@ async def rename_grp_member(self, grp_id: int, target_uid: str, name: str): # f
436396 raise AssertionError (rsp .ret_code , rsp .err_msg )
437397
438398 async def leave_grp (self , grp_id : int ) -> int : # not test
439- return (
440- await self .send_oidb_svc (
441- 0x1097 , 1 , PBLeaveGroupRequest .build (grp_id ).encode ()
442- )
443- ).ret_code
399+ return (await self .send_oidb_svc (0x1097 , 1 , PBLeaveGroupRequest .build (grp_id ).encode ())).ret_code
444400
445401 async def kick_grp_member (self , grp_id : int , uin : int , permanent = False ):
446402 rsp = await self .send_oidb_svc (
@@ -452,9 +408,7 @@ async def kick_grp_member(self, grp_id: int, uin: int, permanent=False):
452408 if rsp .ret_code :
453409 raise AssertionError (rsp .ret_code , str (rsp .err_msg ))
454410
455- async def send_grp_reaction (
456- self , grp_id : int , msg_seq : int , content : Union [str , int ], is_cancel = False
457- ) -> None :
411+ async def send_grp_reaction (self , grp_id : int , msg_seq : int , content : Union [str , int ], is_cancel = False ) -> None :
458412 if isinstance (content , str ):
459413 assert len (content ) == 1 , "content must be a emoji"
460414 rsp = await self .send_oidb_svc (
@@ -512,35 +466,25 @@ async def set_mute_grp(self, grp_id: int, enable: bool):
512466 # raise AssertionError(rsp.ret_code, rsp.err_msg)
513467
514468 async def set_mute_member (self , grp_id : int , uin : int , duration : int ):
515- rsp = await self .send_oidb_svc (
516- 0x570 , 8 , struct .pack (">IBHII" , grp_id , 0x20 , 1 , uin , duration )
517- )
469+ rsp = await self .send_oidb_svc (0x570 , 8 , struct .pack (">IBHII" , grp_id , 0x20 , 1 , uin , duration ))
518470 if rsp .ret_code :
519471 raise AssertionError (rsp .ret_code , rsp .err_msg )
520472
521473 async def fetch_grp_request (self , count = 20 ) -> FetchGroupResponse :
522474 rsp = FetchGroupResponse .decode (
523- (
524- await self .send_oidb_svc (
525- 0x10C0 , 1 , PBFetchGroupRequest (count = count ).encode ()
526- )
527- ).data
475+ (await self .send_oidb_svc (0x10C0 , 1 , PBFetchGroupRequest (count = count ).encode ())).data
528476 )
529477 return rsp
530478
531- async def set_grp_request (
532- self , grp_id : int , grp_req_seq : int , ev_type : int , action : int , reason = ""
533- ):
479+ async def set_grp_request (self , grp_id : int , grp_req_seq : int , ev_type : int , action : int , reason = "" ):
534480 """
535481 grp_req_seq: from fetch_grp_request
536482 action: 1 for accept; 2 for reject; 3 for ignore
537483 """
538484 rsp = await self .send_oidb_svc (
539485 0x10C8 ,
540486 1 ,
541- PBHandleGroupRequest .build (
542- action , grp_req_seq , ev_type , grp_id , reason
543- ).encode (),
487+ PBHandleGroupRequest .build (action , grp_req_seq , ev_type , grp_id , reason ).encode (),
544488 )
545489 if rsp .ret_code :
546490 raise AssertionError (rsp .ret_code , rsp .err_msg )
@@ -551,34 +495,22 @@ async def get_user_info(self, uid: str) -> UserInfo: ...
551495 @overload
552496 async def get_user_info (self , uid : list [str ]) -> list [UserInfo ]: ...
553497
554- async def get_user_info (
555- self , uid : Union [str , list [str ]]
556- ) -> Union [UserInfo , list [UserInfo ]]:
498+ async def get_user_info (self , uid : Union [str , list [str ]]) -> Union [UserInfo , list [UserInfo ]]:
557499 if isinstance (uid , str ):
558500 uid = [uid ]
559- rsp = GetInfoFromUidRsp .decode (
560- (
561- await self .send_oidb_svc (
562- 0xFE1 , 8 , PBGetInfoFromUidReq (uid = uid ).encode ()
563- )
564- ).data
565- )
501+ rsp = GetInfoFromUidRsp .decode ((await self .send_oidb_svc (0xFE1 , 8 , PBGetInfoFromUidReq (uid = uid ).encode ())).data )
566502 if not rsp .body :
567503 raise AssertionError ("Empty response" )
568504 elif len (rsp .body ) == 1 :
569505 return UserInfo .from_pb (rsp .body [0 ])
570506 else :
571507 return [UserInfo .from_pb (body ) for body in rsp .body ]
572508
573- async def set_grp_bot_hd (
574- self , grp_id : int , bot_id : int , data_1 : str = "" , data_2 : str = ""
575- ):
509+ async def set_grp_bot_hd (self , grp_id : int , bot_id : int , data_1 : str = "" , data_2 : str = "" ):
576510 await self .send_oidb_svc (
577511 0x112E ,
578512 1 ,
579- SendGrpBotHD (
580- grp_id = grp_id , bot_id = bot_id , B_id = data_1 , B_data = data_2
581- ).encode (),
513+ SendGrpBotHD (grp_id = grp_id , bot_id = bot_id , B_id = data_1 , B_data = data_2 ).encode (),
582514 )
583515
584516 async def set_c2c_bot_hd (self , bot_id : int , data_1 : str = "" , data_2 : str = "" ):
@@ -603,9 +535,7 @@ async def get_group_last_seq(self, grp_id: int) -> int:
603535 return rsp .body .args .seq
604536
605537 async def _get_client_key (self ) -> str :
606- return GetClientKeyRsp .decode (
607- (await self .send_oidb_svc (0x102A , 1 , proto_encode ({}))).data
608- ).client_key
538+ return GetClientKeyRsp .decode ((await self .send_oidb_svc (0x102A , 1 , proto_encode ({}))).data ).client_key
609539
610540 def _gtk_1 (self , skey_or_pskey : str ):
611541 _hash = 5381
@@ -644,3 +574,18 @@ async def get_skey(self) -> str:
644574 async def get_csrf_token (self ) -> int :
645575 skey = await self .get_skey ()
646576 return self ._gtk_1 (skey )
577+
578+ async def get_rkey (self ) -> tuple [str , str ]:
579+ """
580+ Returns:
581+ rkey:
582+ Tuple[str, str]: first is private,second is group
583+ """
584+ body = {
585+ 1 : {1 : {1 : 1 , 2 : 202 }, 2 : {101 : 2 , 102 : 1 , 200 : 0 }, 3 : {1 : 2 }},
586+ 4 : {1 : [10 , 20 , 2 ]},
587+ }
588+ rsp = await self .send_oidb_svc (0x9067 , 202 , proto_encode (body ), True )
589+ a = proto_decode (rsp .data ).proto
590+ temp = a [4 ][1 ] # type: ignore
591+ return temp [0 ][1 ].decode (), temp [1 ][1 ].decode () # type: ignore
0 commit comments