diff --git a/channel/wechat/wechat_channel.py b/channel/wechat/wechat_channel.py index d8249a1d4..c888157f3 100644 --- a/channel/wechat/wechat_channel.py +++ b/channel/wechat/wechat_channel.py @@ -113,21 +113,12 @@ def startup(self): # login by scan QRCode hotReload = conf().get("hot_reload", False) status_path = os.path.join(get_appdata_dir(), "itchat.pkl") - try: - itchat.auto_login( - enableCmdQR=2, - hotReload=hotReload, - statusStorageDir=status_path, - qrCallback=qrCallback, - ) - except Exception as e: - if hotReload: - logger.error("Hot reload failed, try to login without hot reload") - itchat.logout() - os.remove(status_path) - itchat.auto_login(enableCmdQR=2, hotReload=hotReload, qrCallback=qrCallback) - else: - raise e + itchat.auto_login( + enableCmdQR=2, + hotReload=hotReload, + statusStorageDir=status_path, + qrCallback=qrCallback, + ) self.user_id = itchat.instance.storageClass.userName self.name = itchat.instance.storageClass.nickName logger.info("Wechat login success, user_id: {}, nickname: {}".format(self.user_id, self.name)) diff --git a/lib/itchat/components/login.py b/lib/itchat/components/login.py index 60ca395f7..a2dd17c88 100644 --- a/lib/itchat/components/login.py +++ b/lib/itchat/components/login.py @@ -43,6 +43,7 @@ def login(self, enableCmdQR=False, picDir=None, qrCallback=None, logger.warning('itchat has already logged in.') return self.isLogging = True + logger.info('Ready to login.') while self.isLogging: uuid = push_login(self) if uuid: @@ -84,7 +85,7 @@ def login(self, enableCmdQR=False, picDir=None, qrCallback=None, if hasattr(loginCallback, '__call__'): r = loginCallback() else: - utils.clear_screen() + # utils.clear_screen() if os.path.exists(picDir or config.DEFAULT_QR): os.remove(picDir or config.DEFAULT_QR) logger.info('Login successfully as %s' % self.storageClass.nickName) @@ -195,13 +196,17 @@ def process_login_info(core, loginContent): core.loginInfo['logintime'] = int(time.time() * 1e3) core.loginInfo['BaseRequest'] = {} cookies = core.s.cookies.get_dict() - skey = re.findall('(.*?)', r.text, re.S)[0] - pass_ticket = re.findall( - '(.*?)', r.text, re.S)[0] - core.loginInfo['skey'] = core.loginInfo['BaseRequest']['Skey'] = skey + res = re.findall('(.*?)', r.text, re.S) + skey = res[0] if res else None + res = re.findall( + '(.*?)', r.text, re.S) + pass_ticket = res[0] if res else None + if skey is not None: + core.loginInfo['skey'] = core.loginInfo['BaseRequest']['Skey'] = skey core.loginInfo['wxsid'] = core.loginInfo['BaseRequest']['Sid'] = cookies["wxsid"] core.loginInfo['wxuin'] = core.loginInfo['BaseRequest']['Uin'] = cookies["wxuin"] - core.loginInfo['pass_ticket'] = pass_ticket + if pass_ticket is not None: + core.loginInfo['pass_ticket'] = pass_ticket # A question : why pass_ticket == DeviceID ? # deviceID is only a randomly generated number @@ -317,6 +322,8 @@ def maintain_loop(): retryCount += 1 logger.error(traceback.format_exc()) if self.receivingRetryCount < retryCount: + logger.error("Having tried %s times, but still failed. " % ( + retryCount) + "Stop trying...") self.alive = False else: time.sleep(1) @@ -363,7 +370,7 @@ def sync_check(self): regx = r'window.synccheck={retcode:"(\d+)",selector:"(\d+)"}' pm = re.search(regx, r.text) if pm is None or pm.group(1) != '0': - logger.debug('Unexpected sync check result: %s' % r.text) + logger.error('Unexpected sync check result: %s' % r.text) return None return pm.group(2) diff --git a/lib/itchat/components/register.py b/lib/itchat/components/register.py index 78a3f0b7c..b8bbc2940 100644 --- a/lib/itchat/components/register.py +++ b/lib/itchat/components/register.py @@ -25,9 +25,11 @@ def auto_login(self, hotReload=False, statusStorageDir='itchat.pkl', self.useHotReload = hotReload self.hotReloadDir = statusStorageDir if hotReload: - if self.load_login_status(statusStorageDir, + if rval:=self.load_login_status(statusStorageDir, loginCallback=loginCallback, exitCallback=exitCallback): return + logger.error('Hot reload failed, logging in normally, error={}'.format(rval)) + self.logout() self.login(enableCmdQR=enableCmdQR, picDir=picDir, qrCallback=qrCallback, loginCallback=loginCallback, exitCallback=exitCallback) self.dump_login_status(statusStorageDir) diff --git a/voice/azure/azure_voice.py b/voice/azure/azure_voice.py index 1a0a8ed3f..b5884ed4f 100644 --- a/voice/azure/azure_voice.py +++ b/voice/azure/azure_voice.py @@ -64,7 +64,8 @@ def voiceToText(self, voice_file): logger.info("[Azure] voiceToText voice file name={} text={}".format(voice_file, result.text)) reply = Reply(ReplyType.TEXT, result.text) else: - logger.error("[Azure] voiceToText error, result={}, canceldetails={}".format(result, result.cancellation_details)) + cancel_details = result.cancellation_details + logger.error("[Azure] voiceToText error, result={}, errordetails={}".format(result, cancel_details.error_details)) reply = Reply(ReplyType.ERROR, "抱歉,语音识别失败") return reply @@ -88,6 +89,7 @@ def textToVoice(self, text): logger.info("[Azure] textToVoice text={} voice file name={}".format(text, fileName)) reply = Reply(ReplyType.VOICE, fileName) else: - logger.error("[Azure] textToVoice error, result={}, canceldetails={}".format(result, result.cancellation_details)) + cancel_details = result.cancellation_details + logger.error("[Azure] textToVoice error, result={}, errordetails={}".format(result, cancel_details.error_details)) reply = Reply(ReplyType.ERROR, "抱歉,语音合成失败") return reply