Default MemberCacheFlags based on intents

This commit is contained in:
Rapptz 2020-09-15 01:59:51 -04:00
parent bf8ca58996
commit 8d5c05ed20
3 changed files with 30 additions and 2 deletions

View File

@ -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`

View File

@ -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')

View File

@ -144,7 +144,7 @@ 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))