Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
24 changes: 23 additions & 1 deletion interactions/api/http/client.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
from typing import TYPE_CHECKING, Any, Optional, Tuple
from typing import TYPE_CHECKING, Any, List, Optional, Tuple

from .channel import ChannelRequest
from .emoji import EmojiRequest
Expand Down Expand Up @@ -120,3 +120,25 @@ async def get_current_authorisation_information(self) -> dict:
Returns info about the current authorization of the bot user
"""
return await self._req.request(Route("GET", "/oauth2/@me"))

# ---- Role connection metadata endpoints

async def get_application_role_connection_metadata(self, application_id: int) -> List[dict]:
"""
Returns a list of application role connection metadata objects for an application.
"""
return await self._req.request(
Route("GET", f"/applications/{application_id}/role-connections/metadata")
)

async def update_application_role_connection_metadata(
self, application_id: int, payload: List[dict]
) -> List[dict]:
"""
Updates and returns a list of application role connection metadata objects for an application.

.. note:: The maximum metadata objects supported via the API is five.
"""
return await self._req.request(
Route("PUT", f"/applications/{application_id}/role-connections/metadata"), json=payload
)
53 changes: 50 additions & 3 deletions interactions/api/models/team.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,15 @@
from datetime import datetime
from typing import Any, List, Optional

from ...utils.attrs_utils import ClientSerializerMixin, convert_list, define, field
from enum import IntEnum
from typing import Any, Dict, List, Optional, Union

from ...client.enums import Locale
from ...utils.attrs_utils import (
ClientSerializerMixin,
DictSerializerMixin,
convert_list,
define,
field,
)
from .flags import AppFlags
from .misc import IDMixin, Snowflake
from .user import User
Expand All @@ -10,6 +18,8 @@
"Team",
"TeamMember",
"Application",
"ApplicationRoleConnectionMetadataType",
"ApplicationRoleConnectionMetadata",
)


Expand Down Expand Up @@ -79,6 +89,7 @@ class Application(ClientSerializerMixin, IDMixin):
:ivar Optional[str] slug: URL slug that links to the store page, if this app is a game sold on Discord
:ivar Optional[str] cover_image: The app's default rich presence invite cover image
:ivar Optional[AppFlags] flags: The application's public flags
:ivar Optional[str] role_connections_verification_url: The application's role connection verification URL, if given.
"""

id: Snowflake = field(converter=Snowflake)
Expand All @@ -101,6 +112,7 @@ class Application(ClientSerializerMixin, IDMixin):
flags: Optional[AppFlags] = field(converter=AppFlags, default=None)
type: Optional[Any] = field(default=None)
hook: Optional[Any] = field(default=None)
role_connections_verification_url: Optional[str] = field(default=None, repr=False)

@property
def icon_url(self) -> Optional[str]:
Expand All @@ -127,3 +139,38 @@ def created_at(self) -> datetime:
Returns when the application was created.
"""
return self.id.timestamp


class ApplicationRoleConnectionMetadataType(IntEnum):
"""
.. versionadded:: 4.4.0

An enumerable object representing the app role connection metadata types
"""

INTEGER_LESS_THAN_OR_EQUAL = 1
INTEGER_GREATER_THAN_OR_EQUAL = 2
INTEGER_EQUAL = 3
INTEGER_NOT_EQUAL = 4
DATETIME_LESS_THAN_OR_EQUAL = 5
DATETIME_GREATER_THAN_OR_EQUAL = 6
BOOLEAN_EQUAL = 7
BOOLEAN_NOT_EQUAL = 8


@define()
class ApplicationRoleConnectionMetadata(DictSerializerMixin):
"""
.. versionadded:: 4.4.0

A class object representing role connection metadata for the application/bot/client.
"""

type: ApplicationRoleConnectionMetadataType = field(
converter=ApplicationRoleConnectionMetadataType
)
key: str = field()
name: str = field()
name_localizations: Optional[Dict[Union[str, Locale], str]] = field(default=None)
description: str = field()
description_localizations: Optional[Dict[Union[str, Locale], str]] = field(default=None)