Default MemberCacheFlags based on intents
This commit is contained in:
parent
bf8ca58996
commit
8d5c05ed20
@ -147,6 +147,8 @@ class Client:
|
||||
.. versionadded:: 1.5
|
||||
member_cache_flags: :class:`MemberCacheFlags`
|
||||
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
|
||||
fetch_offline_members: :class:`bool`
|
||||
|
@ -754,6 +754,32 @@ class MemberCacheFlags(BaseFlags):
|
||||
"""
|
||||
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):
|
||||
if self.online and not intents.presences:
|
||||
raise ValueError('MemberCacheFlags.online requires Intents.presences enabled')
|
||||
|
@ -144,12 +144,12 @@ class ConnectionState:
|
||||
|
||||
cache_flags = options.get('member_cache_flags', None)
|
||||
if cache_flags is None:
|
||||
cache_flags = MemberCacheFlags.all()
|
||||
cache_flags = MemberCacheFlags.from_intents(intents)
|
||||
else:
|
||||
if not isinstance(cache_flags, MemberCacheFlags):
|
||||
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._activity = activity
|
||||
|
Loading…
x
Reference in New Issue
Block a user