Skip to content

Commit fe64d11

Browse files
authored
feat: Implement barebones Linked Roles support. (#1203)
* docs, feat: Implement barebones Linked Roles support. * chore: Revert accidental file change on role dispatching. (not sure what happened) * docs: Typehint HTTP methods.
1 parent 77e3049 commit fe64d11

File tree

2 files changed

+73
-4
lines changed

2 files changed

+73
-4
lines changed

interactions/api/http/client.py

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
from typing import TYPE_CHECKING, Any, Optional, Tuple
1+
from typing import TYPE_CHECKING, Any, List, Optional, Tuple
22

33
from .channel import ChannelRequest
44
from .emoji import EmojiRequest
@@ -120,3 +120,25 @@ async def get_current_authorisation_information(self) -> dict:
120120
Returns info about the current authorization of the bot user
121121
"""
122122
return await self._req.request(Route("GET", "/oauth2/@me"))
123+
124+
# ---- Role connection metadata endpoints
125+
126+
async def get_application_role_connection_metadata(self, application_id: int) -> List[dict]:
127+
"""
128+
Returns a list of application role connection metadata objects for an application.
129+
"""
130+
return await self._req.request(
131+
Route("GET", f"/applications/{application_id}/role-connections/metadata")
132+
)
133+
134+
async def update_application_role_connection_metadata(
135+
self, application_id: int, payload: List[dict]
136+
) -> List[dict]:
137+
"""
138+
Updates and returns a list of application role connection metadata objects for an application.
139+
140+
.. note:: The maximum metadata objects supported via the API is five.
141+
"""
142+
return await self._req.request(
143+
Route("PUT", f"/applications/{application_id}/role-connections/metadata"), json=payload
144+
)

interactions/api/models/team.py

Lines changed: 50 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,15 @@
11
from datetime import datetime
2-
from typing import Any, List, Optional
3-
4-
from ...utils.attrs_utils import ClientSerializerMixin, convert_list, define, field
2+
from enum import IntEnum
3+
from typing import Any, Dict, List, Optional, Union
4+
5+
from ...client.enums import Locale
6+
from ...utils.attrs_utils import (
7+
ClientSerializerMixin,
8+
DictSerializerMixin,
9+
convert_list,
10+
define,
11+
field,
12+
)
513
from .flags import AppFlags
614
from .misc import IDMixin, Snowflake
715
from .user import User
@@ -10,6 +18,8 @@
1018
"Team",
1119
"TeamMember",
1220
"Application",
21+
"ApplicationRoleConnectionMetadataType",
22+
"ApplicationRoleConnectionMetadata",
1323
)
1424

1525

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

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

105117
@property
106118
def icon_url(self) -> Optional[str]:
@@ -127,3 +139,38 @@ def created_at(self) -> datetime:
127139
Returns when the application was created.
128140
"""
129141
return self.id.timestamp
142+
143+
144+
class ApplicationRoleConnectionMetadataType(IntEnum):
145+
"""
146+
.. versionadded:: 4.4.0
147+
148+
An enumerable object representing the app role connection metadata types
149+
"""
150+
151+
INTEGER_LESS_THAN_OR_EQUAL = 1
152+
INTEGER_GREATER_THAN_OR_EQUAL = 2
153+
INTEGER_EQUAL = 3
154+
INTEGER_NOT_EQUAL = 4
155+
DATETIME_LESS_THAN_OR_EQUAL = 5
156+
DATETIME_GREATER_THAN_OR_EQUAL = 6
157+
BOOLEAN_EQUAL = 7
158+
BOOLEAN_NOT_EQUAL = 8
159+
160+
161+
@define()
162+
class ApplicationRoleConnectionMetadata(DictSerializerMixin):
163+
"""
164+
.. versionadded:: 4.4.0
165+
166+
A class object representing role connection metadata for the application/bot/client.
167+
"""
168+
169+
type: ApplicationRoleConnectionMetadataType = field(
170+
converter=ApplicationRoleConnectionMetadataType
171+
)
172+
key: str = field()
173+
name: str = field()
174+
name_localizations: Optional[Dict[Union[str, Locale], str]] = field(default=None)
175+
description: str = field()
176+
description_localizations: Optional[Dict[Union[str, Locale], str]] = field(default=None)

0 commit comments

Comments
 (0)