Make more things into properties.
A lot of the expensive getters were transformed into cached properties instead. A lot of things that were properties were transformed into properties as well.
This commit is contained in:
parent
f484a5c023
commit
de1c74a399
@ -131,24 +131,25 @@ class Message(object):
|
|||||||
self.mentions.append(member)
|
self.mentions.append(member)
|
||||||
|
|
||||||
if self.server is not None:
|
if self.server is not None:
|
||||||
channel_mentions = self.get_raw_channel_mentions()
|
for mention in self.raw_channel_mentions:
|
||||||
for mention in channel_mentions:
|
|
||||||
channel = utils.find(lambda m: m.id == mention, self.server.channels)
|
channel = utils.find(lambda m: m.id == mention, self.server.channels)
|
||||||
if channel is not None:
|
if channel is not None:
|
||||||
self.channel_mentions.append(channel)
|
self.channel_mentions.append(channel)
|
||||||
|
|
||||||
def get_raw_mentions(self):
|
@utils.cached_property
|
||||||
"""Returns an array of user IDs matched with the syntax of
|
def raw_mentions(self):
|
||||||
<@user_id> in the message content.
|
"""A property that returns an array of user IDs matched with
|
||||||
|
the syntax of <@user_id> in the message content.
|
||||||
|
|
||||||
This allows you receive the user IDs of mentioned users
|
This allows you receive the user IDs of mentioned users
|
||||||
even in a private message context.
|
even in a private message context.
|
||||||
"""
|
"""
|
||||||
return re.findall(r'<@(\d+)>', self.content)
|
return re.findall(r'<@(\d+)>', self.content)
|
||||||
|
|
||||||
def get_raw_channel_mentions(self):
|
@utils.cached_property
|
||||||
"""Returns an array of channel IDs matched with the syntax of
|
def raw_channel_mentions(self):
|
||||||
<#channel_id> in the message content.
|
"""A property that returns an array of channel IDs matched with
|
||||||
|
the syntax of <#channel_id> in the message content.
|
||||||
|
|
||||||
This allows you receive the channel IDs of mentioned users
|
This allows you receive the channel IDs of mentioned users
|
||||||
even in a private message context.
|
even in a private message context.
|
||||||
@ -168,6 +169,3 @@ class Message(object):
|
|||||||
found = utils.find(lambda m: m.id == self.author.id, self.server.members)
|
found = utils.find(lambda m: m.id == self.author.id, self.server.members)
|
||||||
if found is not None:
|
if found is not None:
|
||||||
self.author = found
|
self.author = found
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -81,6 +81,7 @@ class Role(EqualityComparable):
|
|||||||
if 'everyone' in kwargs:
|
if 'everyone' in kwargs:
|
||||||
self._is_everyone = kwargs['everyone']
|
self._is_everyone = kwargs['everyone']
|
||||||
|
|
||||||
|
@property
|
||||||
def is_everyone(self):
|
def is_everyone(self):
|
||||||
"""Checks if the role is the @everyone role."""
|
"""Checks if the role is the @everyone role."""
|
||||||
return self._is_everyone
|
return self._is_everyone
|
||||||
|
@ -108,12 +108,11 @@ class Server(EqualityComparable):
|
|||||||
self.unavailable = guild.get('unavailable', False)
|
self.unavailable = guild.get('unavailable', False)
|
||||||
self.id = guild['id']
|
self.id = guild['id']
|
||||||
self.roles = [Role(everyone=(self.id == r['id']), **r) for r in guild['roles']]
|
self.roles = [Role(everyone=(self.id == r['id']), **r) for r in guild['roles']]
|
||||||
default_role = self.get_default_role()
|
|
||||||
|
|
||||||
owner_id = guild['owner_id']
|
owner_id = guild['owner_id']
|
||||||
|
|
||||||
for data in guild.get('members', []):
|
for data in guild.get('members', []):
|
||||||
roles = [default_role]
|
roles = [self.default_role]
|
||||||
for role_id in data['roles']:
|
for role_id in data['roles']:
|
||||||
role = utils.find(lambda r: r.id == role_id, self.roles)
|
role = utils.find(lambda r: r.id == role_id, self.roles)
|
||||||
if role is not None:
|
if role is not None:
|
||||||
@ -149,13 +148,15 @@ class Server(EqualityComparable):
|
|||||||
for obj in guild.get('voice_states', []):
|
for obj in guild.get('voice_states', []):
|
||||||
self._update_voice_state(obj)
|
self._update_voice_state(obj)
|
||||||
|
|
||||||
def get_default_role(self):
|
@utils.cached_property
|
||||||
|
def default_role(self):
|
||||||
"""Gets the @everyone role that all members have by default."""
|
"""Gets the @everyone role that all members have by default."""
|
||||||
return utils.find(lambda r: r.is_everyone(), self.roles)
|
return utils.find(lambda r: r.is_everyone, self.roles)
|
||||||
|
|
||||||
def get_default_channel(self):
|
@utils.cached_property
|
||||||
|
def default_channel(self):
|
||||||
"""Gets the default :class:`Channel` for the server."""
|
"""Gets the default :class:`Channel` for the server."""
|
||||||
return utils.find(lambda c: c.is_default_channel(), self.channels)
|
return utils.find(lambda c: c.is_default, self.channels)
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def icon_url(self):
|
def icon_url(self):
|
||||||
|
@ -169,7 +169,7 @@ class ConnectionState:
|
|||||||
def parse_guild_member_add(self, data):
|
def parse_guild_member_add(self, data):
|
||||||
server = self._get_server(data.get('guild_id'))
|
server = self._get_server(data.get('guild_id'))
|
||||||
member = Member(server=server, deaf=False, mute=False, **data)
|
member = Member(server=server, deaf=False, mute=False, **data)
|
||||||
member.roles.append(server.get_default_role())
|
member.roles.append(server.default_role)
|
||||||
server.members.append(member)
|
server.members.append(member)
|
||||||
self.dispatch('member_join', member)
|
self.dispatch('member_join', member)
|
||||||
|
|
||||||
@ -195,7 +195,7 @@ class ConnectionState:
|
|||||||
member.name = user['username']
|
member.name = user['username']
|
||||||
member.discriminator = user['discriminator']
|
member.discriminator = user['discriminator']
|
||||||
member.avatar = user['avatar']
|
member.avatar = user['avatar']
|
||||||
member.roles = [server.get_default_role()]
|
member.roles = [server.default_role]
|
||||||
# update the roles
|
# update the roles
|
||||||
for role in server.roles:
|
for role in server.roles:
|
||||||
if role.id in data['roles']:
|
if role.id in data['roles']:
|
||||||
|
@ -31,6 +31,21 @@ from base64 import b64encode
|
|||||||
import asyncio
|
import asyncio
|
||||||
import json
|
import json
|
||||||
|
|
||||||
|
|
||||||
|
class cached_property:
|
||||||
|
def __init__(self, function):
|
||||||
|
self.function = function
|
||||||
|
self.__doc__ = getattr(function, '__doc__')
|
||||||
|
|
||||||
|
def __get__(self, instance, owner):
|
||||||
|
if instance is None:
|
||||||
|
return self
|
||||||
|
|
||||||
|
value = self.function(instance)
|
||||||
|
setattr(instance, self.function.__name__, value)
|
||||||
|
|
||||||
|
return value
|
||||||
|
|
||||||
def parse_time(timestamp):
|
def parse_time(timestamp):
|
||||||
if timestamp:
|
if timestamp:
|
||||||
return datetime.datetime(*map(int, re_split(r'[^\d]', timestamp.replace('+00:00', ''))))
|
return datetime.datetime(*map(int, re_split(r'[^\d]', timestamp.replace('+00:00', ''))))
|
||||||
|
Loading…
x
Reference in New Issue
Block a user