From 732c5384fd82f8108091365556c95b564e54391f Mon Sep 17 00:00:00 2001 From: Rapptz Date: Sat, 29 May 2021 00:35:13 -0400 Subject: [PATCH] Allow registering a View for persistent long term dispatching --- discord/client.py | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/discord/client.py b/discord/client.py index 1a33394a5..60226012b 100644 --- a/discord/client.py +++ b/discord/client.py @@ -55,6 +55,7 @@ from .backoff import ExponentialBackoff from .webhook import Webhook from .iterators import GuildIterator from .appinfo import AppInfo +from .ui.view import View __all__ = ( 'Client', @@ -1379,3 +1380,29 @@ class Client: data = await state.http.start_private_message(user.id) return state.add_dm_channel(data) + + def add_view(self, view: View, *, message_id: Optional[int] = None) -> None: + """Registers a :class:`~discord.ui.View` for persistent listening. + + This method should be used for when a view is comprised of components + that last longer than the lifecycle of the program. + + Parameters + ------------ + view: :class:`discord.ui.View` + The view to register for dispatching. + message_id: Optional[:class:`int`] + The message ID that the view is attached to. This is currently used to + refresh the view's state during message update events. If not given + then message update events are not propagated for the view. + + Raises + ------- + TypeError + A view was not passed. + """ + + if not isinstance(view, View): + raise TypeError(f'expected an instance of View not {view.__class__!r}') + + self._connection.store_view(view, message_id)