diff options
Diffstat (limited to 'discord/state.py')
| -rw-r--r-- | discord/state.py | 30 |
1 files changed, 29 insertions, 1 deletions
diff --git a/discord/state.py b/discord/state.py index f68656cc..542d1848 100644 --- a/discord/state.py +++ b/discord/state.py @@ -30,6 +30,7 @@ from .game import Game from .emoji import Emoji, PartialEmoji from .reaction import Reaction from .message import Message +from .relationship import Relationship from .channel import * from .member import Member from .role import Role @@ -247,6 +248,14 @@ class ConnectionState: if not self.is_bot or guild.large: guilds.append(guild) + for relationship in data.get('relationships', []): + try: + r_id = int(relationship['id']) + except KeyError: + continue + else: + self.user._relationships[r_id] = Relationship(state=self, data=relationship) + for pm in data.get('private_channels', []): factory, _ = _channel_factory(pm['type']) self._add_private_channel(factory(me=self.user, data=pm, state=self)) @@ -663,6 +672,25 @@ class ConnectionState: if call is not None: self.dispatch('call_remove', call) + def parse_relationship_add(self, data): + key = int(data['id']) + old = self.user.get_relationship(key) + new = Relationship(state=self, data=data) + self.user._relationships[key] = new + if old is not None: + self.dispatch('relationship_update', old, new) + else: + self.dispatch('relationship_add', new) + + def parse_relationship_remove(self, data): + key = int(data['id']) + try: + old = self.user._relationships.pop(key) + except KeyError: + pass + else: + self.dispatch('relationship_remove', old) + def _get_reaction_user(self, channel, user_id): if isinstance(channel, DMChannel) and user_id == channel.recipient.id: return channel.recipient @@ -761,7 +789,7 @@ class AutoShardedConnectionState(ConnectionState): if not hasattr(self, '_ready_state'): self._ready_state = ReadyState(launch=asyncio.Event(), guilds=[]) - self.user = self.store_user(data['user']) + self.user = ClientUser(state=self, data=data['user']) guilds = self._ready_state.guilds for guild_data in data['guilds']: |