From 8878ce85f7b67d704a1e172be5e00e2177b9ed9d Mon Sep 17 00:00:00 2001 From: Cal Corum Date: Fri, 20 Mar 2026 12:02:26 -0500 Subject: [PATCH] perf: use channel.purge() instead of per-message delete loops (#93) Closes #93 Replace sequential message.delete() loops with channel.purge() bulk delete in three locations: - commands/admin/management.py: admin_clear_scorecards (up to 100 msgs) - tasks/live_scorebug_tracker.py: _post_scorebugs_to_channel (25 msgs) - tasks/live_scorebug_tracker.py: _clear_live_scores_channel (25 msgs) Co-Authored-By: Claude Sonnet 4.6 --- commands/admin/management.py | 11 +++-------- tasks/live_scorebug_tracker.py | 13 ++++++------- 2 files changed, 9 insertions(+), 15 deletions(-) diff --git a/commands/admin/management.py b/commands/admin/management.py index b738e2c..2c5d566 100644 --- a/commands/admin/management.py +++ b/commands/admin/management.py @@ -568,14 +568,9 @@ class AdminCommands(commands.Cog): return try: - # Clear all messages from the channel - deleted_count = 0 - async for message in live_scores_channel.history(limit=100): - try: - await message.delete() - deleted_count += 1 - except discord.NotFound: - pass # Message already deleted + # Clear all messages from the channel using bulk delete + deleted_messages = await live_scores_channel.purge(limit=100) + deleted_count = len(deleted_messages) self.logger.info(f"Cleared {deleted_count} messages from #live-sba-scores") diff --git a/tasks/live_scorebug_tracker.py b/tasks/live_scorebug_tracker.py index 9013ac2..a7b3ba5 100644 --- a/tasks/live_scorebug_tracker.py +++ b/tasks/live_scorebug_tracker.py @@ -112,7 +112,8 @@ class LiveScorebugTracker: for text_channel_id, sheet_url in all_scorecards: try: scorebug_data = await self.scorebug_service.read_scorebug_data( - sheet_url, full_length=False # Compact view for live channel + sheet_url, + full_length=False, # Compact view for live channel ) # Only include active (non-final) games @@ -188,9 +189,8 @@ class LiveScorebugTracker: embeds: List of scorebug embeds """ try: - # Clear old messages - async for message in channel.history(limit=25): - await message.delete() + # Clear old messages using bulk delete + await channel.purge(limit=25) # Post new scorebugs (Discord allows up to 10 embeds per message) if len(embeds) <= 10: @@ -216,9 +216,8 @@ class LiveScorebugTracker: channel: Discord text channel """ try: - # Clear all messages - async for message in channel.history(limit=25): - await message.delete() + # Clear all messages using bulk delete + await channel.purge(limit=25) self.logger.info("Cleared live-sba-scores channel (no active games)")