diff --git a/discord/ui/view.py b/discord/ui/view.py index a3ec58928..2ece514d2 100644 --- a/discord/ui/view.py +++ b/discord/ui/view.py @@ -218,6 +218,7 @@ class BaseView: def _init_children(self) -> List[Item[Self]]: children = [] + parents = {} for name, raw in self.__view_children_items__.items(): if isinstance(raw, Item): @@ -230,6 +231,7 @@ class BaseView: if getattr(item, '__discord_ui_update_view__', False): item._update_children_view(self) # type: ignore children.append(item) + parents[raw] = item else: item: Item = raw.__discord_ui_model_type__(**raw.__discord_ui_model_kwargs__) item.callback = _ViewCallback(raw, self, item) # type: ignore @@ -237,7 +239,7 @@ class BaseView: setattr(self, raw.__name__, item) parent = getattr(raw, '__discord_ui_parent__', None) if parent: - parent._children.append(item) + parents.get(parent, parent)._children.append(item) continue children.append(item) @@ -586,7 +588,7 @@ class View(BaseView): def __init_subclass__(cls) -> None: super().__init_subclass__() - children: Dict[str, ItemCallbackType[Any]] = {} + children: Dict[str, ItemLike] = {} for base in reversed(cls.__mro__): for name, member in base.__dict__.items(): if hasattr(member, '__discord_ui_model_type__'):