diff --git a/CHANGELOG.md b/CHANGELOG.md index 3e73869c95..c04ae0b7b2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -24,6 +24,8 @@ These changes are available on the `master` branch, but have not yet been releas ### Fixed +- Fix an issue where stopped views would not be cleaned up. + ([#3360](https://github.com/Pycord-Development/pycord/pull/3360)) - Fix `TypeError` when accessing `ApplicationCommand.guild_only` or `SlashCommandGroup.guild_only` when `contexts` is `None`. ([#3320](https://github.com/Pycord-Development/pycord/pull/3320)) diff --git a/discord/ui/view.py b/discord/ui/view.py index fdc478b868..af25a6ceb7 100644 --- a/discord/ui/view.py +++ b/discord/ui/view.py @@ -61,9 +61,8 @@ from ..components import TextDisplay as TextDisplayComponent from ..components import Thumbnail as ThumbnailComponent from ..components import _component_factory -from ..enums import ChannelType, SeparatorSpacingSize +from ..enums import ChannelType from ..errors import Forbidden, NotFound -from ..utils import find from .core import ItemInterface from .item import Item, ItemCallbackType, ModalItem, ViewItem @@ -1002,9 +1001,11 @@ def add_view(self, view: BaseView, message_id: int | None = None): self._synced_message_views[message_id] = view def remove_view(self, view: BaseView): - for item in view.walk_children(): - if item.is_storable(): - self._views.pop((item.type.value, item.custom_id), None) # type: ignore + keys_to_remove = [ + key for key, (stored_view, _) in self._views.items() if stored_view is view + ] + for key in keys_to_remove: + del self._views[key] for key, value in self._synced_message_views.items(): if value.id == view.id: