diff --git a/discord/client.py b/discord/client.py index fa096c984..b9ca6c0ee 100644 --- a/discord/client.py +++ b/discord/client.py @@ -81,10 +81,6 @@ class Client: Indicates if :meth:`login` should cache the authentication tokens. Defaults to ``True``. The method in which the cache is written is done by writing to disk to a temporary directory. - request_offline : Optional[bool] - Indicates if the client should request the offline members of every server. - If this is False, then member lists will not store offline members if the - number of members in the server is greater than 250. Defaults to ``True``. Attributes ----------- @@ -121,7 +117,6 @@ class Client: self.loop = asyncio.get_event_loop() if loop is None else loop self._listeners = [] self.cache_auth = options.get('cache_auth', True) - self.request_offline = options.get('request_offline', True) max_messages = options.get('max_messages') if max_messages is None or max_messages < 100: @@ -396,10 +391,7 @@ class Client: func(data) if is_ready: - if self.request_offline: - utils.create_task(self._fill_offline(), loop=self.loop) - else: - self.dispatch('ready') + utils.create_task(self._fill_offline(), loop=self.loop) @asyncio.coroutine def _make_websocket(self, initial=True): @@ -1258,9 +1250,8 @@ class Client: """|coro| Requests previously offline members from the server to be filled up - into the :attr:`Server.members` cache. If the client was initialised - with ``request_offline`` as ``True`` then calling this function would - not do anything. + into the :attr:`Server.members` cache. This function is usually not + called. When the client logs on and connects to the websocket, Discord does not provide the library with offline members if the number of members diff --git a/discord/server.py b/discord/server.py index 07ccbbdb0..dfad0761e 100644 --- a/discord/server.py +++ b/discord/server.py @@ -138,7 +138,11 @@ class Server(Hashable): def _from_data(self, guild): # according to Stan, this is always available even if the guild is unavailable - self._member_count = guild['member_count'] + # I don't have this guarantee when someone updates the server. + member_count = guild.get('member_count', None) + if member_count: + self._member_count = member_count + self.name = guild.get('name') self.large = guild.get('large', self._member_count > 250) self.region = guild.get('region') diff --git a/discord/state.py b/discord/state.py index bcb90e728..f016cb2d7 100644 --- a/discord/state.py +++ b/discord/state.py @@ -175,10 +175,7 @@ class ConnectionState: member_id = user['id'] member = server.get_member(member_id) if member is None: - # if the member is not in cache then it's being "lazily" - # loaded due to large_threshold so we need to add it into - # the cache and then update that instead. - member = self._add_member(server, data) + member = self._make_member(server, data) old_member = copy.copy(member) member.status = data.get('status') @@ -232,7 +229,7 @@ class ConnectionState: self.dispatch('channel_create', channel) - def _add_member(self, server, data): + def _make_member(self, server, data): roles = [server.default_role] for roleid in data.get('roles', []): role = utils.get(server.roles, id=roleid) @@ -240,13 +237,12 @@ class ConnectionState: roles.append(role) data['roles'] = roles - member = Member(server=server, **data) - server._add_member(member) - return member + return Member(server=server, **data) def parse_guild_member_add(self, data): server = self._get_server(data.get('guild_id')) - member = self._add_member(server, data) + member = self._make_member(server, data) + server._add_member(member) server._member_count += 1 self.dispatch('member_join', member) @@ -382,7 +378,8 @@ class ConnectionState: server = self._get_server(data.get('guild_id')) members = data.get('members', []) for member in members: - self._add_member(server, member) + m = self._make_member(server, member) + server._add_member(m) # if the owner is offline, server.owner is potentially None # therefore we should check if this chunk makes it point to a valid diff --git a/docs/api.rst b/docs/api.rst index a71408959..111a1ee11 100644 --- a/docs/api.rst +++ b/docs/api.rst @@ -105,6 +105,10 @@ to handle it, which defaults to print a traceback and ignore the exception. Called when the client is done preparing the data received from Discord. Usually after login is successful and the :attr:`Client.servers` and co. are filled up. + .. warning:: + + This function is not guaranteed to be the first event called. + .. function:: on_error(event, \*args, \*\*kwargs) Usually when an event raises an uncaught exception, a traceback is