weweChat
weweChat copied to clipboard
synccheck 返回 7 时会一直在 synccheck 死循环,再也收不到新消息的问题
遇到过几次, 要怎么修复呢? https://github.com/moontide/WeChatBotEngine/commit/4993c3becc424d8c1bd4e039a025767c6ec1e87e
var loop = async() => {
// Start detect timeout
self.checkTimeout();
//console.log("session loop after checkTimeout; before synccheck")
var response = await axios.get(`${host}cgi-bin/mmwebwx-bin/synccheck`, {
cancelToken: new CancelToken(exe => {
// An executor function receives a cancel function as a parameter
this.cancelCheck = exe;
}),
params: {
r: +new Date(),
sid: auth.wxsid,
uin: auth.wxuin,
skey: auth.skey,
synckey: self.syncKey,
}
}).catch(ex => {
if (axios.isCancel(ex)) {
//console.log("session loop after catch axios.isCancel; after synccheck",ex);
loop();
} else {
self.logout('退出 cgi-bin/mmwebwx-bin/synccheck ',ex);
}
});
if (!response) {
//console.log("session loop response=null; after synccheck");
// Request has been canceled
return;
}
eval(response.data);
if (+window.synccheck.retcode === 0) {
// 2, Has new message
// 6, New friend
// 4, Conversation refresh ?
// 7, Exit or enter
let selector = +window.synccheck.selector;
if( selector === 7){
console.error("进入/离开聊天页面?修复了死循环检测,如还有问题请联系信息管理员反馈 synccheck selector=",synccheck)
return loop();
}
if (selector !== 0) {
console.log("synccheck selector=",synccheck);
await self.getNewMessage();
}
// Do next sync keep your wechat alive
return loop();
} else {
console.error("可能是因为您的电脑太卡了,登陆超时正常退出window.synccheck.retcode!=0");
self.logout('window.synccheck.retcode!=0',null,true);
}
};
不知道我这样改可以吗? 因为找不到重现的方法, 会不会这样改一样会死循环调用synccheck 又马上返回7?
let selector = +window.synccheck.selector;
if( selector === 7){
console.error("!!!###尝试修复了死循环检测,请务必联系信息管理员反馈:进入/离开聊天页面 synccheck selector=",synccheck)
setTimeout(()=> {
return loop();
}, 3*1000);
return;
}
if (selector !== 0) {
console.log("synccheck selector=",synccheck);
await self.getNewMessage();
}