aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRapptz <[email protected]>2016-02-13 22:08:13 -0500
committerRapptz <[email protected]>2016-02-13 22:08:13 -0500
commit7b135725bc7d212253dc2ddc7750d8be3f48194a (patch)
tree3a849706b51dac1ee58bf6bdaeb45ee1bd60e3a9
parent[commands] Raise RuntimeError instead of StopIteration. (diff)
downloaddiscord.py-7b135725bc7d212253dc2ddc7750d8be3f48194a.tar.xz
discord.py-7b135725bc7d212253dc2ddc7750d8be3f48194a.zip
Add Server.member_count property for actual member count.
This will always work regardless of chunking or not.
-rw-r--r--discord/server.py9
-rw-r--r--discord/state.py2
2 files changed, 10 insertions, 1 deletions
diff --git a/discord/server.py b/discord/server.py
index 5b623292..c787a640 100644
--- a/discord/server.py
+++ b/discord/server.py
@@ -86,7 +86,7 @@ class Server(Hashable):
__slots__ = [ 'afk_timeout', 'afk_channel', '_members', '_channels', 'icon',
'name', 'id', 'owner', 'unavailable', 'name', 'me', 'region',
- '_default_role', '_default_channel', 'roles' ]
+ '_default_role', '_default_channel', 'roles', '_member_count']
def __init__(self, **kwargs):
self._channels = {}
@@ -136,6 +136,8 @@ class Server(Hashable):
return before, member
def _from_data(self, guild):
+ # according to Stan, this is always available even if the guild is unavailable
+ self._member_count = guild['member_count']
self.name = guild.get('name')
self.region = guild.get('region')
try:
@@ -204,3 +206,8 @@ class Server(Hashable):
if self.icon is None:
return ''
return 'https://cdn.discordapp.com/icons/{0.id}/{0.icon}.jpg'.format(self)
+
+ @property
+ def member_count(self):
+ """Returns the true member count regardless of it being loaded fully or not."""
+ return self._member_count
diff --git a/discord/state.py b/discord/state.py
index be73c4fb..644f9a17 100644
--- a/discord/state.py
+++ b/discord/state.py
@@ -204,6 +204,7 @@ class ConnectionState:
data['roles'] = roles
member = Member(server=server, **data)
server._add_member(member)
+ server._member_count += 1
self.dispatch('member_join', member)
def parse_guild_member_remove(self, data):
@@ -213,6 +214,7 @@ class ConnectionState:
member = server.get_member(user_id)
if member is not None:
server._remove_member(member)
+ server._member_count -= 1
self.dispatch('member_remove', member)
def parse_guild_member_update(self, data):