Skip to content

Commit c9e52fe

Browse files
committed
app_permissions is no longer allowed to be None for interactions. Fixed broken tests.
1 parent 698a93a commit c9e52fe

File tree

4 files changed

+42
-53
lines changed

4 files changed

+42
-53
lines changed

changes/2177.feature.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
+ Add user installations support
1+
+ Add user installations support

hikari/applications.py

+3-6
Original file line numberDiff line numberDiff line change
@@ -869,9 +869,10 @@ class ApplicationIntegrationConfiguration:
869869
class OAuth2InstallParameters:
870870
"""OAuth2 Install Parameters."""
871871

872-
scopes: typing.Sequence[OAuth2Scope]
872+
scopes: typing.Sequence[OAuth2Scope] = attrs.field(eq=False, hash=False, repr=True)
873873
"""The scopes the application will be added to the server with."""
874-
permissions: permissions_.Permissions
874+
875+
permissions: permissions_.Permissions = attrs.field(eq=False, hash=False, repr=True)
875876
"""The permissions that will be requested for the bot role."""
876877

877878

@@ -885,10 +886,6 @@ class ApplicationIntegrationType(int, enums.Enum):
885886
USER_INSTALL = 1
886887
"""Application is installable to all users."""
887888

888-
@classmethod
889-
def all(cls) -> typing.Sequence[ApplicationIntegrationType]:
890-
return (ApplicationIntegrationType.GUILD_INSTALL, ApplicationIntegrationType.USER_INSTALL)
891-
892889

893890
@typing.final
894891
class ApplicationContextType(int, enums.Enum):

hikari/impl/entity_factory.py

+36-43
Original file line numberDiff line numberDiff line change
@@ -637,23 +637,22 @@ def deserialize_application(self, payload: data_binding.JSONObject) -> applicati
637637
application_models.ApplicationIntegrationType, application_models.ApplicationIntegrationConfiguration
638638
] = {}
639639

