diff --git a/cogs/logging_cog.py b/cogs/logging_cog.py index 198e6dd..0a8675c 100644 --- a/cogs/logging_cog.py +++ b/cogs/logging_cog.py @@ -369,6 +369,28 @@ class LoggingCog(commands.Cog): # log.debug(f"Logging disabled for event '{event_key}' in guild {guild_id}") return enabled + async def _is_recent_audit_log_for_target( + self, + guild: discord.Guild, + action: discord.AuditLogAction, + target_id: int, + max_age: float = 5.0, + ) -> bool: + """Return True if the latest audit log entry matches the target within ``max_age`` seconds.""" + try: + async for entry in guild.audit_logs(limit=1, action=action): + if ( + entry.target.id == target_id + and (discord.utils.utcnow() - entry.created_at).total_seconds() + <= max_age + ): + return True + return False + except discord.Forbidden: + return True + except Exception: + return False + # --- Log Command Group --- @commands.group(name="log", invoke_without_command=True) @@ -996,6 +1018,14 @@ class LoggingCog(commands.Cog): changes.append(f"**Position:** `{before.position}` → `{after.position}`") if changes: + if ( + len(changes) == 1 + and changes[0].startswith("**Position:") + and not await self._is_recent_audit_log_for_target( + guild, discord.AuditLogAction.role_update, after.id + ) + ): + return embed = self._create_log_embed( title="🔧 Role Updated (Event)", description=f"Role {after.mention} updated.\n*Audit log may contain updater and specific permission changes.*\n" @@ -1121,6 +1151,14 @@ class LoggingCog(commands.Cog): changes.append(f"**Category:** {before_cat} → {after_cat}") if changes: + if ( + len(changes) == 1 + and changes[0].startswith("**Position:") + and not await self._is_recent_audit_log_for_target( + guild, discord.AuditLogAction.channel_update, after.id + ) + ): + return embed = self._create_log_embed( title=f"📝 {ch_type} Channel Updated (Event)", description=f"Channel {after.mention} updated.\n*Audit log may contain updater and specific permission changes.*\n"