Keep track of channel deletion

This commit is contained in:
BreadTube 2026-05-27 01:15:15 +09:00
commit 1340e8d49a

View file

@ -141,15 +141,20 @@ class Bot:
self.logger.debug('Deleting duplicated text channels') 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] 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) unique_names: set[str] = set(channel_names)
for name in unique_names: deleted_channels: set[TextChannel] = set()
occurence = 0 try:
for channel in self.guild_text_channels: for name in unique_names:
if channel.name == name: occurence = 0
occurence += 1 for channel in self.guild_text_channels:
if occurence > 1: if channel.name == name:
self.logger.debug('Deleting duplicate channel: %d -> %s', channel.id, name) occurence += 1
self.discord_manager.delete_text_channel( if occurence > 1:
channel.id, request_timeout=self.config.request_timeout) 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]: def _get_all_channel_messages(self, channel: TextChannel) -> list[Message]:
messages_id_delete_task: set[int] = set() messages_id_delete_task: set[int] = set()
@ -223,10 +228,15 @@ class Bot:
def _clean_category(self, category: ChannelCategory): def _clean_category(self, category: ChannelCategory):
self.logger.info('Cleaning category "%s" (%d)', category.name, category.id) self.logger.info('Cleaning category "%s" (%d)', category.name, category.id)
for channel in self.guild_categories: deleted_channels: set[TextChannel] = set()
if channel.parent_id == category.id: try:
self.logger.debug('Cleaning category -> deleting channel "%s"', channel.name) for channel in self.guild_text_channels:
self.discord_manager.delete_text_channel(channel.id, request_timeout=self.config.request_timeout) 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: def _parse_command(self, message: Message) -> bool:
match BotCommand(message.content[:100].split(' ')[0]) if message.content else BotCommand.UNKNOWN: match BotCommand(message.content[:100].split(' ')[0]) if message.content else BotCommand.UNKNOWN: