diff --git a/CHANGELOG.md b/CHANGELOG.md index 9f12f67931..4c996d6e1e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -78,6 +78,8 @@ These changes are available on the `master` branch, but have not yet been releas ([#2480](https://github.com/Pycord-Development/pycord/pull/2480)) - Fixed outdated logic for filtering and sorting audit log entries. ([#2371](https://github.com/Pycord-Development/pycord/pull/2371)) +- Further fixed logic when fetching audit logs. + ([#2492](https://github.com/Pycord-Development/pycord/pull/2492)) ### Changed diff --git a/discord/http.py b/discord/http.py index 65c1dab0eb..8b3db319e7 100644 --- a/discord/http.py +++ b/discord/http.py @@ -1946,9 +1946,9 @@ def get_audit_logs( action_type: AuditLogAction | None = None, ) -> Response[audit_log.AuditLog]: params: dict[str, Any] = {"limit": limit} - if before: + if before is not None: params["before"] = before - if after: + if after is not None: params["after"] = after if user_id: params["user_id"] = user_id diff --git a/discord/iterators.py b/discord/iterators.py index b43dd53654..7404e790a4 100644 --- a/discord/iterators.py +++ b/discord/iterators.py @@ -491,12 +491,14 @@ def __init__( self.before = before self.user_id = user_id self.action_type = action_type - self.after = after or OLDEST_OBJECT + self.after = after self._users = {} self._state = guild._state self.entries = asyncio.Queue() async def _retrieve_entries(self, retrieve): + if not self._get_retrieve(): + return before = self.before.id if self.before else None after = self.after.id if self.after else None data: AuditLogPayload = await self.request( @@ -509,13 +511,14 @@ async def _retrieve_entries(self, retrieve): ) entries = data.get("audit_log_entries", []) + # if ONLY after is passed and NOT before, Discord reverses the sort to oldest first. if len(data) and entries: if self.limit is not None: self.limit -= retrieve if self.before or not self.after: self.before = Object(id=int(entries[-1]["id"])) - if self.after or not self.before: - self.after = Object(id=int(entries[0]["id"])) + if self.after and not self.before: + self.after = Object(id=int(entries[-1]["id"])) return data.get("users", []), entries async def next(self) -> AuditLogEntry: @@ -528,9 +531,13 @@ async def next(self) -> AuditLogEntry: raise NoMoreItems() def _get_retrieve(self): - limit = self.limit or 100 - self.retrieve = min(limit, 100) - return self.retrieve > 0 + l = self.limit + if l is None or l > 100: + r = 100 + else: + r = l + self.retrieve = r + return r > 0 async def _fill(self): from .user import User