From 70173adca919853a6e79e5cca2be17eabb3b8e68 Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Fri, 13 Apr 2018 18:35:36 +0200 Subject: [PATCH 1/2] Iterate over copies --- pyrogram/client/syncer.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pyrogram/client/syncer.py b/pyrogram/client/syncer.py index fd2a4959..4589103b 100644 --- a/pyrogram/client/syncer.py +++ b/pyrogram/client/syncer.py @@ -74,15 +74,15 @@ class Syncer: date=int(time.time()), peers_by_id={ k: getattr(v, "access_hash", None) - for k, v in client.peers_by_id.items() + for k, v in client.peers_by_id.copy().items() }, peers_by_username={ k: utils.get_peer_id(v) - for k, v in client.peers_by_username.items() + for k, v in client.peers_by_username.copy().items() }, peers_by_phone={ k: utils.get_peer_id(v) - for k, v in client.peers_by_phone.items() + for k, v in client.peers_by_phone.copy().items() } ) From 83c4ba8a7801d88216d43db12c0f66b3e4b4f5df Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Fri, 13 Apr 2018 18:53:55 +0200 Subject: [PATCH 2/2] Handle flood wait when getting dialogs chunks --- pyrogram/client/client.py | 31 +++++++++++++++---------------- 1 file changed, 15 insertions(+), 16 deletions(-) diff --git a/pyrogram/client/client.py b/pyrogram/client/client.py index 3436f471..96257ff3 100644 --- a/pyrogram/client/client.py +++ b/pyrogram/client/client.py @@ -888,15 +888,20 @@ class Client: ) def get_dialogs_chunk(self, offset_date): - r = self.send( - functions.messages.GetDialogs( - offset_date, 0, types.InputPeerEmpty(), - self.DIALOGS_AT_ONCE, True - ) - ) - log.info("Total peers: {}".format(len(self.peers_by_id))) - - return r + while True: + try: + r = self.send( + functions.messages.GetDialogs( + offset_date, 0, types.InputPeerEmpty(), + self.DIALOGS_AT_ONCE, True + ) + ) + except FloodWait as e: + log.warning("get_dialogs flood: waiting {} seconds".format(e.x)) + time.sleep(e.x) + else: + log.info("Total peers: {}".format(len(self.peers_by_id))) + return r def get_dialogs(self): self.send(functions.messages.GetPinnedDialogs()) @@ -905,13 +910,7 @@ class Client: offset_date = utils.get_offset_date(dialogs) while len(dialogs.dialogs) == self.DIALOGS_AT_ONCE: - try: - dialogs = self.get_dialogs_chunk(offset_date) - except FloodWait as e: - log.warning("get_dialogs flood: waiting {} seconds".format(e.x)) - time.sleep(e.x) - continue - + dialogs = self.get_dialogs_chunk(offset_date) offset_date = utils.get_offset_date(dialogs) self.get_dialogs_chunk(0)