diff options
Diffstat (limited to 'discord/state.py')
| -rw-r--r-- | discord/state.py | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/discord/state.py b/discord/state.py index fd0587bf..ec8ce94c 100644 --- a/discord/state.py +++ b/discord/state.py @@ -57,6 +57,7 @@ from .interactions import Interaction from .ui.view import ViewStore from .stage_instance import StageInstance from .threads import Thread, ThreadMember +from .sticker import GuildSticker class ChunkRequest: def __init__(self, guild_id, loop, resolver, *, cache=True): @@ -204,6 +205,7 @@ class ConnectionState: # though more testing will have to be done. self._users: Dict[int, User] = {} self._emojis = {} + self._stickers = {} self._guilds = {} self._view_store = ViewStore(self) self._voice_clients = {} @@ -298,6 +300,11 @@ class ConnectionState: self._emojis[emoji_id] = emoji = Emoji(guild=guild, state=self, data=data) return emoji + def store_sticker(self, guild, data): + sticker_id = int(data['id']) + self._stickers[sticker_id] = sticker = GuildSticker(state=self, data=data) + return sticker + def store_view(self, view, message_id=None): self._view_store.add_view(view, message_id) @@ -324,15 +331,25 @@ class ConnectionState: for emoji in guild.emojis: self._emojis.pop(emoji.id, None) + for sticker in guild.stickers: + self._stickers.pop(sticker.id, None) + del guild @property def emojis(self): return list(self._emojis.values()) + @property + def stickers(self): + return list(self._stickers.values()) + def get_emoji(self, emoji_id): return self._emojis.get(emoji_id) + def get_sticker(self, sticker_id): + return self._stickers.get(sticker_id) + @property def private_channels(self): return list(self._private_channels.values()) @@ -925,6 +942,18 @@ class ConnectionState: guild.emojis = tuple(map(lambda d: self.store_emoji(guild, d), data['emojis'])) self.dispatch('guild_emojis_update', guild, before_emojis, guild.emojis) + def parse_guild_stickers_update(self, data): + guild = self._get_guild(int(data['guild_id'])) + if guild is None: + log.debug('GUILD_STICKERS_UPDATE referencing an unknown guild ID: %s. Discarding.', data['guild_id']) + return + + before_stickers = guild.stickers + for emoji in before_stickers: + self._stickers.pop(emoji.id, None) + guild.stickers = tuple(map(lambda d: self.store_sticker(guild, d), data['stickers'])) + self.dispatch('guild_stickers_update', guild, before_stickers, guild.stickers) + def _get_create_guild(self, data): if data.get('unavailable') is False: # GUILD_CREATE with unavailable in the response |