Browse Source

Default MemberCacheFlags based on intents

pull/5849/head
Rapptz 5 years ago
parent
commit
8d5c05ed20
  1. 2
      discord/client.py
  2. 26
      discord/flags.py
  3. 4
      discord/state.py

2
discord/client.py

@ -147,6 +147,8 @@ class Client:
.. versionadded:: 1.5 .. versionadded:: 1.5
member_cache_flags: :class:`MemberCacheFlags` member_cache_flags: :class:`MemberCacheFlags`
Allows for finer control over how the library caches members. Allows for finer control over how the library caches members.
If not given, defaults to cache as much as possible is with the
currently selected intents.
.. versionadded:: 1.5 .. versionadded:: 1.5
fetch_offline_members: :class:`bool` fetch_offline_members: :class:`bool`

26
discord/flags.py

@ -754,6 +754,32 @@ class MemberCacheFlags(BaseFlags):
""" """
return 4 return 4
@classmethod
def from_intents(cls, intents):
"""A factory method that creates a :class:`MemberCacheFlags` based on
the currently selected :class:`Intents`.
Parameters
------------
intents: :class:`Intents`
The intents to select from.
Returns
---------
:class:`MemberCacheFlags`
The resulting member cache flags.
"""
self = cls.none()
if intents.members:
self.joined = True
if intents.presences:
self.online = True
if intents.voice_states:
self.voice = True
return self
def _verify_intents(self, intents): def _verify_intents(self, intents):
if self.online and not intents.presences: if self.online and not intents.presences:
raise ValueError('MemberCacheFlags.online requires Intents.presences enabled') raise ValueError('MemberCacheFlags.online requires Intents.presences enabled')

4
discord/state.py

@ -144,12 +144,12 @@ class ConnectionState:
cache_flags = options.get('member_cache_flags', None) cache_flags = options.get('member_cache_flags', None)
if cache_flags is None: if cache_flags is None:
cache_flags = MemberCacheFlags.all() cache_flags = MemberCacheFlags.from_intents(intents)
else: else:
if not isinstance(cache_flags, MemberCacheFlags): if not isinstance(cache_flags, MemberCacheFlags):
raise TypeError('member_cache_flags parameter must be MemberCacheFlags not %r' % type(cache_flags)) raise TypeError('member_cache_flags parameter must be MemberCacheFlags not %r' % type(cache_flags))
cache_flags._verify_intents(intents) cache_flags._verify_intents(intents)
self._member_cache_flags = cache_flags self._member_cache_flags = cache_flags
self._activity = activity self._activity = activity

Loading…
Cancel
Save