From c71537c8bffd05db901415ea13aa8560ed6641f9 Mon Sep 17 00:00:00 2001 From: Codex Date: Fri, 6 Jun 2025 03:42:15 +0000 Subject: [PATCH] Fix LoggingCog LogView nested container --- cogs/logging_cog.py | 25 +++++++++++++++++-------- 1 file changed, 17 insertions(+), 8 deletions(-) diff --git a/cogs/logging_cog.py b/cogs/logging_cog.py index 34fa4eb..56ad4c3 100644 --- a/cogs/logging_cog.py +++ b/cogs/logging_cog.py @@ -109,13 +109,13 @@ class LoggingCog(commands.Cog): self.container = ui.Container(accent_colour=color) self.add_item(self.container) + self.title = title self.description_display: Optional[ui.TextDisplay] = ( ui.TextDisplay(description) if description else None ) - # Header section is only used when an author is provided so we don't - # need a placeholder accessory. + # Header section is only used when an author is provided. if author is not None: self.header: Optional[ui.Section] = ui.Section( accessory=ui.Thumbnail(media=author.display_avatar.url) @@ -131,9 +131,9 @@ class LoggingCog(commands.Cog): if self.description_display: self.container.add_item(self.description_display) - # Container used for fields so they're inserted before the footer. - self.fields_container = ui.Container() - self.container.add_item(self.fields_container) + # Field displays are added directly to the main container before the + # footer separator. + self.fields: list[ui.TextDisplay] = [] self.separator = ui.Separator(spacing=discord.SeparatorSpacing.small) footer_text = footer or f"Bot ID: {bot.user.id}" + ( @@ -146,14 +146,20 @@ class LoggingCog(commands.Cog): # --- Compatibility helpers --- def add_field(self, name: str, value: str, inline: bool = False): """Append a bolded name/value line to the log view.""" - self.fields_container.add_item(ui.TextDisplay(f"**{name}:** {value}")) + field = ui.TextDisplay(f"**{name}:** {value}") + self.fields.append(field) + self.container.remove_item(self.separator) + self.container.remove_item(self.footer_display) + self.container.add_item(field) + self.container.add_item(self.separator) + self.container.add_item(self.footer_display) def set_footer(self, text: str): """Replace the footer text display.""" self.footer_display.content = text def set_author(self, name: str, icon_url: Optional[str] = None): - """Add or update the author information.""" + """Add or update the author information while keeping the title.""" if self.header is None: # Remove plain title/description displays and replace with a section. self.container.remove_item(self.title_display) @@ -162,18 +168,21 @@ class LoggingCog(commands.Cog): self.header = ui.Section( accessory=ui.Thumbnail(media=icon_url or "") ) + self.header.add_item(ui.TextDisplay(f"**{self.title}**")) self.header.add_item(ui.TextDisplay(name)) if self.description_display: self.header.add_item(self.description_display) self.container.add_item(self.header) - # Move to the beginning to mimic embed header placement self.container._children.remove(self.header) self.container._children.insert(0, self.header) else: self.header.clear_items() if icon_url: self.header.accessory = ui.Thumbnail(media=icon_url) + self.header.add_item(ui.TextDisplay(f"**{self.title}**")) self.header.add_item(ui.TextDisplay(name)) + if self.description_display: + self.header.add_item(self.description_display) def _user_display(self, user: Union[discord.Member, discord.User]) -> str: """Return display name, username and ID string for a user.""" display = user.display_name if isinstance(user, discord.Member) else user.name