Browse Source

terminate iterators immediately once out of data

if len(data) < 100, either limit was less than 100, or we ran
out of results, in both cases, we should terminate the lookup.

This fixes, e.g., hangs in audit_logs(limit=999999), and will
reduce the number of fetch calls for any case where limit is
greater than the number of results. (Prior, would just kinda
loop calling audit-logs)
pull/2048/head
khazhyk 6 years ago
parent
commit
7845bfb79b
  1. 4
      discord/iterators.py

4
discord/iterators.py

@ -306,7 +306,7 @@ class HistoryIterator(_AsyncIterator):
if self._get_retrieve():
data = await self._retrieve_messages(self.retrieve)
if self.limit is None and len(data) < 100:
if len(data) < 100:
self.limit = 0 # terminate the infinite loop
if self.reverse:
@ -439,7 +439,7 @@ class AuditLogIterator(_AsyncIterator):
if self._get_retrieve():
users, data = await self._strategy(self.retrieve)
if self.limit is None and len(data) < 100:
if len(data) < 100:
self.limit = 0 # terminate the infinite loop
if self.reverse:

Loading…
Cancel
Save