@@ -255,17 +255,20 @@ async def unfreeze_logging(guild_id: int) -> None:
255255
256256userlog .d .actions ["unfreeze_logging" ] = unfreeze_logging
257257
258-
258+ # TODO: refactor this to better take advantage of the new audit log cache
259259async def find_auditlog_data (
260- event : hikari .Event , * , event_type : hikari .AuditLogEventType , user_id : t .Optional [int ] = None
260+ guild : hikari .SnowflakeishOr [hikari .PartialGuild ],
261+ * ,
262+ event_type : hikari .AuditLogEventType ,
263+ user_id : t .Optional [int ] = None ,
261264) -> t .Optional [hikari .AuditLogEntry ]:
262265 """Find a recently sent audit log entry that matches criteria.
263266
264267 Parameters
265268 ----------
266- event : hikari.GuildEvent
269+ event : hikari.Event
267270 The event that triggered this search.
268- type : hikari.AuditLogEventType
271+ event_type : hikari.AuditLogEventType
269272 The type of audit log entry to look for.
270273 user_id : Optional[int], optional
271274 The user affected by this audit log, if any. By default hikari.UNDEFINED
@@ -284,41 +287,12 @@ async def find_auditlog_data(
284287 # Stuff that is observed to just take too goddamn long to appear in AuditLogs
285288 takes_an_obscene_amount_of_time = [hikari .AuditLogEventType .MESSAGE_BULK_DELETE ]
286289
287- guild = userlog .app .cache .get_guild (event .guild_id ) # type: ignore
288- sleep_time = 15.0 if event_type not in takes_an_obscene_amount_of_time else 30.0
289- await asyncio .sleep (sleep_time ) # Wait for auditlog to hopefully fill in
290-
291- if not guild :
292- raise ValueError ("Cannot find guild to parse auditlogs for." )
293-
294- me = userlog .app .cache .get_member (guild , userlog .app .user_id )
295-
296- if me is None :
297- return
298-
299- perms = lightbulb .utils .permissions_for (me )
300- if not (perms & hikari .Permissions .VIEW_AUDIT_LOG ):
301- # Do not attempt to fetch audit log if bot has no perms
302- return
303-
304- try :
305- count = 0
306- async for log in userlog .app .rest .fetch_audit_log (guild , event_type = event_type ):
307- for entry in log .entries .values ():
308- # We do not want to return entries older than 15 seconds
309- if (helpers .utcnow () - entry .id .created_at ).total_seconds () > 30 or count > 5 :
310- return
311-
312- if user_id and user_id == entry .target_id :
313- return entry
314- elif user_id :
315- count += 1
316- continue
317- else :
318- return entry
290+ sleep_time = 5.0 if event_type not in takes_an_obscene_amount_of_time else 30.0
291+ await asyncio .sleep (sleep_time ) # Wait for auditlog event to hopefully arrive
319292
320- except (hikari .ForbiddenError , hikari .HTTPError , asyncio .TimeoutError ):
321- return
293+ return userlog .app .audit_log_cache .get_first_by (
294+ guild , event_type , lambda e : e .target_id == user_id if user_id else True
295+ )
322296
323297
324298async def get_perms_diff (old_role : hikari .Role , role : hikari .Role ) -> t .Optional [str ]:
@@ -446,7 +420,7 @@ async def message_delete(plugin: SnedPlugin, event: hikari.GuildMessageDeleteEve
446420 contents = create_log_content (event .old_message )
447421
448422 entry = await find_auditlog_data (
449- event , event_type = hikari .AuditLogEventType .MESSAGE_DELETE , user_id = event .old_message .author .id
423+ event . guild_id , event_type = hikari .AuditLogEventType .MESSAGE_DELETE , user_id = event .old_message .author .id
450424 )
451425
452426 if entry :
@@ -505,7 +479,7 @@ async def message_update(plugin: SnedPlugin, event: hikari.GuildMessageUpdateEve
505479async def bulk_message_delete (plugin : SnedPlugin , event : hikari .GuildBulkMessageDeleteEvent ) -> None :
506480
507481 moderator = "Discord"
508- entry = await find_auditlog_data (event , event_type = hikari .AuditLogEventType .MESSAGE_BULK_DELETE )
482+ entry = await find_auditlog_data (event . guild_id , event_type = hikari .AuditLogEventType .MESSAGE_BULK_DELETE )
509483 if entry :
510484 assert entry .user_id is not None
511485 moderator = plugin .app .cache .get_member (event .guild_id , entry .user_id )
@@ -525,7 +499,7 @@ async def bulk_message_delete(plugin: SnedPlugin, event: hikari.GuildBulkMessage
525499@userlog .listener (hikari .RoleDeleteEvent , bind = True )
526500async def role_delete (plugin : SnedPlugin , event : hikari .RoleDeleteEvent ) -> None :
527501
528- entry = await find_auditlog_data (event , event_type = hikari .AuditLogEventType .ROLE_DELETE )
502+ entry = await find_auditlog_data (event . guild_id , event_type = hikari .AuditLogEventType .ROLE_DELETE )
529503 if entry and event .old_role :
530504 assert entry .user_id is not None
531505 moderator = plugin .app .cache .get_member (event .guild_id , entry .user_id )
@@ -540,7 +514,7 @@ async def role_delete(plugin: SnedPlugin, event: hikari.RoleDeleteEvent) -> None
540514@userlog .listener (hikari .RoleCreateEvent , bind = True )
541515async def role_create (plugin : SnedPlugin , event : hikari .RoleCreateEvent ) -> None :
542516
543- entry = await find_auditlog_data (event , event_type = hikari .AuditLogEventType .ROLE_CREATE )
517+ entry = await find_auditlog_data (event . guild_id , event_type = hikari .AuditLogEventType .ROLE_CREATE )
544518 if entry and event .role :
545519 assert entry .user_id is not None
546520 moderator = plugin .app .cache .get_member (event .guild_id , entry .user_id )
@@ -555,7 +529,7 @@ async def role_create(plugin: SnedPlugin, event: hikari.RoleCreateEvent) -> None
555529@userlog .listener (hikari .RoleUpdateEvent , bind = True )
556530async def role_update (plugin : SnedPlugin , event : hikari .RoleUpdateEvent ) -> None :
557531
558- entry = await find_auditlog_data (event , event_type = hikari .AuditLogEventType .ROLE_UPDATE )
532+ entry = await find_auditlog_data (event . guild_id , event_type = hikari .AuditLogEventType .ROLE_UPDATE )
559533 if entry and event .old_role :
560534 assert entry .user_id
561535 moderator = plugin .app .cache .get_member (event .guild_id , entry .user_id )
@@ -586,7 +560,7 @@ async def role_update(plugin: SnedPlugin, event: hikari.RoleUpdateEvent) -> None
586560@userlog .listener (hikari .GuildChannelDeleteEvent , bind = True )
587561async def channel_delete (plugin : SnedPlugin , event : hikari .GuildChannelDeleteEvent ) -> None :
588562
589- entry = await find_auditlog_data (event , event_type = hikari .AuditLogEventType .CHANNEL_DELETE )
563+ entry = await find_auditlog_data (event . guild_id , event_type = hikari .AuditLogEventType .CHANNEL_DELETE )
590564 if entry and event .channel :
591565 assert entry .user_id is not None
592566 moderator = plugin .app .cache .get_member (event .guild_id , entry .user_id )
@@ -601,7 +575,7 @@ async def channel_delete(plugin: SnedPlugin, event: hikari.GuildChannelDeleteEve
601575@userlog .listener (hikari .GuildChannelCreateEvent , bind = True )
602576async def channel_create (plugin : SnedPlugin , event : hikari .GuildChannelCreateEvent ) -> None :
603577
604- entry = await find_auditlog_data (event , event_type = hikari .AuditLogEventType .CHANNEL_CREATE )
578+ entry = await find_auditlog_data (event . guild_id , event_type = hikari .AuditLogEventType .CHANNEL_CREATE )
605579 if entry and event .channel :
606580 assert entry .user_id is not None
607581 moderator = plugin .app .cache .get_member (event .guild_id , entry .user_id )
@@ -616,7 +590,7 @@ async def channel_create(plugin: SnedPlugin, event: hikari.GuildChannelCreateEve
616590@userlog .listener (hikari .GuildChannelUpdateEvent , bind = True )
617591async def channel_update (plugin : SnedPlugin , event : hikari .GuildChannelUpdateEvent ) -> None :
618592
619- entry = await find_auditlog_data (event , event_type = hikari .AuditLogEventType .CHANNEL_UPDATE )
593+ entry = await find_auditlog_data (event . guild_id , event_type = hikari .AuditLogEventType .CHANNEL_UPDATE )
620594
621595 if entry and event .old_channel :
622596 assert entry .user_id is not None
@@ -663,7 +637,7 @@ async def channel_update(plugin: SnedPlugin, event: hikari.GuildChannelUpdateEve
663637@userlog .listener (hikari .GuildUpdateEvent , bind = True )
664638async def guild_update (plugin : SnedPlugin , event : hikari .GuildUpdateEvent ) -> None :
665639
666- entry = await find_auditlog_data (event , event_type = hikari .AuditLogEventType .GUILD_UPDATE )
640+ entry = await find_auditlog_data (event . guild_id , event_type = hikari .AuditLogEventType .GUILD_UPDATE )
667641
668642 if event .old_guild :
669643 if entry :
@@ -722,7 +696,7 @@ async def guild_update(plugin: SnedPlugin, event: hikari.GuildUpdateEvent) -> No
722696async def member_ban_remove (plugin : SnedPlugin , event : hikari .BanDeleteEvent ) -> None :
723697
724698 entry = await find_auditlog_data (
725- event , event_type = hikari .AuditLogEventType .MEMBER_BAN_REMOVE , user_id = event .user .id
699+ event . guild_id , event_type = hikari .AuditLogEventType .MEMBER_BAN_REMOVE , user_id = event .user .id
726700 )
727701 if entry :
728702 assert entry .user_id is not None
@@ -757,7 +731,9 @@ async def member_ban_remove(plugin: SnedPlugin, event: hikari.BanDeleteEvent) ->
757731@userlog .listener (hikari .BanCreateEvent , bind = True )
758732async def member_ban_add (plugin : SnedPlugin , event : hikari .BanCreateEvent ) -> None :
759733
760- entry = await find_auditlog_data (event , event_type = hikari .AuditLogEventType .MEMBER_BAN_ADD , user_id = event .user .id )
734+ entry = await find_auditlog_data (
735+ event .guild_id , event_type = hikari .AuditLogEventType .MEMBER_BAN_ADD , user_id = event .user .id
736+ )
761737 if entry :
762738 assert entry .user_id is not None
763739 moderator = plugin .app .cache .get_member (event .guild_id , entry .user_id ) if entry else "Unknown"
@@ -794,7 +770,9 @@ async def member_delete(plugin: SnedPlugin, event: hikari.MemberDeleteEvent) ->
794770 if event .user_id == plugin .app .user_id :
795771 return # RIP
796772
797- entry = await find_auditlog_data (event , event_type = hikari .AuditLogEventType .MEMBER_KICK , user_id = event .user .id )
773+ entry = await find_auditlog_data (
774+ event .guild_id , event_type = hikari .AuditLogEventType .MEMBER_KICK , user_id = event .user .id
775+ )
798776
799777 if entry : # This is a kick
800778 assert entry .user_id is not None
@@ -864,7 +842,7 @@ async def member_update(plugin: SnedPlugin, event: hikari.MemberUpdateEvent) ->
864842 comms_disabled_until = member .communication_disabled_until ()
865843
866844 entry = await find_auditlog_data (
867- event , event_type = hikari .AuditLogEventType .MEMBER_UPDATE , user_id = event .user .id
845+ event . guild_id , event_type = hikari .AuditLogEventType .MEMBER_UPDATE , user_id = event .user .id
868846 )
869847 if not entry :
870848 return
@@ -943,10 +921,13 @@ async def member_update(plugin: SnedPlugin, event: hikari.MemberUpdateEvent) ->
943921 return
944922
945923 entry = await find_auditlog_data (
946- event , event_type = hikari .AuditLogEventType .MEMBER_ROLE_UPDATE , user_id = event .user .id
924+ event . guild_id , event_type = hikari .AuditLogEventType .MEMBER_ROLE_UPDATE , user_id = event .user .id
947925 )
948926
949- moderator = plugin .app .cache .get_member (event .guild_id , entry .user_id ) if entry and entry .user_id else "Unknown"
927+ moderator = plugin .app .cache .get_member (event .guild_id , entry .user_id ) if entry and entry .user_id else None
928+
929+ if moderator is None :
930+ return
950931
951932 if entry and entry .user_id == plugin .app .user_id :
952933 # Attempt to find the moderator in reason if sent by us
0 commit comments