mirror of
https://github.com/eternnoir/pyTelegramBotAPI.git
synced 2023-08-10 21:12:57 +03:00
Merge pull request #97 from askainet/skip_pending_update
Get and discard all pending updates sent before first poll of the bot
This commit is contained in:
commit
a3519ff539
@ -44,13 +44,14 @@ class TeleBot:
|
|||||||
getUpdates
|
getUpdates
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def __init__(self, token, threaded=True):
|
def __init__(self, token, threaded=True, skip_pending=False):
|
||||||
"""
|
"""
|
||||||
:param token: bot API token
|
:param token: bot API token
|
||||||
:return: Telebot object.
|
:return: Telebot object.
|
||||||
"""
|
"""
|
||||||
self.token = token
|
self.token = token
|
||||||
self.update_listener = []
|
self.update_listener = []
|
||||||
|
self.skip_pending = skip_pending
|
||||||
|
|
||||||
self.__stop_polling = threading.Event()
|
self.__stop_polling = threading.Event()
|
||||||
self.last_update_id = 0
|
self.last_update_id = 0
|
||||||
@ -90,12 +91,30 @@ class TeleBot:
|
|||||||
ret.append(types.Update.de_json(ju))
|
ret.append(types.Update.de_json(ju))
|
||||||
return ret
|
return ret
|
||||||
|
|
||||||
|
def __skip_updates(self):
|
||||||
|
"""
|
||||||
|
Get and discard all pending updates before first poll of the bot
|
||||||
|
:return: total updates skipped
|
||||||
|
"""
|
||||||
|
total = 0
|
||||||
|
updates = self.get_updates(offset=self.last_update_id, timeout=1)
|
||||||
|
while updates:
|
||||||
|
total += len(updates)
|
||||||
|
for update in updates:
|
||||||
|
if update.update_id > self.last_update_id:
|
||||||
|
self.last_update_id = update.update_id
|
||||||
|
updates = self.get_updates(offset=self.last_update_id+1, timeout=1)
|
||||||
|
return total
|
||||||
|
|
||||||
def __retrieve_updates(self, timeout=20):
|
def __retrieve_updates(self, timeout=20):
|
||||||
"""
|
"""
|
||||||
Retrieves any updates from the Telegram API.
|
Retrieves any updates from the Telegram API.
|
||||||
Registered listeners and applicable message handlers will be notified when a new message arrives.
|
Registered listeners and applicable message handlers will be notified when a new message arrives.
|
||||||
:raises ApiException when a call has failed.
|
:raises ApiException when a call has failed.
|
||||||
"""
|
"""
|
||||||
|
if self.skip_pending:
|
||||||
|
logger.debug('Skipped {0} pending messages'.format(self.__skip_updates()))
|
||||||
|
self.skip_pending = False
|
||||||
updates = self.get_updates(offset=(self.last_update_id + 1), timeout=timeout)
|
updates = self.get_updates(offset=(self.last_update_id + 1), timeout=timeout)
|
||||||
new_messages = []
|
new_messages = []
|
||||||
for update in updates:
|
for update in updates:
|
||||||
|
Loading…
Reference in New Issue
Block a user