diff --git a/discord/guild.py b/discord/guild.py index 3100449655d3..c616b6eab491 100644 --- a/discord/guild.py +++ b/discord/guild.py @@ -5332,3 +5332,21 @@ async def directory_broadcast_eligibility(self) -> bool: """ data = await self._state.http.get_directory_broadcast_info(self.id, 1) return data['can_broadcast'] + + async def agree_guild_rules(self, url: str | Invite): + resolved = utils.resolve_invite(url) + + data = await self._state.http.get_invite( + resolved.code, + with_counts=True, + input_value=resolved.code if isinstance(url, Invite) else url, + ) + if isinstance(url, Invite): + invite = url + else: + invite = Invite.from_incomplete(state=self._state, data=data) + + rules_form = await self._state.http.get_guild_rules_form(self.id, invite.id) + if not rules_form.get('form_fields'): + return + await self._state.http.agree_guild_rules(self.id, rules_form) diff --git a/discord/http.py b/discord/http.py index 06f251df89e8..af518bb6baf7 100644 --- a/discord/http.py +++ b/discord/http.py @@ -4685,3 +4685,19 @@ def join_hub(self, email: str, guild_id: Snowflake, code: str) -> Response[hub.E def join_hub_token(self, token: str) -> Response[hub.EmailDomainVerification]: payload = {'token': token} return self.request(Route('POST', '/guilds/automations/email-domain-lookup/verify'), json=payload) + + async def get_guild_rules_form(self, guild_id: Snowflake, invite_id: str): + params = { + "with_guild": "false", + "invite_code": invite_id, + } + return await self.request(Route('GET', '/guilds/{guild_id}/member-verification', guild_id=guild_id), params=params) + + async def agree_guild_rules(self, guild_id: Snowflake, rules_form: dict): + form_fields = rules_form["form_fields"][0].copy() + form_fields["response"] = True + payload = { + "version": rules_form["version"], + "form_fields": [form_fields], + } + return await self.request(Route('PUT', '/guilds/{guild_id}/requests/@me', guild_id=guild_id), json=payload) \ No newline at end of file