Skip to content

Commit 646e16c

Browse files
authored
feat: Add support for age-restricted commands (#1208)
* feat: Add support for age-restricted commands * refactor: pre-commited * Update command.py * Update command.py
1 parent 13efcc4 commit 646e16c

File tree

3 files changed

+29
-2
lines changed

3 files changed

+29
-2
lines changed

interactions/client/bot.py

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1068,6 +1068,7 @@ def command(
10681068
description_localizations: Optional[Dict[Union[str, Locale], str]] = MISSING,
10691069
default_member_permissions: Optional[Union[int, Permissions]] = MISSING,
10701070
dm_permission: Optional[bool] = MISSING,
1071+
nsfw: Optional[bool] = MISSING,
10711072
default_scope: bool = True,
10721073
) -> Callable[[Callable[..., Coroutine]], Command]:
10731074
"""
@@ -1121,6 +1122,10 @@ async def sudo(ctx):
11211122
The dictionary of localization for the ``description`` field. This enforces the same restrictions as the ``description`` field.
11221123
:param Optional[Union[int, Permissions]] default_member_permissions: The permissions bit value of :class:`.Permissions`. If not given, defaults to :attr:`.Permissions.USE_APPLICATION_COMMANDS`
11231124
:param Optional[bool] dm_permission: The application permissions if executed in a Direct Message. Defaults to ``True``.
1125+
:param Optional[bool] nsfw:
1126+
.. versionadded:: 4.4.0
1127+
1128+
Indicates whether the command is age-restricted. Defaults to ``False``
11241129
:param Optional[bool] default_scope:
11251130
.. versionadded:: 4.3.0
11261131
@@ -1139,6 +1144,7 @@ def decorator(coro: Callable[..., Coroutine]) -> Command:
11391144
scope=scope,
11401145
default_member_permissions=default_member_permissions,
11411146
dm_permission=dm_permission,
1147+
nsfw=nsfw,
11421148
name_localizations=name_localizations,
11431149
description_localizations=description_localizations,
11441150
default_scope=default_scope,
@@ -1157,6 +1163,7 @@ def message_command(
11571163
name_localizations: Optional[Dict[Union[str, Locale], Any]] = MISSING,
11581164
default_member_permissions: Optional[Union[int, Permissions]] = MISSING,
11591165
dm_permission: Optional[bool] = MISSING,
1166+
nsfw: Optional[bool] = MISSING,
11601167
default_scope: bool = True,
11611168
) -> Callable[[Callable[..., Coroutine]], Command]:
11621169
"""
@@ -1183,6 +1190,10 @@ async def context_menu_name(ctx):
11831190
The dictionary of localization for the ``name`` field. This enforces the same restrictions as the ``name`` field.
11841191
:param Optional[Union[int, Permissions]] default_member_permissions: The permissions bit value of :class:`.Permissions`. If not given, defaults to :attr:`.Permissions.USE_APPLICATION_COMMANDS`
11851192
:param Optional[bool] dm_permission: The application permissions if executed in a Direct Message. Defaults to ``True``.
1193+
:param Optional[bool] nsfw:
1194+
.. versionadded:: 4.4.0
1195+
1196+
Indicates whether the command is age-restricted. Defaults to ``False``
11861197
:param Optional[bool] default_scope:
11871198
.. versionadded:: 4.3.0
11881199
@@ -1198,6 +1209,7 @@ def decorator(coro: Callable[..., Coroutine]) -> Command:
11981209
scope=scope,
11991210
default_member_permissions=default_member_permissions,
12001211
dm_permission=dm_permission,
1212+
nsfw=nsfw,
12011213
name_localizations=name_localizations,
12021214
default_scope=default_scope,
12031215
)(coro)
@@ -1212,6 +1224,7 @@ def user_command(
12121224
name_localizations: Optional[Dict[Union[str, Locale], Any]] = MISSING,
12131225
default_member_permissions: Optional[Union[int, Permissions]] = MISSING,
12141226
dm_permission: Optional[bool] = MISSING,
1227+
nsfw: Optional[bool] = MISSING,
12151228
default_scope: bool = True,
12161229
) -> Callable[[Callable[..., Coroutine]], Command]:
12171230
"""
@@ -1239,6 +1252,10 @@ async def context_menu_name(ctx):
12391252
:param Optional[Union[int, Permissions]] default_member_permissions:
12401253
The permissions bit value of :class:`.Permissions`. If not given, defaults to :attr:`.Permissions.USE_APPLICATION_COMMANDS`
12411254
:param Optional[bool] dm_permission: The application permissions if executed in a Direct Message. Defaults to ``True``.
1255+
:param Optional[bool] nsfw:
1256+
.. versionadded:: 4.4.0
1257+
1258+
Indicates whether the command is age-restricted. Defaults to ``False``
12421259
:param Optional[bool] default_scope:
12431260
.. versionadded:: 4.3.0
12441261
@@ -1254,6 +1271,7 @@ def decorator(coro: Callable[..., Coroutine]) -> Command:
12541271
scope=scope,
12551272
default_member_permissions=default_member_permissions,
12561273
dm_permission=dm_permission,
1274+
nsfw=nsfw,
12571275
name_localizations=name_localizations,
12581276
default_scope=default_scope,
12591277
)(coro)

interactions/client/decor.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,8 @@ def command(
2020
name_localizations: Optional[Dict[Union[str, Locale], str]] = MISSING,
2121
description_localizations: Optional[Dict[Union[str, Locale], str]] = MISSING,
2222
default_member_permissions: Optional[Union[int, Permissions]] = MISSING,
23-
dm_permission: Optional[bool] = MISSING
23+
dm_permission: Optional[bool] = MISSING,
24+
nsfw: Optional[bool] = MISSING,
2425
) -> Union[List[dict], dict]: # sourcery skip: low-code-quality
2526
"""
2627
A wrapper designed to interpret the client-facing API for
@@ -78,6 +79,7 @@ def command(
7879
)
7980
)
8081
_dm_permission: bool = True if dm_permission is MISSING else dm_permission
82+
_nsfw: bool = False if nsfw is MISSING else nsfw
8183

8284
payloads: list = []
8385

@@ -102,6 +104,7 @@ def command(
102104
description_localizations=_description_localizations,
103105
default_member_permissions=_default_member_permissions,
104106
dm_permission=_dm_permission,
107+
nsfw=_nsfw,
105108
)
106109
payloads.append(payload._json)
107110
else:
@@ -114,6 +117,7 @@ def command(
114117
description_localizations=_description_localizations,
115118
default_member_permissions=_default_member_permissions,
116119
dm_permission=_dm_permission,
120+
nsfw=_nsfw,
117121
)
118122
return payload._json
119123

interactions/client/models/command.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -173,9 +173,10 @@ class ApplicationCommand(DictSerializerMixin):
173173
:ivar str description: The description of the application command.
174174
:ivar Optional[List[Option]] options: The "options"/arguments of the application command.
175175
:ivar Optional[bool] default_permission: The default permission accessibility state of the application command.
176+
:ivar Optional[bool] nsfw: Indicates whether the command is age-restricted.
176177
:ivar int version: The Application Command version autoincrement identifier.
177178
:ivar str default_member_permissions: The default member permission state of the application command.
178-
:ivar boolean dm_permission: The application permissions if executed in a Direct Message.
179+
:ivar bool dm_permission: The application permissions if executed in a Direct Message.
179180
:ivar Optional[Dict[Union[str, Locale], str]] name_localizations: The localisation dictionary for the application command name, if any.
180181
:ivar Optional[Dict[Union[str, Locale], str]] description_localizations: The localisation dictionary for the application command description, if any.
181182
"""
@@ -188,6 +189,7 @@ class ApplicationCommand(DictSerializerMixin):
188189
description: str = field()
189190
options: Optional[List[Option]] = field(converter=convert_list(Option), default=None)
190191
default_permission: Optional[bool] = field(default=None)
192+
nsfw: Optional[bool] = field(default=None)
191193
version: int = field(default=None)
192194
default_member_permissions: str = field()
193195
dm_permission: bool = field(default=None)
@@ -386,6 +388,7 @@ class Command(DictSerializerMixin):
386388
:ivar Optional[Union[int, Guild, List[int], List[Guild]]] scope: The scope of the command.
387389
:ivar Optional[str] default_member_permissions: The default member permissions of the command.
388390
:ivar Optional[bool] dm_permission: The DM permission of the command.
391+
:ivar Optional[bool] nsfw: Indicates whether the command is age-restricted. Defaults to ``False``.
389392
:ivar Optional[Dict[Union[str, Locale], str]] name_localizations: The dictionary of localization for the ``name`` field. This enforces the same restrictions as the ``name`` field.
390393
:ivar Optional[Dict[Union[str, Locale], str]] description_localizations: The dictionary of localization for the ``description`` field. This enforces the same restrictions as the ``description`` field.
391394
:ivar bool default_scope: Whether the command should use the default scope. Defaults to ``True``.
@@ -407,6 +410,7 @@ class Command(DictSerializerMixin):
407410
scope: Optional[Union[int, Guild, List[int], List[Guild]]] = field(default=MISSING)
408411
default_member_permissions: Optional[str] = field(default=MISSING)
409412
dm_permission: Optional[bool] = field(default=MISSING)
413+
nsfw: Optional[bool] = field(default=None)
410414
name_localizations: Optional[Dict[Union[str, Locale], str]] = field(default=MISSING)
411415
description_localizations: Optional[Dict[Union[str, Locale], str]] = field(default=MISSING)
412416
default_scope: bool = field(default=True)
@@ -479,6 +483,7 @@ def full_data(self) -> Union[dict, List[dict]]:
479483
description_localizations=self.description_localizations,
480484
default_member_permissions=self.default_member_permissions,
481485
dm_permission=self.dm_permission,
486+
nsfw=self.nsfw,
482487
)
483488

484489
@property

0 commit comments

Comments
 (0)