From 1340e8d49ac760b09c6d8383ab86b90847a78c5a Mon Sep 17 00:00:00 2001 From: BreadTube Date: Wed, 27 May 2026 01:15:15 +0900 Subject: [PATCH] Keep track of channel deletion --- breadtube_bot/bot.py | 36 +++++++++++++++++++++++------------- 1 file changed, 23 insertions(+), 13 deletions(-) diff --git a/breadtube_bot/bot.py b/breadtube_bot/bot.py index 9041c77..dc652e5 100644 --- a/breadtube_bot/bot.py +++ b/breadtube_bot/bot.py @@ -141,15 +141,20 @@ class Bot: self.logger.debug('Deleting duplicated text channels') channel_names: list[str] = [c.name for c in self.guild_text_channels if c.name is not None] unique_names: set[str] = set(channel_names) - for name in unique_names: - occurence = 0 - for channel in self.guild_text_channels: - if channel.name == name: - occurence += 1 - if occurence > 1: - self.logger.debug('Deleting duplicate channel: %d -> %s', channel.id, name) - self.discord_manager.delete_text_channel( - channel.id, request_timeout=self.config.request_timeout) + deleted_channels: set[TextChannel] = set() + try: + for name in unique_names: + occurence = 0 + for channel in self.guild_text_channels: + if channel.name == name: + occurence += 1 + if occurence > 1: + self.logger.debug('Deleting duplicate channel: %d -> %s', channel.id, name) + self.discord_manager.delete_text_channel( + channel.id, request_timeout=self.config.request_timeout) + deleted_channels.add(channel) + finally: + self.guild_text_channels = [c for c in self.guild_text_channels if c not in deleted_channels] def _get_all_channel_messages(self, channel: TextChannel) -> list[Message]: messages_id_delete_task: set[int] = set() @@ -223,10 +228,15 @@ class Bot: def _clean_category(self, category: ChannelCategory): self.logger.info('Cleaning category "%s" (%d)', category.name, category.id) - for channel in self.guild_categories: - if channel.parent_id == category.id: - self.logger.debug('Cleaning category -> deleting channel "%s"', channel.name) - self.discord_manager.delete_text_channel(channel.id, request_timeout=self.config.request_timeout) + deleted_channels: set[TextChannel] = set() + try: + for channel in self.guild_text_channels: + if channel.parent_id == category.id: + self.logger.debug('Cleaning category -> deleting channel "%s"', channel.name) + self.discord_manager.delete_text_channel(channel.id, request_timeout=self.config.request_timeout) + deleted_channels.add(channel) + finally: + self.guild_text_channels = [c for c in self.guild_text_channels if c not in deleted_channels] def _parse_command(self, message: Message) -> bool: match BotCommand(message.content[:100].split(' ')[0]) if message.content else BotCommand.UNKNOWN: