From 781edda56aa92b809ace6fb72887208a8d7b5a79 Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Wed, 9 May 2018 19:50:57 +0200 Subject: [PATCH] Handle get_messages flood wait --- pyrogram/client/ext/utils.py | 31 +++++++++++++++++++++++++++++-- 1 file changed, 29 insertions(+), 2 deletions(-) diff --git a/pyrogram/client/ext/utils.py b/pyrogram/client/ext/utils.py index 90071afc..94dcbe9c 100644 --- a/pyrogram/client/ext/utils.py +++ b/pyrogram/client/ext/utils.py @@ -16,14 +16,19 @@ # You should have received a copy of the GNU Lesser General Public License # along with Pyrogram. If not, see . +import logging +import time from base64 import b64decode, b64encode from struct import pack from weakref import proxy +from pyrogram.api.errors import FloodWait from pyrogram.client import types as pyrogram_types from ...api import types, functions from ...api.errors import StickersetInvalid +log = logging.getLogger(__name__) + # TODO: Organize the code better? ENTITIES = { @@ -545,7 +550,18 @@ def parse_messages( ) if message.reply_to_msg_id and replies: - m.reply_to_message = client.get_messages(m.chat.id, message.reply_to_msg_id, replies=replies - 1) + while True: + try: + m.reply_to_message = client.get_messages( + m.chat.id, message.reply_to_msg_id, + replies=replies - 1 + ) + except FloodWait as e: + log.warning("get_messages flood: waiting {} seconds".format(e.x)) + time.sleep(e.x) + continue + else: + break elif isinstance(message, types.MessageService): action = message.action @@ -636,7 +652,18 @@ def parse_messages( ) if isinstance(action, types.MessageActionPinMessage): - m.pinned_message = client.get_messages(m.chat.id, message.reply_to_msg_id, replies=0) + while True: + try: + m.pinned_message = client.get_messages( + m.chat.id, message.reply_to_msg_id, + replies=0 + ) + except FloodWait as e: + log.warning("get_messages flood: waiting {} seconds".format(e.x)) + time.sleep(e.x) + continue + else: + break else: m = pyrogram_types.Message(message_id=message.id, client=proxy(client))