Browse Source

Add new EmbeddedActivityConfig fields

pull/10109/head
dolfies 2 years ago
parent
commit
aa51ced65c
  1. 68
      discord/application.py
  2. 34
      discord/http.py
  3. 20
      discord/types/application.py

68
discord/application.py

@ -440,16 +440,33 @@ class EmbeddedActivityConfig:
application: :class:`PartialApplication` application: :class:`PartialApplication`
The application that the configuration is for. The application that the configuration is for.
supported_platforms: List[:class:`EmbeddedActivityPlatform`] supported_platforms: List[:class:`EmbeddedActivityPlatform`]
A list of platforms that the application supports. A list of platforms that the activity supports.
orientation_lock_state: :class:`EmbeddedActivityOrientation` orientation_lock_state: :class:`EmbeddedActivityOrientation`
The mobile orientation lock state of the application. The mobile orientation lock state of the activity.
tablet_orientation_lock_state: :class:`EmbeddedActivityOrientation`
The mobile orientation lock state of the activity on tablets.
premium_tier_requirement: :class:`int`
The guild premium tier required to use the activity.
requires_age_gate: :class:`bool`
Whether the activity should be blocked from underage users.
shelf_rank: :class:`int`
The sorting rank of the activity in the activity shelf.
free_period_starts_at: Optional[:class:`datetime.datetime`]
When the activity's free availability period starts.
free_period_ends_at: Optional[:class:`datetime.datetime`]
When the activity's free availability period ends.
""" """
__slots__ = ( __slots__ = (
'application', 'application',
'supported_platforms', 'supported_platforms',
'orientation_lock_state', 'orientation_lock_state',
'premium_tier_level', 'tablet_orientation_lock_state',
'premium_tier_requirement',
'requires_age_gate',
'shelf_rank',
'free_period_starts_at',
'free_period_ends_at',
'_preview_video_asset_id', '_preview_video_asset_id',
) )
@ -457,6 +474,9 @@ class EmbeddedActivityConfig:
self.application: PartialApplication = application self.application: PartialApplication = application
self._update(data) self._update(data)
def __repr__(self) -> str:
return f'<EmbeddedActivityConfig supported_platforms={self.supported_platforms!r} orientation_lock_state={self.orientation_lock_state!r} tablet_orientation_lock_state={self.tablet_orientation_lock_state!r} premium_tier_requirement={self.premium_tier_requirement!r} requires_age_gate={self.requires_age_gate!r}>'
def _update(self, data: EmbeddedActivityConfigPayload) -> None: def _update(self, data: EmbeddedActivityConfigPayload) -> None:
self.supported_platforms: List[EmbeddedActivityPlatform] = [ self.supported_platforms: List[EmbeddedActivityPlatform] = [
try_enum(EmbeddedActivityPlatform, platform) for platform in data.get('supported_platforms', []) try_enum(EmbeddedActivityPlatform, platform) for platform in data.get('supported_platforms', [])
@ -464,22 +484,33 @@ class EmbeddedActivityConfig:
self.orientation_lock_state: EmbeddedActivityOrientation = try_enum( self.orientation_lock_state: EmbeddedActivityOrientation = try_enum(
EmbeddedActivityOrientation, data.get('default_orientation_lock_state', 0) EmbeddedActivityOrientation, data.get('default_orientation_lock_state', 0)
) )
self.premium_tier_level: int = data.get('activity_premium_tier_level', 0) self.tablet_orientation_lock_state: EmbeddedActivityOrientation = try_enum(
EmbeddedActivityOrientation, data.get('tablet_default_orientation_lock_state', 0)
)
self.premium_tier_requirement: int = data.get('premium_tier_requirement') or 0
self.requires_age_gate: bool = data.get('requires_age_gate', False)
self.shelf_rank: int = data.get('shelf_rank', 0)
self.free_period_starts_at: Optional[datetime] = utils.parse_time(data.get('free_period_starts_at'))
self.free_period_ends_at: Optional[datetime] = utils.parse_time(data.get('free_period_ends_at'))
self._preview_video_asset_id = utils._get_as_snowflake(data, 'preview_video_asset_id') self._preview_video_asset_id = utils._get_as_snowflake(data, 'preview_video_asset_id')
@property @property
def preview_video_asset(self) -> Optional[ApplicationAsset]: def preview_video_asset(self) -> Optional[ApplicationAsset]:
"""Optional[:class:`ApplicationAsset`]: The preview video asset of the embedded activity, if available.""" """Optional[:class:`ApplicationAsset`]: The preview video asset of the activity, if available."""
if self._preview_video_asset_id is None: if self._preview_video_asset_id is None:
return None return None
app = self.application return ApplicationAsset._from_embedded_activity_config(self.application, self._preview_video_asset_id)
return ApplicationAsset._from_embedded_activity_config(app, self._preview_video_asset_id)
async def edit( async def edit(
self, self,
*, *,
supported_platforms: List[EmbeddedActivityPlatform] = MISSING, supported_platforms: Collection[EmbeddedActivityPlatform] = MISSING,
orientation_lock_state: EmbeddedActivityOrientation = MISSING, orientation_lock_state: EmbeddedActivityOrientation = MISSING,
tablet_orientation_lock_state: EmbeddedActivityOrientation = MISSING,
requires_age_gate: bool = MISSING,
shelf_rank: int = MISSING,
free_period_starts_at: Optional[datetime] = MISSING,
free_period_ends_at: Optional[datetime] = MISSING,
preview_video_asset: Optional[Snowflake] = MISSING, preview_video_asset: Optional[Snowflake] = MISSING,
) -> None: ) -> None:
"""|coro| """|coro|
@ -489,11 +520,21 @@ class EmbeddedActivityConfig:
Parameters Parameters
----------- -----------
supported_platforms: List[:class:`EmbeddedActivityPlatform`] supported_platforms: List[:class:`EmbeddedActivityPlatform`]
A list of platforms that the application supports. A list of platforms that the activity supports.
orientation_lock_state: :class:`EmbeddedActivityOrientation` orientation_lock_state: :class:`EmbeddedActivityOrientation`
The mobile orientation lock state of the application. The mobile orientation lock state of the activity.
tablet_orientation_lock_state: :class:`EmbeddedActivityOrientation`
The mobile orientation lock state of the activity on tablets.
requires_age_gate: :class:`bool`
Whether the activity should be blocked from underage users.
shelf_rank: :class:`int`
The sorting rank of the activity in the activity shelf.
free_period_starts_at: Optional[:class:`datetime.datetime`]
When the activity's free availability period starts.
free_period_ends_at: Optional[:class:`datetime.datetime`]
When the activity's free availability period ends.
preview_video_asset: Optional[:class:`ApplicationAsset`] preview_video_asset: Optional[:class:`ApplicationAsset`]
The preview video asset of the embedded activity. The preview video asset of the activity.
Raises Raises
------- -------
@ -506,6 +547,11 @@ class EmbeddedActivityConfig:
self.application.id, self.application.id,
supported_platforms=[str(x) for x in (supported_platforms or [])], supported_platforms=[str(x) for x in (supported_platforms or [])],
orientation_lock_state=int(orientation_lock_state), orientation_lock_state=int(orientation_lock_state),
tablet_orientation_lock_state=int(tablet_orientation_lock_state),
requires_age_gate=requires_age_gate,
shelf_rank=shelf_rank,
free_period_starts_at=free_period_starts_at.isoformat() if free_period_starts_at else None,
free_period_ends_at=free_period_ends_at.isoformat() if free_period_ends_at else None,
preview_video_asset_id=(preview_video_asset.id if preview_video_asset else None) preview_video_asset_id=(preview_video_asset.id if preview_video_asset else None)
if preview_video_asset is not MISSING if preview_video_asset is not MISSING
else None, else None,

34
discord/http.py

@ -53,8 +53,6 @@ import weakref
import aiohttp import aiohttp
from .types import application
from .enums import RelationshipAction, InviteType from .enums import RelationshipAction, InviteType
from .errors import HTTPException, Forbidden, NotFound, LoginFailure, DiscordServerError, CaptchaRequired from .errors import HTTPException, Forbidden, NotFound, LoginFailure, DiscordServerError, CaptchaRequired
from .file import File from .file import File
@ -87,6 +85,7 @@ if TYPE_CHECKING:
from .embeds import Embed from .embeds import Embed
from .types import ( from .types import (
application,
audit_log, audit_log,
billing, billing,
channel, channel,
@ -2389,7 +2388,9 @@ class HTTPClient:
def get_partial_application(self, app_id: Snowflake) -> Response[application.PartialApplication]: def get_partial_application(self, app_id: Snowflake) -> Response[application.PartialApplication]:
return self.request(Route('GET', '/oauth2/applications/{app_id}/rpc', app_id=app_id)) return self.request(Route('GET', '/oauth2/applications/{app_id}/rpc', app_id=app_id))
def get_public_application(self, app_id: Snowflake, with_guild: bool = False) -> Response[application.PartialApplication]: def get_public_application(
self, app_id: Snowflake, with_guild: bool = False
) -> Response[application.PartialApplication]:
params = {'with_guild': str(with_guild).lower()} params = {'with_guild': str(with_guild).lower()}
return self.request(Route('GET', '/applications/{app_id}/public', app_id=app_id), params=params) return self.request(Route('GET', '/applications/{app_id}/public', app_id=app_id), params=params)
@ -2541,6 +2542,11 @@ class HTTPClient:
*, *,
supported_platforms: Optional[List[str]] = None, supported_platforms: Optional[List[str]] = None,
orientation_lock_state: Optional[int] = None, orientation_lock_state: Optional[int] = None,
tablet_orientation_lock_state: Optional[int] = None,
requires_age_gate: Optional[bool] = None,
shelf_rank: Optional[int] = None,
free_period_starts_at: Optional[str] = None,
free_period_ends_at: Optional[str] = None,
preview_video_asset_id: Optional[Snowflake] = MISSING, preview_video_asset_id: Optional[Snowflake] = MISSING,
) -> Response[application.EmbeddedActivityConfig]: ) -> Response[application.EmbeddedActivityConfig]:
payload = {} payload = {}
@ -2548,6 +2554,16 @@ class HTTPClient:
payload['supported_platforms'] = supported_platforms payload['supported_platforms'] = supported_platforms
if orientation_lock_state is not None: if orientation_lock_state is not None:
payload['default_orientation_lock_state'] = orientation_lock_state payload['default_orientation_lock_state'] = orientation_lock_state
if tablet_orientation_lock_state is not None:
payload['default_tablet_orientation_lock_state'] = tablet_orientation_lock_state
if requires_age_gate is not None:
payload['requires_age_gate'] = requires_age_gate
if shelf_rank is not None:
payload['shelf_rank'] = shelf_rank
if free_period_starts_at is not None:
payload['free_period_starts_at'] = free_period_starts_at
if free_period_ends_at is not None:
payload['free_period_ends_at'] = free_period_ends_at
if preview_video_asset_id is not MISSING: if preview_video_asset_id is not MISSING:
payload['activity_preview_video_asset_id'] = preview_video_asset_id payload['activity_preview_video_asset_id'] = preview_video_asset_id
@ -2562,7 +2578,9 @@ class HTTPClient:
Route('GET', '/oauth2/applications/{app_id}/allowlist', app_id=app_id), super_properties_to_track=True Route('GET', '/oauth2/applications/{app_id}/allowlist', app_id=app_id), super_properties_to_track=True
) )
def add_app_whitelist(self, app_id: Snowflake, username: str, discriminator: str) -> Response[application.WhitelistedUser]: def add_app_whitelist(
self, app_id: Snowflake, username: str, discriminator: str
) -> Response[application.WhitelistedUser]:
payload = {'username': username, 'discriminator': discriminator} payload = {'username': username, 'discriminator': discriminator}
return self.request( return self.request(
@ -2815,7 +2833,9 @@ class HTTPClient:
return self.request(Route('POST', '/branches'), json=payload) return self.request(Route('POST', '/branches'), json=payload)
def create_branch_build(self, app_id: Snowflake, branch_id: Snowflake, payload: dict) -> Response[application.CreatedBuild]: def create_branch_build(
self, app_id: Snowflake, branch_id: Snowflake, payload: dict
) -> Response[application.CreatedBuild]:
return self.request( return self.request(
Route('POST', '/applications/{app_id}/branches/{branch_id}/builds', app_id=app_id, branch_id=branch_id), Route('POST', '/applications/{app_id}/branches/{branch_id}/builds', app_id=app_id, branch_id=branch_id),
json=payload, json=payload,
@ -3229,7 +3249,9 @@ class HTTPClient:
super_properties_to_track=True, super_properties_to_track=True,
) )
def edit_achievement(self, app_id: Snowflake, achievement_id: Snowflake, payload: dict) -> Response[application.Achievement]: def edit_achievement(
self, app_id: Snowflake, achievement_id: Snowflake, payload: dict
) -> Response[application.Achievement]:
return self.request( return self.request(
Route( Route(
'PATCH', '/applications/{app_id}/achievements/{achievement_id}', app_id=app_id, achievement_id=achievement_id 'PATCH', '/applications/{app_id}/achievements/{achievement_id}', app_id=app_id, achievement_id=achievement_id

20
discord/types/application.py

@ -212,10 +212,26 @@ class GlobalActivityStatistics(TypedDict):
updated_at: str updated_at: str
EmbeddedActivityPlatform = Literal['web', 'android', 'ios']
class ClientPlatformConfig(TypedDict):
label_type: int
label_until: Optional[str]
release_phase: str
class EmbeddedActivityConfig(TypedDict): class EmbeddedActivityConfig(TypedDict):
supported_platforms: List[Literal['web', 'android', 'ios']]
default_orientation_lock_state: Literal[1, 2, 3]
activity_preview_video_asset_id: NotRequired[Optional[Snowflake]] activity_preview_video_asset_id: NotRequired[Optional[Snowflake]]
client_platform_config: Dict[EmbeddedActivityPlatform, ClientPlatformConfig]
default_orientation_lock_state: Literal[1, 2, 3]
tablet_default_orientation_lock_state: Literal[1, 2, 3]
free_period_ends_at: NotRequired[Optional[str]]
free_period_starts_at: NotRequired[Optional[str]]
premium_tier_requirement: NotRequired[Optional[Literal[1, 2, 3]]]
requires_age_gate: bool
shelf_rank: int
supported_platforms: List[EmbeddedActivityPlatform]
class ActiveDeveloperWebhook(TypedDict): class ActiveDeveloperWebhook(TypedDict):

Loading…
Cancel
Save