aboutsummaryrefslogtreecommitdiff
path: root/discord/state.py
diff options
context:
space:
mode:
authorRapptz <[email protected]>2021-04-25 04:57:29 -0400
committerRapptz <[email protected]>2021-05-27 00:53:13 -0400
commit98570793e4af8dcfca25621e86fecd85297b0d59 (patch)
treeefcbe97935fa61126c642f00fdd3ebbc15b61375 /discord/state.py
parentFix bug in Embed.__len__ caused by footer without text (diff)
downloaddiscord.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.py13
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):