diff --git a/CHANGELOG.md b/CHANGELOG.md index 6d407f3758..87e9a3213e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -26,6 +26,8 @@ These changes are available on the `master` branch, but have not yet been releas ([#3320](https://github.com/Pycord-Development/pycord/pull/3320)) - Fix `SyntaxWarning` about `return` in a `finally` block raised on Python 3.14+ ([#3332](https://github.com/Pycord-Development/pycord/pull/3334)) +- Fix an issue where stopped views would not be cleaned up. + ([#3360](https://github.com/Pycord-Development/pycord/pull/3360)) ### Deprecated 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: