diff --git a/discord/ui/action_row.py b/discord/ui/action_row.py index 9fa8541c7..b3c9837ad 100644 --- a/discord/ui/action_row.py +++ b/discord/ui/action_row.py @@ -197,6 +197,7 @@ class ActionRow(Item[V]): if not isinstance(item, Item): raise TypeError(f'expected Item not {item.__class__.__name__}') + item._view = self._view self._children.append(item) return self diff --git a/discord/ui/container.py b/discord/ui/container.py index e45c1dac6..260577de9 100644 --- a/discord/ui/container.py +++ b/discord/ui/container.py @@ -110,7 +110,6 @@ class Container(Item[V]): self.spoiler: bool = spoiler self._colour = accent_colour or accent_color - self._view: Optional[V] = None self.row = row self.id = id @@ -277,6 +276,9 @@ class Container(Item[V]): if getattr(item, '__discord_ui_section__', False): self.__dispatchable.append(item.accessory) # type: ignore + if getattr(item, '__discord_ui_update_view__', False): + item._update_children_view(self.view) # type: ignore + return self def remove_item(self, item: Item[Any]) -> Self: diff --git a/discord/ui/section.py b/discord/ui/section.py index 13d13169c..98784d50a 100644 --- a/discord/ui/section.py +++ b/discord/ui/section.py @@ -139,9 +139,9 @@ class Section(Item[V]): if not isinstance(item, (Item, str)): raise TypeError(f'expected Item or str not {item.__class__.__name__}') - self._children.append( - item if isinstance(item, Item) else TextDisplay(item), - ) + item = item if isinstance(item, Item) else TextDisplay(item) + item._view = self.view + self._children.append(item) return self def remove_item(self, item: Item[Any]) -> Self: diff --git a/discord/ui/view.py b/discord/ui/view.py index 0fb577871..716576ccb 100644 --- a/discord/ui/view.py +++ b/discord/ui/view.py @@ -342,6 +342,10 @@ class BaseView: raise ValueError('v2 items cannot be added to this view') item._view = self + + if getattr(item, '__discord_ui_update_view__', False): + item._update_children_view(self) # type: ignore + self._children.append(item) return self