640-
if (integration_types_config_payload := payload.get("integration_types_config")) is not None:
641-
for raw_type, integration_payload in integration_types_config_payload.items():
642-
integration_type = application_models.ApplicationIntegrationType(int(raw_type))
643-
644-
oauth2_install_parameters = None
645-
if oauth2_install_params_payload := integration_payload.get("oauth2_install_params"):
646-
oauth2_install_parameters = application_models.OAuth2InstallParameters(
647-
scopes=[
648-
application_models.OAuth2Scope(scope) for scope in oauth2_install_params_payload["scopes"]
649-
],
650-
permissions=permission_models.Permissions(int(oauth2_install_params_payload["permissions"])),
651-
)
652-
653-
integration_types_config[integration_type] = application_models.ApplicationIntegrationConfiguration(
654-
oauth2_install_parameters=oauth2_install_parameters
640+
for raw_type, integration_payload in payload.get("integration_types_config", {}).items():
641+
integration_type = application_models.ApplicationIntegrationType(int(raw_type))
642+
643+
oauth2_install_parameters = None
644+
if (oauth2_install_params_payload := integration_payload.get("oauth2_install_params")) is not None:
645+
oauth2_install_parameters = application_models.OAuth2InstallParameters(
646+
scopes=[
647+
application_models.OAuth2Scope(scope) for scope in oauth2_install_params_payload["scopes"]
648+
],
649+
permissions=permission_models.Permissions(int(oauth2_install_params_payload["permissions"])),
655650
)
656651

652+
integration_types_config[integration_type] = application_models.ApplicationIntegrationConfiguration(
653+
oauth2_install_parameters=oauth2_install_parameters
654+
)
655+
657656
return application_models.Application(
658657
app=self._app,
659658
id=snowflakes.Snowflake(payload["id"]),
@@ -2313,15 +2312,14 @@ def deserialize_slash_command(
23132312
else:
23142313
default_member_permissions = permission_models.Permissions(default_member_permissions or 0)
23152314

2316-
integration_types: typing.MutableSequence[application_models.ApplicationIntegrationType] = []
2317-
if (integration_types_payload := payload.get("integration_types")) is not None:
2318-
for integration_type_payload in integration_types_payload:
2319-
integration_types.append(application_models.ApplicationIntegrationType(int(integration_type_payload)))
2315+
integration_types = [
2316+
application_models.ApplicationIntegrationType(int(integration_type))
2317+
for integration_type in payload.get("integration_types", ())
2318+
]
23202319

2321-
context_types: typing.MutableSequence[application_models.ApplicationContextType] = []
2322-
if (context_types_payload := payload.get("contexts")) is not None:
2323-
for context_type_payload in context_types_payload:
2324-
context_types.append(application_models.ApplicationContextType(int(context_type_payload)))
2320+
context_types = [
2321+
application_models.ApplicationContextType(int(context)) for context in payload.get("contexts", ())
2322+
]
23252323

23262324
return commands.SlashCommand(
23272325
app=self._app,
@@ -2366,15 +2364,14 @@ def deserialize_context_menu_command(
23662364
else:
23672365
default_member_permissions = permission_models.Permissions(default_member_permissions or 0)
23682366

2369-
integration_types: typing.MutableSequence[application_models.ApplicationIntegrationType] = []
2370-
if (integration_types_payload := payload.get("integration_types")) is not None:
2371-
for integration_type_payload in integration_types_payload:
2372-
integration_types.append(application_models.ApplicationIntegrationType(int(integration_type_payload)))
2367+
integration_types = [
2368+
application_models.ApplicationIntegrationType(int(integration_type))
2369+
for integration_type in payload.get("integration_types", ())
2370+
]
23732371

2374-
context_types: typing.MutableSequence[application_models.ApplicationContextType] = []
2375-
if (context_types_payload := payload.get("contexts")) is not None:
2376-
for context_type_payload in context_types_payload:
2377-
context_types.append(application_models.ApplicationContextType(int(context_type_payload)))
2372+
context_types = [
2373+
application_models.ApplicationContextType(int(context)) for context in payload.get("contexts", ())
2374+
]
23782375

23792376
return commands.ContextMenuCommand(
23802377
app=self._app,
@@ -2431,7 +2428,7 @@ def serialize_command_permission(self, permission: commands.CommandPermission) -
24312428
def deserialize_partial_interaction(self, payload: data_binding.JSONObject) -> base_interactions.PartialInteraction:
24322429
authorizing_integration_owners = {
24332430
application_models.ApplicationIntegrationType(int(integration_type)): snowflakes.Snowflake(
2434-
int(integration_owner_id)
2431+
integration_owner_id
24352432
)
24362433
for integration_type, integration_owner_id in payload["authorizing_integration_owners"].items()
24372434
}
@@ -2623,13 +2620,11 @@ def deserialize_command_interaction(
26232620
if raw_target_id := data_payload.get("target_id"):
26242621
target_id = snowflakes.Snowflake(raw_target_id)
26252622

2626-
app_perms = payload.get("app_permissions")
2627-
26282623
entitlements = [self.deserialize_entitlement(entitlement) for entitlement in payload.get("entitlements", ())]
26292624

26302625
authorizing_integration_owners = {
26312626
application_models.ApplicationIntegrationType(int(integration_type)): snowflakes.Snowflake(
2632-
int(integration_owner_id)
2627+
integration_owner_id
26332628
)
26342629
for integration_type, integration_owner_id in payload["authorizing_integration_owners"].items()
26352630
}
@@ -2653,7 +2648,7 @@ def deserialize_command_interaction(
26532648
options=options,
26542649
resolved=resolved,
26552650
target_id=target_id,
2656-
app_permissions=permission_models.Permissions(app_perms) if app_perms else None,
2651+
app_permissions=permission_models.Permissions(payload["app_permissions"]),
26572652
registered_guild_id=snowflakes.Snowflake(data_payload["guild_id"]) if "guild_id" in data_payload else None,
26582653
entitlements=entitlements,
26592654
authorizing_integration_owners=authorizing_integration_owners,
@@ -2684,7 +2679,7 @@ def deserialize_autocomplete_interaction(
26842679

26852680
authorizing_integration_owners = {
26862681
application_models.ApplicationIntegrationType(int(integration_type)): snowflakes.Snowflake(
2687-
int(integration_owner_id)
2682+
integration_owner_id
26882683
)
26892684
for integration_type, integration_owner_id in payload["authorizing_integration_owners"].items()
26902685
}
@@ -2736,19 +2731,18 @@ def deserialize_modal_interaction(self, payload: data_binding.JSONObject) -> mod
27362731

27372732
authorizing_integration_owners = {
27382733
application_models.ApplicationIntegrationType(int(integration_type)): snowflakes.Snowflake(
2739-
int(integration_owner_id)
2734+
integration_owner_id
27402735
)
27412736
for integration_type, integration_owner_id in payload["authorizing_integration_owners"].items()
27422737
}
27432738

2744-
app_perms = payload.get("app_permissions")
27452739
return modal_interactions.ModalInteraction(
27462740
app=self._app,
27472741
application_id=snowflakes.Snowflake(payload["application_id"]),
27482742
id=snowflakes.Snowflake(payload["id"]),
27492743
type=base_interactions.InteractionType(payload["type"]),
27502744
guild_id=guild_id,
2751-
app_permissions=permission_models.Permissions(app_perms) if app_perms else None,
2745+
app_permissions=permission_models.Permissions(payload["app_permissions"]),
27522746
guild_locale=locales.Locale(payload["guild_locale"]) if "guild_locale" in payload else None,
27532747
locale=locales.Locale(payload["locale"]),
27542748
channel_id=snowflakes.Snowflake(payload["channel_id"]),
@@ -2836,12 +2830,11 @@ def deserialize_component_interaction(
28362830

28372831
authorizing_integration_owners = {
28382832
application_models.ApplicationIntegrationType(int(integration_type)): snowflakes.Snowflake(
2839-
int(integration_owner_id)
2833+
integration_owner_id
28402834
)
28412835
for integration_type, integration_owner_id in payload["authorizing_integration_owners"].items()
28422836
}
28432837

2844-
app_perms = payload.get("app_permissions")
28452838
return component_interactions.ComponentInteraction(
28462839
app=self._app,
28472840
application_id=snowflakes.Snowflake(payload["application_id"]),
@@ -2860,7 +2853,7 @@ def deserialize_component_interaction(
28602853
message=self.deserialize_message(payload["message"]),
28612854
locale=locales.Locale(payload["locale"]),
28622855
guild_locale=locales.Locale(payload["guild_locale"]) if "guild_locale" in payload else None,
2863-
app_permissions=permission_models.Permissions(app_perms) if app_perms else None,
2856+
app_permissions=permission_models.Permissions(payload["app_permissions"]),
28642857
entitlements=[self.deserialize_entitlement(entitlement) for entitlement in payload.get("entitlements", ())],
28652858
authorizing_integration_owners=authorizing_integration_owners,
28662859
context=application_models.ApplicationContextType(payload["context"]),

tests/hikari/impl/test_entity_factory.py

+2-3
Original file line numberDiff line numberDiff line change
@@ -4561,7 +4561,6 @@ def test_deserialize_command_interaction_with_null_attributes(
45614561
del command_interaction_payload["data"]["resolved"]
45624562
del command_interaction_payload["data"]["options"]
45634563
del command_interaction_payload["guild_locale"]
4564-
del command_interaction_payload["app_permissions"]
45654564
del command_interaction_payload["data"]["guild_id"]
45664565

45674566
interaction = entity_factory_impl.deserialize_command_interaction(command_interaction_payload)
@@ -4572,7 +4571,6 @@ def test_deserialize_command_interaction_with_null_attributes(
45724571
assert interaction.options == []
45734572
assert interaction.resolved is None
45744573
assert interaction.guild_locale is None
4575-
assert interaction.app_permissions is None
45764574
assert interaction.registered_guild_id is None
45774575

45784576
@pytest.fixture
@@ -4973,6 +4971,7 @@ def test_deserialize_component_interaction_with_undefined_fields(
49734971
"channel_id": "345626669114982999",
49744972
"application_id": "290926444748734465",
49754973
"locale": "es-ES",
4974+
"app_permissions": "5431234",
49764975
"entitlements": [
49774976
{
49784977
"id": "696969696969696",
@@ -4997,7 +4996,6 @@ def test_deserialize_component_interaction_with_undefined_fields(
49974996
assert interaction.user == entity_factory_impl.deserialize_user(user_payload)
49984997
assert interaction.values == ()
49994998
assert interaction.guild_locale is None
5000-
assert interaction.app_permissions is None
50014999
assert isinstance(interaction, component_interactions.ComponentInteraction)
50025000

50035001
@pytest.fixture
@@ -5021,6 +5019,7 @@ def modal_interaction_payload(self, interaction_member_payload, message_payload)
50215019
"application_id": "290926444748734465",
50225020
"locale": "en-US",
50235021
"guild_locale": "es-ES",
5022+
"app_permissions": "5431234",
50245023
"entitlements": [
50255024
{
50265025
"id": "696969696969696",

0 commit comments

Comments
 (0)