diff --git a/discord/client.py b/discord/client.py index 437c06011..6512cb734 100644 --- a/discord/client.py +++ b/discord/client.py @@ -504,6 +504,14 @@ class Client: """ return [read_state for group in self._connection._read_states.values() for read_state in group.values()] + @property + def friend_suggestion_count(self) -> int: + """:class:`int`: The number of friend suggestions that the connected client has. + + .. versionadded:: 2.1 + """ + return self._connection.friend_suggestion_count + def is_ready(self) -> bool: """:class:`bool`: Specifies if the client's internal cache is ready for use.""" return self._ready is not MISSING and self._ready.is_set() diff --git a/discord/state.py b/discord/state.py index a22b6c8f0..a9a4038f2 100644 --- a/discord/state.py +++ b/discord/state.py @@ -611,6 +611,7 @@ class ConnectionState: self.session_type: Optional[str] = None self.auth_session_id: Optional[str] = None self.required_action: Optional[RequiredActionType] = None + self.friend_suggestion_count: int = 0 self._emojis: Dict[int, Emoji] = {} self._stickers: Dict[int, GuildSticker] = {} self._guilds: Dict[int, Guild] = {} @@ -1057,6 +1058,7 @@ class ConnectionState: self.connections = {c['id']: Connection(state=self, data=c) for c in data.get('connected_accounts', [])} self.pending_payments = {int(p['id']): Payment(state=self, data=p) for p in data.get('pending_payments', [])} self.required_action = try_enum(RequiredActionType, data['required_action']) if 'required_action' in data else None + self.friend_suggestion_count = data.get('friend_suggestion_count', 0) if 'sessions' in data: self.parse_sessions_replace(data['sessions'], from_ready=True) @@ -2747,9 +2749,11 @@ class ConnectionState: self.dispatch('relationship_update', old, new) def parse_friend_suggestion_create(self, data: gw.FriendSuggestionCreateEvent): + self.friend_suggestion_count += 1 self.dispatch('friend_suggestion_add', FriendSuggestion(state=self, data=data)) def parse_friend_suggestion_delete(self, data: gw.FriendSuggestionDeleteEvent): + self.friend_suggestion_count -= 1 user_id = int(data['suggested_user_id']) user = self.get_user(user_id) if user: diff --git a/discord/types/gateway.py b/discord/types/gateway.py index 18257d297..78153d2c8 100644 --- a/discord/types/gateway.py +++ b/discord/types/gateway.py @@ -130,6 +130,7 @@ class ReadySupplementalEvent(TypedDict): guilds: List[SupplementalGuild] merged_members: List[List[MemberWithUser]] merged_presences: MergedPresences + lazy_private_channels: List[Union[DMChannel, GroupDMChannel]] class VersionedReadState(TypedDict): @@ -140,6 +141,7 @@ class VersionedReadState(TypedDict): NoEvent = Literal[None] + MessageCreateEvent = Message