Add support for relationships.

This commit is contained in:
Rapptz
2017-01-20 19:26:56 -05:00
parent e2acf7b2b9
commit 4c981ee631
8 changed files with 272 additions and 5 deletions

View File

@ -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']: