From fe9db1506a849b7290495d14078fe8be4f960eca Mon Sep 17 00:00:00 2001 From: Alen Date: Tue, 13 Feb 2024 22:08:27 +0300 Subject: [PATCH 1/2] Add agree_guild_rules guild method --- discord/guild.py | 16 ++++++++++++++++ discord/http.py | 16 ++++++++++++++++ 2 files changed, 32 insertions(+) diff --git a/discord/guild.py b/discord/guild.py index 3100449655d3..783c8201e743 100644 --- a/discord/guild.py +++ b/discord/guild.py @@ -5332,3 +5332,19 @@ 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) + 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 From 76badbdda595dc98b3d60713a1b8e385a1af22cf Mon Sep 17 00:00:00 2001 From: Alen Date: Tue, 9 Apr 2024 14:09:25 +0300 Subject: [PATCH 2/2] empty "form_fields" list fix --- discord/guild.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/discord/guild.py b/discord/guild.py index 783c8201e743..c616b6eab491 100644 --- a/discord/guild.py +++ b/discord/guild.py @@ -5347,4 +5347,6 @@ async def agree_guild_rules(self, url: str | Invite): 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)