Add support for server specific nicknames.

This commit is contained in:
Rapptz 2016-04-29 06:39:21 -04:00
parent cc78cfedb6
commit 133e8d3a44
3 changed files with 21 additions and 2 deletions

View File

@ -64,11 +64,13 @@ class Member(User):
The game that the user is currently playing. Could be None if no game is being played. The game that the user is currently playing. Could be None if no game is being played.
server : :class:`Server` server : :class:`Server`
The server that the member belongs to. The server that the member belongs to.
nick : Optional[str]
The server specific nickname of the user.
""" """
__slots__ = [ 'deaf', 'mute', 'self_mute', 'self_deaf', 'is_afk', __slots__ = [ 'deaf', 'mute', 'self_mute', 'self_deaf', 'is_afk',
'voice_channel', 'roles', 'joined_at', 'status', 'game', 'voice_channel', 'roles', 'joined_at', 'status', 'game',
'server' ] 'server', 'nick' ]
def __init__(self, **kwargs): def __init__(self, **kwargs):
super().__init__(**kwargs.get('user')) super().__init__(**kwargs.get('user'))
@ -80,6 +82,7 @@ class Member(User):
game = kwargs.get('game', {}) game = kwargs.get('game', {})
self.game = Game(**game) if game else None self.game = Game(**game) if game else None
self.server = kwargs.get('server', None) self.server = kwargs.get('server', None)
self.nick = kwargs.get('nick', None)
self._update_voice_state(mute=self.mute, deaf=self.deaf) self._update_voice_state(mute=self.mute, deaf=self.deaf)
def _update_voice_state(self, **kwargs): def _update_voice_state(self, **kwargs):

View File

@ -317,9 +317,14 @@ class ConnectionState:
member.discriminator = user['discriminator'] member.discriminator = user['discriminator']
member.avatar = user['avatar'] member.avatar = user['avatar']
member.bot = user.get('bot', False) member.bot = user.get('bot', False)
member.roles = [server.default_role]
# the nickname change is optional,
# if it isn't in the payload then it didn't change
if 'nick' in data:
member.nick = data['nick']
# update the roles # update the roles
member.roles = [server.default_role]
for role in server.roles: for role in server.roles:
if role.id in data['roles']: if role.id in data['roles']:
member.roles.append(role) member.roles.append(role)

View File

@ -125,3 +125,14 @@ class User:
This is when the user's discord account was created.""" This is when the user's discord account was created."""
return snowflake_time(self.id) return snowflake_time(self.id)
@property
def display_name(self):
"""Returns the user's display name.
For regular users this is just their username, but
if they have a server specific nickname then that
is returned instead.
"""
nickname = getattr(self, 'nick', None)
return nickname if nickname is not None else self.name