From 887cfcc43f7a9ef66d37fa920ce705cf0bbff0d1 Mon Sep 17 00:00:00 2001 From: dolfies Date: Mon, 10 Apr 2023 11:32:40 -0400 Subject: [PATCH] Implement DAC eligibility and joining through guilds --- discord/guild.py | 45 ++++++++++++++++++++++++++++++++++++++++++ discord/http.py | 6 ++++++ discord/types/guild.py | 4 ++++ 3 files changed, 55 insertions(+) diff --git a/discord/guild.py b/discord/guild.py index 2cce537c3..adc9b0e31 100644 --- a/discord/guild.py +++ b/discord/guild.py @@ -4893,3 +4893,48 @@ class Guild(Hashable): ) return AutoModRule(data=data, guild=self, state=self._state) + + async def admin_community_eligibility(self) -> bool: + """|coro| + + Checks if the user is eligible to join the Discord Admin Community through the guild. + + .. versionadded:: 2.1 + + Raises + ------- + Forbidden + You do not have permissions to join through the guild. + HTTPException + Checking eligibility failed. + + Returns + -------- + :class:`bool` + Whether the user is eligible to join the Discord Admin Community through the guild. + """ + data = await self._state.http.get_admin_server_eligibility(self.id) + return data['eligible_for_admin_server'] + + async def join_admin_community(self) -> Guild: + """|coro| + + Joins the Discord Admin Community through the guild. + You should check your eligibility with :meth:`admin_community_eligibility` before calling this. + + .. versionadded:: 2.1 + + Raises + ------- + Forbidden + You do not have permissions to join through the guild. + HTTPException + Joining failed. + + Returns + -------- + :class:`Guild` + The Discord Admin Community guild. + """ + data = await self._state.http.join_admin_server(self.id) + return Guild(state=self._state, data=data) diff --git a/discord/http.py b/discord/http.py index e4d83e815..e948539b3 100644 --- a/discord/http.py +++ b/discord/http.py @@ -2628,6 +2628,12 @@ class HTTPClient: reason=reason, ) + def get_admin_server_eligibility(self, guild_id: Snowflake) -> Response[guild.AdminServerEligibility]: + return self.request(Route('GET', '/guilds/{guild_id}/admin-server-eligibility', guild_id=guild_id)) + + def join_admin_server(self, guild_id: Snowflake) -> Response[guild.Guild]: + return self.request(Route('POST', '/guilds/{guild_id}/join-admin-server', guild_id=guild_id)) + # Relationships def get_relationships(self) -> Response[List[user.Relationship]]: diff --git a/discord/types/guild.py b/discord/types/guild.py index d61d83380..c1a27ddb1 100644 --- a/discord/types/guild.py +++ b/discord/types/guild.py @@ -165,6 +165,10 @@ class RolePositionUpdate(_RolePositionRequired, total=False): position: Optional[Snowflake] +class AdminServerEligibility(TypedDict): + eligible_for_admin_server: bool + + class SupplementalGuild(UnavailableGuild): embedded_activities: list voice_states: List[GuildVoiceState]