diff --git a/discord/server.py b/discord/server.py index 5b6232926..c787a6408 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 be73c4fb1..644f9a179 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):