From 9ea1ce2f0ee9c86be7424bf3d6bc8627aa6e5c15 Mon Sep 17 00:00:00 2001 From: H Vs Date: Wed, 5 Mar 2025 10:01:38 +0800 Subject: [PATCH] =?UTF-8?q?=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- resources/login_resources.py | 122 ++++++++++++++++++----------------- 1 file changed, 63 insertions(+), 59 deletions(-) diff --git a/resources/login_resources.py b/resources/login_resources.py index b5d8190..27aede3 100644 --- a/resources/login_resources.py +++ b/resources/login_resources.py @@ -82,7 +82,7 @@ class GetLoginWxQRCodeResource(Resource): gewe_chat.wxchat.qrCallback(uuid,base64_string) hash_key = f"__AI_OPS_WX__:LOGININFO:{tel}" - thread = threading.Thread(target=self.waitting_login_result, args=(gewe_chat.wxchat,token_id, app_id,region_id, agent_token_id,hash_key, uuid,now)) + thread = threading.Thread(target=waitting_login_result, args=(gewe_chat.wxchat,token_id, app_id,region_id, agent_token_id,hash_key, uuid,now)) thread.daemon = True thread.start() @@ -94,62 +94,66 @@ class GetLoginWxQRCodeResource(Resource): } return jsonify(data) - def waitting_login_result(self,wxchat:gewe_chat.GeWeChatCom, token_id, app_id,region_id, agent_token_id,hash_key, uuid,start_time): - try: - while True: - now = time.time() - if now - start_time > 150: - logger.info(f'{token_id} 使用 {app_id} 扫二维码登录超时') - break - - logger.info(f"{token_id} 使用 {app_id},等待扫码登录,二维码有效时间 {150 - int(now - start_time)} 秒") - captch_code = wxchat.get_login_wx_captch_code_from_cache(token_id) - captch_code= captch_code if captch_code else '' - logger.info(f"{token_id} 使用 {app_id} 的验证码 {captch_code}") - ret,msg,res = wxchat.check_login(token_id, app_id, uuid,captch_code) - - if ret == 200: - flag = res.get('status') - if flag == 2: - logger.info(f"登录成功: {res}") - head_img_url=res.get('headImgUrl','') - login_info = res.get('loginInfo', {}) - - wxid=login_info.get('wxid',agent_tel) - - login_info.update({'appId': app_id, 'uuid': uuid, 'tokenId': token_id,'status': 1,'headImgUrl':head_img_url,'regionId':region_id}) - cache_login_info=redis_helper.redis_helper.get_hash(hash_key) - - if 'appId' not in cache_login_info: - login_info.update({"create_at":int(time.time()),"modify_at":int(time.time())}) - # 默认配置 - config=Models.AgentConfig.model_validate({ - "chatroomIdWhiteList": [], - "agentTokenId": agent_token_id, - "agentEnabled": False, - "addContactsFromChatroomIdWhiteList": [], - "chatWaitingMsgEnabled": True - }) - else: - login_info.update({"modify_at":int(time.time())}) - # 已有配置 - config_cache=wxchat.get_wxchat_config_from_cache(wxid) - config=Models.AgentConfig.model_validate(config_cache) - - cleaned_login_info = {k: (v if v is not None else '') for k, v in login_info.items()} - #wxid=cleaned_login_info.get('wxid',agent_tel) - # 保存配置信息 - config_dict=config.model_dump() - wxchat.save_wxchat_config(wxid,config_dict) - - # 保存登录信息 - redis_helper.redis_helper.set_hash(hash_key, cleaned_login_info) - wxchat.release_login_lock(token_id) - break - else: - logger.info(f"登录检查中: {ret}-{msg}-{res}") - - time.sleep(5) - finally: - wxchat.release_login_lock(token_id) + + + +def waitting_login_result(wxchat:gewe_chat.GeWeChatCom, token_id, app_id,region_id, agent_token_id,hash_key, uuid,start_time): + agent_tel=hash_key.split(":")[-1] + try: + while True: + now = time.time() + if now - start_time > 150: + logger.info(f'{token_id} 使用 {app_id} 扫二维码登录超时') + break + + logger.info(f"{token_id} 使用 {app_id},等待扫码登录,二维码有效时间 {150 - int(now - start_time)} 秒") + captch_code = wxchat.get_login_wx_captch_code_from_cache(token_id) + captch_code= captch_code if captch_code else '' + logger.info(f"{token_id} 使用 {app_id} 的验证码 {captch_code}") + ret,msg,res = wxchat.check_login(token_id, app_id, uuid,captch_code) + + if ret == 200: + flag = res.get('status') + if flag == 2: + logger.info(f"登录成功: {res}") + head_img_url=res.get('headImgUrl','') + login_info = res.get('loginInfo', {}) + + wxid=login_info.get('wxid',agent_tel) + + login_info.update({'appId': app_id, 'uuid': uuid, 'tokenId': token_id,'status': 1,'headImgUrl':head_img_url,'regionId':region_id}) + cache_login_info=redis_helper.redis_helper.get_hash(hash_key) + + if 'appId' not in cache_login_info: + login_info.update({"create_at":int(time.time()),"modify_at":int(time.time())}) + # 默认配置 + config=Models.AgentConfig.model_validate({ + "chatroomIdWhiteList": [], + "agentTokenId": agent_token_id, + "agentEnabled": False, + "addContactsFromChatroomIdWhiteList": [], + "chatWaitingMsgEnabled": True + }) + else: + login_info.update({"modify_at":int(time.time())}) + # 已有配置 + config_cache=wxchat.get_wxchat_config_from_cache(wxid) + config=Models.AgentConfig.model_validate(config_cache) + + cleaned_login_info = {k: (v if v is not None else '') for k, v in login_info.items()} + #wxid=cleaned_login_info.get('wxid',agent_tel) + # 保存配置信息 + config_dict=config.model_dump() + wxchat.save_wxchat_config(wxid,config_dict) + + # 保存登录信息 + redis_helper.redis_helper.set_hash(hash_key, cleaned_login_info) + wxchat.release_login_lock(token_id) + break + else: + logger.info(f"登录检查中: {ret}-{msg}-{res}") + + time.sleep(5) + finally: + wxchat.release_login_lock(token_id)