Skip to content

Commit

Permalink
fix: further address audit log issues (#2492)
Browse files Browse the repository at this point in the history
  • Loading branch information
NeloBlivion committed Jul 8, 2024
1 parent 73e4e37 commit e25527f
Show file tree
Hide file tree
Showing 3 changed files with 17 additions and 8 deletions.
2 changes: 2 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down
4 changes: 2 additions & 2 deletions discord/http.py
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
19 changes: 13 additions & 6 deletions discord/iterators.py
Original file line number Diff line number Diff line change
Expand Up @@ -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(
Expand All @@ -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:
Expand All @@ -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
Expand Down

0 comments on commit e25527f

Please sign in to comment.