Add Client.remove_dynamic_items

This commit is contained in:
Rapptz 2023-07-21 00:34:31 -04:00
parent 418230641c
commit 7c3868ef3b
3 changed files with 34 additions and 2 deletions

View File

@ -2681,7 +2681,7 @@ class Client:
return state.add_dm_channel(data) return state.add_dm_channel(data)
def add_dynamic_items(self, *items: Type[DynamicItem[Item[Any]]]) -> None: def add_dynamic_items(self, *items: Type[DynamicItem[Item[Any]]]) -> None:
r"""Registers a :class:`~discord.ui.DynamicItem` class for persistent listening. r"""Registers :class:`~discord.ui.DynamicItem` classes for persistent listening.
This method accepts *class types* rather than instances. This method accepts *class types* rather than instances.
@ -2695,7 +2695,7 @@ class Client:
Raises Raises
------- -------
TypeError TypeError
The class is not a subclass of :class:`~discord.ui.DynamicItem`. A class is not a subclass of :class:`~discord.ui.DynamicItem`.
""" """
for item in items: for item in items:
@ -2704,6 +2704,30 @@ class Client:
self._connection.store_dynamic_items(*items) self._connection.store_dynamic_items(*items)
def remove_dynamic_items(self, *items: Type[DynamicItem[Item[Any]]]) -> None:
r"""Removes :class:`~discord.ui.DynamicItem` classes from persistent listening.
This method accepts *class types* rather than instances.
.. versionadded:: 2.4
Parameters
-----------
\*items: Type[:class:`~discord.ui.DynamicItem`]
The classes of dynamic items to remove.
Raises
-------
TypeError
A class is not a subclass of :class:`~discord.ui.DynamicItem`.
"""
for item in items:
if not issubclass(item, DynamicItem):
raise TypeError(f'expected subclass of DynamicItem not {item.__name__}')
self._connection.remove_dynamic_items(*items)
def add_view(self, view: View, *, message_id: Optional[int] = None) -> None: def add_view(self, view: View, *, message_id: Optional[int] = None) -> None:
"""Registers a :class:`~discord.ui.View` for persistent listening. """Registers a :class:`~discord.ui.View` for persistent listening.

View File

@ -401,6 +401,9 @@ class ConnectionState(Generic[ClientT]):
def store_dynamic_items(self, *items: Type[DynamicItem[Item[Any]]]) -> None: def store_dynamic_items(self, *items: Type[DynamicItem[Item[Any]]]) -> None:
self._view_store.add_dynamic_items(*items) self._view_store.add_dynamic_items(*items)
def remove_dynamic_items(self, *items: Type[DynamicItem[Item[Any]]]) -> None:
self._view_store.remove_dynamic_items(*items)
@property @property
def persistent_views(self) -> Sequence[View]: def persistent_views(self) -> Sequence[View]:
return self._view_store.persistent_views return self._view_store.persistent_views

View File

@ -557,6 +557,11 @@ class ViewStore:
pattern = item.__discord_ui_compiled_template__ pattern = item.__discord_ui_compiled_template__
self._dynamic_items[pattern] = item self._dynamic_items[pattern] = item
def remove_dynamic_items(self, *items: Type[DynamicItem[Item[Any]]]) -> None:
for item in items:
pattern = item.__discord_ui_compiled_template__
self._dynamic_items.pop(pattern, None)
def add_view(self, view: View, message_id: Optional[int] = None) -> None: def add_view(self, view: View, message_id: Optional[int] = None) -> None:
view._start_listening_from_store(self) view._start_listening_from_store(self)
if view.__discord_ui_modal__: if view.__discord_ui_modal__: