Browse Source

修复issue #54

liuwons 9 years ago
parent
commit
8a1b306663
1 changed files with 50 additions and 33 deletions
  1. 50 33
      wxbot.py

+ 50 - 33
wxbot.py

@@ -609,25 +609,42 @@ class WXBot:
         self.test_sync_check()
         while True:
             check_time = time.time()
-            [retcode, selector] = self.sync_check()
-            if retcode == '1100':  # 从微信客户端上登出
-                break
-            elif retcode == '1101':  # 从其它设备上登了网页微信
-                break
-            elif retcode == '0':
-                if selector == '2':  # 有新消息
-                    r = self.sync()
-                    if r is not None:
-                        self.handle_msg(r)
-                elif selector == '7':  # 在手机上操作了微信
-                    r = self.sync()
-                    if r is not None:
-                        self.handle_msg(r)
-                elif selector == '0':  # 无事件
-                    pass
+            try:
+                [retcode, selector] = self.sync_check()
+                # print '[DEBUG] sync_check:', retcode, selector
+                if retcode == '1100':  # 从微信客户端上登出
+                    break
+                elif retcode == '1101':  # 从其它设备上登了网页微信
+                    break
+                elif retcode == '0':
+                    if selector == '2':  # 有新消息
+                        r = self.sync()
+                        if r is not None:
+                            self.handle_msg(r)
+                    elif selector == '3':  # 未知
+                        r = self.sync()
+                        if r is not None:
+                            self.handle_msg(r)
+                    elif selector == '6':  # 可能是红包
+                        r = self.sync()
+                        if r is not None:
+                            self.handle_msg(r)
+                    elif selector == '7':  # 在手机上操作了微信
+                        r = self.sync()
+                        if r is not None:
+                            self.handle_msg(r)
+                    elif selector == '0':  # 无事件
+                        pass
+                    else:
+                        print '[DEBUG] sync_check:', retcode, selector
+                        r = self.sync()
+                        if r is not None:
+                            self.handle_msg(r)
                 else:
-                    pass
-            self.schedule()
+                    print '[DEBUG] sync_check:', retcode, selector
+                self.schedule()
+            except:
+                print '[ERROR] Except in proc_msg'
             check_time = time.time() - check_time
             if check_time < 0.8:
                 time.sleep(1 - check_time)
@@ -898,14 +915,14 @@ class WXBot:
         url = 'https://' + self.sync_host + '.weixin.qq.com/cgi-bin/mmwebwx-bin/synccheck?' + urllib.urlencode(params)
         try:
             r = self.session.get(url, timeout=60)
-        except (ConnectionError, ReadTimeout):
+            r.encoding = 'utf-8'
+            data = r.text
+            pm = re.search(r'window.synccheck=\{retcode:"(\d+)",selector:"(\d+)"\}', data)
+            retcode = pm.group(1)
+            selector = pm.group(2)
+            return [retcode, selector]
+        except:
             return [-1, -1]
-        r.encoding = 'utf-8'
-        data = r.text
-        pm = re.search(r'window.synccheck=\{retcode:"(\d+)",selector:"(\d+)"\}', data)
-        retcode = pm.group(1)
-        selector = pm.group(2)
-        return [retcode, selector]
 
     def sync(self):
         url = self.base_uri + '/webwxsync?sid=%s&skey=%s&lang=en_US&pass_ticket=%s' \
@@ -917,15 +934,15 @@ class WXBot:
         }
         try:
             r = self.session.post(url, data=json.dumps(params), timeout=60)
-        except (ConnectionError, ReadTimeout):
+            r.encoding = 'utf-8'
+            dic = json.loads(r.text)
+            if dic['BaseResponse']['Ret'] == 0:
+                self.sync_key = dic['SyncKey']
+                self.sync_key_str = '|'.join([str(keyVal['Key']) + '_' + str(keyVal['Val'])
+                                              for keyVal in self.sync_key['List']])
+            return dic
+        except:
             return None
-        r.encoding = 'utf-8'
-        dic = json.loads(r.text)
-        if dic['BaseResponse']['Ret'] == 0:
-            self.sync_key = dic['SyncKey']
-            self.sync_key_str = '|'.join([str(keyVal['Key']) + '_' + str(keyVal['Val'])
-                                          for keyVal in self.sync_key['List']])
-        return dic
 
     def get_icon(self, uid, gid=None):
         """