diff --git a/discord/guild.py b/discord/guild.py index e1f4b80b7..2cda088d4 100644 --- a/discord/guild.py +++ b/discord/guild.py @@ -3058,7 +3058,7 @@ class Guild(Hashable): """ await self._state.http.create_integration(self.id, type, id, reason=reason) - async def integrations(self, *, with_applications=True) -> List[Integration]: + async def integrations(self, *, has_commands: bool = False) -> List[Integration]: """|coro| Returns a list of all integrations attached to the guild. @@ -3069,8 +3069,10 @@ class Guild(Hashable): Parameters ----------- - with_applications: :class:`bool` - Whether to include applications. + has_commands: :class:`bool` + Whether to only return integrations that have commands registered. + + .. versionadded:: 2.1 Raises ------- @@ -3084,12 +3086,10 @@ class Guild(Hashable): List[:class:`Integration`] The list of integrations that are attached to the guild. """ - data = await self._state.http.get_all_integrations(self.id, with_applications) + data = await self._state.http.get_all_integrations(self.id, has_commands=has_commands) def convert(d): factory, _ = _integration_factory(d['type']) - if factory is None: - raise InvalidData('Unknown integration type {type!r} for integration ID {id}'.format_map(d)) return factory(guild=self, data=d) return [convert(d) for d in data] diff --git a/discord/http.py b/discord/http.py index 22a28fcd0..04513ee80 100644 --- a/discord/http.py +++ b/discord/http.py @@ -2144,14 +2144,22 @@ class HTTPClient: return self.request(Route('PUT', '/guilds/{guild_id}/requests/@me', guild_id=guild_id), json=payload) def get_all_integrations( - self, guild_id: Snowflake, include_applications: bool = True + self, + guild_id: Snowflake, + *, + include_applications: bool = True, + include_role_connections_metadata: bool = False, + has_commands: bool = False, ) -> Response[List[integration.Integration]]: - r = Route('GET', '/guilds/{guild_id}/integrations', guild_id=guild_id) params = { 'include_applications': str(include_applications).lower(), } + if include_role_connections_metadata: + params['include_role_connections_metadata'] = 'true' + if has_commands: + params['has_commands'] = 'true' - return self.request(r, params=params) + return self.request(Route('GET', '/guilds/{guild_id}/integrations', guild_id=guild_id), params=params) def create_integration( self, guild_id: Snowflake, type: integration.IntegrationType, id: int, *, reason: Optional[str] = None diff --git a/discord/types/integration.py b/discord/types/integration.py index 299f3624a..c11c81894 100644 --- a/discord/types/integration.py +++ b/discord/types/integration.py @@ -27,7 +27,7 @@ from __future__ import annotations from typing import List, Literal, Optional, TypedDict, Union from typing_extensions import NotRequired -from .application import IntegrationApplication +from .application import IntegrationApplication, RoleConnectionMetadata from .guild import Guild from .snowflake import Snowflake from .user import User @@ -71,6 +71,7 @@ class StreamIntegration(BaseIntegration): class BotIntegration(BaseIntegration): application: IntegrationApplication scopes: List[str] + role_connections_metadata: NotRequired[List[RoleConnectionMetadata]] class ConnectionIntegration(BaseIntegration):