aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRapptz <[email protected]>2020-09-15 01:59:51 -0400
committerRapptz <[email protected]>2020-09-23 03:21:21 -0400
commit8d5c05ed20af0598750d61c5b9c62f4d37e4aeb1 (patch)
tree01f4ef33986df7c47d7676b111164f63a7e2a347
parentAdd a special exception for required privileged intents (diff)
downloaddiscord.py-8d5c05ed20af0598750d61c5b9c62f4d37e4aeb1.tar.xz
discord.py-8d5c05ed20af0598750d61c5b9c62f4d37e4aeb1.zip
Default MemberCacheFlags based on intents
-rw-r--r--discord/client.py2
-rw-r--r--discord/flags.py26
-rw-r--r--discord/state.py4
3 files changed, 30 insertions, 2 deletions
diff --git a/discord/client.py b/discord/client.py
index 6be3e982..e44e5e21 100644
--- a/discord/client.py
+++ b/discord/client.py
@@ -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`
diff --git a/discord/flags.py b/discord/flags.py
index a204937c..4607b2ce 100644
--- a/discord/flags.py
+++ b/discord/flags.py
@@ -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')
diff --git a/discord/state.py b/discord/state.py
index db47059b..22bfdcca 100644
--- a/discord/state.py
+++ b/discord/state.py
@@ -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