Browse Source

Cache and update RequiredActionType

pull/10109/head
dolfies 2 years ago
parent
commit
c77ffa9c79
  1. 11
      discord/client.py
  2. 12
      discord/enums.py
  3. 10
      discord/state.py
  4. 41
      docs/api.rst

11
discord/client.py

@ -100,7 +100,7 @@ if TYPE_CHECKING:
from .voice_client import VoiceProtocol from .voice_client import VoiceProtocol
from .settings import GuildSettings from .settings import GuildSettings
from .billing import BillingAddress from .billing import BillingAddress
from .enums import PaymentGateway from .enums import PaymentGateway, RequiredActionType
from .metadata import MetadataObject from .metadata import MetadataObject
from .types.snowflake import Snowflake as _Snowflake from .types.snowflake import Snowflake as _Snowflake
@ -337,6 +337,15 @@ class Client:
"""Optional[:class:`.ClientUser`]: Represents the connected client. ``None`` if not logged in.""" """Optional[:class:`.ClientUser`]: Represents the connected client. ``None`` if not logged in."""
return self._connection.user return self._connection.user
@property
def required_action(self) -> Optional[RequiredActionType]:
"""Optional[:class:`.RequiredActionType`]: The required action for the current user.
A required action is something Discord requires you to do to continue using your account.
.. versionadded:: 2.0
"""
return self._connection.required_action
@property @property
def guilds(self) -> Sequence[Guild]: def guilds(self) -> Sequence[Guild]:
"""Sequence[:class:`.Guild`]: The guilds that the connected client is a member of.""" """Sequence[:class:`.Guild`]: The guilds that the connected client is a member of."""

12
discord/enums.py

@ -800,12 +800,16 @@ class UnavailableGuildType(Enum):
class RequiredActionType(Enum): class RequiredActionType(Enum):
verify_phone = 'REQUIRE_VERIFIED_PHONE'
verify_email = 'REQUIRE_VERIFIED_EMAIL'
complete_captcha = 'REQUIRE_CAPTCHA'
update_agreements = 'AGREEMENTS' update_agreements = 'AGREEMENTS'
acknowledge_tos_update = 'TOS_UPDATE_ACKNOWLEDGMENT' acknowledge_tos_update = 'TOS_UPDATE_ACKNOWLEDGMENT'
none = None complete_captcha = 'REQUIRE_CAPTCHA'
verify_email = 'REQUIRE_VERIFIED_EMAIL'
reverify_email = 'REQUIRE_REVERIFIED_EMAIL'
verify_phone = 'REQUIRE_VERIFIED_PHONE'
reverify_phone = 'REQUIRE_REVERIFIED_PHONE'
reverify_email_or_verify_phone = 'REQUIRE_REVERIFIED_EMAIL_OR_VERIFIED_PHONE'
verify_email_or_reverify_phone = 'REQUIRE_VERIFIED_EMAIL_OR_REVERIFIED_PHONE'
reverify_email_or_reverify_phone = 'REQUIRE_REVERIFIED_EMAIL_OR_REVERIFIED_PHONE'
class InviteTarget(Enum): class InviteTarget(Enum):

10
discord/state.py

@ -603,6 +603,7 @@ class ConnectionState:
self.api_code_version: int = 0 self.api_code_version: int = 0
self.session_type: Optional[str] = None self.session_type: Optional[str] = None
self.auth_session_id: Optional[str] = None self.auth_session_id: Optional[str] = None
self.required_action: Optional[RequiredActionType] = None
self._emojis: Dict[int, Emoji] = {} self._emojis: Dict[int, Emoji] = {}
self._stickers: Dict[int, GuildSticker] = {} self._stickers: Dict[int, GuildSticker] = {}
self._guilds: Dict[int, Guild] = {} self._guilds: Dict[int, Guild] = {}
@ -1049,9 +1050,7 @@ class ConnectionState:
self.auth_session_id = data.get('auth_session_id_hash') self.auth_session_id = data.get('auth_session_id_hash')
self.connections = {c['id']: Connection(state=self, data=c) for c in data.get('connected_accounts', [])} 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.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
if 'required_action' in data:
self.parse_user_required_action_update(data)
if 'sessions' in data: if 'sessions' in data:
self.parse_sessions_replace(data['sessions'], from_ready=True) self.parse_sessions_replace(data['sessions'], from_ready=True)
@ -1314,8 +1313,9 @@ class ConnectionState:
settings = GuildSettings(data=data, state=self) settings = GuildSettings(data=data, state=self)
self.dispatch('guild_settings_update', old_settings, settings) self.dispatch('guild_settings_update', old_settings, settings)
def parse_user_required_action_update(self, data: Union[gw.RequiredActionEvent, gw.ReadyEvent]) -> None: def parse_user_required_action_update(self, data: gw.RequiredActionEvent) -> None:
required_action = try_enum(RequiredActionType, data['required_action']) # type: ignore required_action = try_enum(RequiredActionType, data['required_action']) if data['required_action'] else None
self.required_action = required_action
self.dispatch('required_action_update', required_action) self.dispatch('required_action_update', required_action)
def parse_user_connections_update(self, data: Union[gw.ConnectionEvent, gw.PartialConnectionEvent]) -> None: def parse_user_connections_update(self, data: Union[gw.ConnectionEvent, gw.PartialConnectionEvent]) -> None:

41
docs/api.rst

@ -446,12 +446,12 @@ Client
.. function:: on_required_action_update(action) .. function:: on_required_action_update(action)
Called when Discord requires you to do something to verify your account. Called when Discord requires you to do something to continue using your account.
.. versionadded:: 2.0 .. versionadded:: 2.0
:param action: The action required. :param action: The action required. If ``None``, then no further action is required.
:type action: :class:`RequiredActionType` :type action: Optional[:class:`RequiredActionType`]
Billing Billing
~~~~~~~ ~~~~~~~
@ -5066,25 +5066,42 @@ of :class:`enum.Enum`.
.. versionadded:: 2.0 .. versionadded:: 2.0
.. attribute:: verify_phone .. attribute:: update_agreements
The user must update their agreement of Discord's terms of service and privacy policy.
This does not limit the user from using Discord.
.. attribute:: complete_captcha
The user must verify their phone number. The user must complete a captcha.
.. attribute:: verify_email .. attribute:: verify_email
The user must verify their email address. The user must add and verify an email address to their account.
.. attribute:: complete_captcha .. attribute:: reverify_email
The user must complete a captcha. The user must reverify their existing email address.
.. attribute:: update_agreements .. attribute:: verify_phone
The user must update their agreement of Discord's terms of service and privacy policy. The user must add a phone number to their account.
.. attribute:: none .. attribute:: reverify_phone
The user must reverify their existing phone number.
.. attribute:: reverify_email_or_verify_phone
The user must reverify their existing email address or add a phone number to their account.
.. attribute:: verify_email_or_reverify_phone
The user must add and verify an email address to their account or reverify their existing phone number.
.. attribute:: reverify_email_or_reverify_phone
The user does not need to take any more actions. The user must reverify their existing email address or reverify their existing phone number.
.. class:: ConnectionType .. class:: ConnectionType

Loading…
Cancel
Save