diff options
| author | Rapptz <[email protected]> | 2021-04-25 04:57:29 -0400 |
|---|---|---|
| committer | Rapptz <[email protected]> | 2021-05-27 00:53:13 -0400 |
| commit | 98570793e4af8dcfca25621e86fecd85297b0d59 (patch) | |
| tree | efcbe97935fa61126c642f00fdd3ebbc15b61375 /discord/state.py | |
| parent | Fix bug in Embed.__len__ caused by footer without text (diff) | |
| download | discord.py-98570793e4af8dcfca25621e86fecd85297b0d59.tar.xz discord.py-98570793e4af8dcfca25621e86fecd85297b0d59.zip | |
Add initial support for buttons and components
Diffstat (limited to 'discord/state.py')
| -rw-r--r-- | discord/state.py | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/discord/state.py b/discord/state.py index dd09634d..e4ea28ef 100644 --- a/discord/state.py +++ b/discord/state.py @@ -52,6 +52,7 @@ from .flags import ApplicationFlags, Intents, MemberCacheFlags from .object import Object from .invite import Invite from .interactions import Interaction +from .ui.view import ViewStore class ChunkRequest: def __init__(self, guild_id, loop, resolver, *, cache=True): @@ -187,6 +188,7 @@ class ConnectionState: self._users = weakref.WeakValueDictionary() self._emojis = {} self._guilds = {} + self._view_store = ViewStore(self) self._voice_clients = {} # LRU of max size 128 @@ -278,6 +280,9 @@ class ConnectionState: self._emojis[emoji_id] = emoji = Emoji(guild=guild, state=self, data=data) return emoji + def store_view(self, view, message_id=None): + self._view_store.add_view(view, message_id) + @property def guilds(self): return list(self._guilds.values()) @@ -509,6 +514,9 @@ class ConnectionState: else: self.dispatch('raw_message_edit', raw) + if 'components' in data and self._view_store.is_message_tracked(raw.message_id): + self._view_store.update_view(raw.message_id, data['components']) + def parse_message_reaction_add(self, data): emoji = data['emoji'] emoji_id = utils._get_as_snowflake(emoji, 'id') @@ -581,6 +589,11 @@ class ConnectionState: def parse_interaction_create(self, data): interaction = Interaction(data=data, state=self) + if data['type'] == 3: # interaction component + custom_id = interaction.data['custom_id'] # type: ignore + component_type = interaction.data['component_type'] # type: ignore + self._view_store.dispatch(component_type, custom_id, interaction) + self.dispatch('interaction', interaction) def parse_presence_update(self, data): |