From 095f0ec2fc48ff353bd3bee21d0055b99fdc3aa9 Mon Sep 17 00:00:00 2001 From: Rapptz Date: Mon, 24 Sep 2018 22:50:05 -0400 Subject: Optimise some member and user related routines. * Skip user update if possible * Drop copy.copy in favour of manual copy Credit to Hornwitser for these findings. --- discord/member.py | 23 +++++++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) (limited to 'discord/member.py') diff --git a/discord/member.py b/discord/member.py index 009a2104..f265a1be 100644 --- a/discord/member.py +++ b/discord/member.py @@ -178,6 +178,20 @@ class Member(discord.abc.Messageable, _BaseUser): def __hash__(self): return hash(self._user) + @classmethod + def _copy(cls, member): + self = cls.__new__(cls) # to bypass __init__ + + self._roles = utils.SnowflakeList(member._roles, is_sorted=True) + self.joined_at = member.joined_at + self.status = member.status + self.guild = member.guild + self.nick = member.nick + self.activity = member.activity + self._state = member._state + self._user = User._copy(member._user) + return self + async def _get_channel(self): ch = await self.create_dm() return ch @@ -205,10 +219,11 @@ class Member(discord.abc.Messageable, _BaseUser): self.status = try_enum(Status, data['status']) self.activity = create_activity(data.get('game')) - u = self._user - u.name = user.get('username', u.name) - u.avatar = user.get('avatar', u.avatar) - u.discriminator = user.get('discriminator', u.discriminator) + if len(user) > 1: + u = self._user + u.name = user.get('username', u.name) + u.avatar = user.get('avatar', u.avatar) + u.discriminator = user.get('discriminator', u.discriminator) def _copy(self): c = copy.copy(self) -- cgit v1.2.3