Skip to content

Commit d7abefe

Browse files
authored
Implement role tags (#385)
1 parent ac70db5 commit d7abefe

5 files changed

Lines changed: 51 additions & 1 deletion

File tree

hikari/guilds.py

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -551,6 +551,21 @@ class Role(PartialRole):
551551
and increase as you go up the hierarchy.
552552
"""
553553

554+
bot_id: typing.Optional[snowflakes.Snowflake] = attr.ib(eq=False, hash=False, repr=True)
555+
"""The ID of the bot this role belongs to.
556+
557+
If `builtins.None`, this is not a bot role.
558+
"""
559+
560+
integration_id: typing.Optional[snowflakes.Snowflake] = attr.ib(eq=False, hash=False, repr=True)
561+
"""The ID of the integration this role belongs to.
562+
563+
If `builtins.None`, this is not a integration role.
564+
"""
565+
566+
is_premium_subscriber_role: bool = attr.ib(eq=False, hash=False, repr=True)
567+
"""Whether this role is the guild's nitro subscriber role."""
568+
554569
@property
555570
def colour(self) -> colours.Colour:
556571
"""Alias for the `color` field."""

hikari/impl/entity_factory.py

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1019,6 +1019,18 @@ def deserialize_role(
10191019
*,
10201020
guild_id: snowflakes.Snowflake,
10211021
) -> guild_models.Role:
1022+
bot_id: typing.Optional[snowflakes.Snowflake] = None
1023+
integration_id: typing.Optional[snowflakes.Snowflake] = None
1024+
is_premium_subscriber_role: bool = False
1025+
if "tags" in payload:
1026+
tags_payload = payload["tags"]
1027+
if "bot_id" in tags_payload:
1028+
bot_id = snowflakes.Snowflake(tags_payload["bot_id"])
1029+
if "integration_id" in tags_payload:
1030+
integration_id = snowflakes.Snowflake(tags_payload["integration_id"])
1031+
if "premium_subscriber" in tags_payload:
1032+
is_premium_subscriber_role = True
1033+
10221034
return guild_models.Role(
10231035
app=self._app,
10241036
id=snowflakes.Snowflake(payload["id"]),
@@ -1027,10 +1039,12 @@ def deserialize_role(
10271039
color=color_models.Color(payload["color"]),
10281040
is_hoisted=payload["hoist"],
10291041
position=int(payload["position"]),
1030-
# https://github.com/discord/discord-api-docs/pull/1843/commits/470677363ba88fbc1fe79228821146c6d6b488b9
10311042
permissions=permission_models.Permissions(int(payload["permissions"])),
10321043
is_managed=payload["managed"],
10331044
is_mentionable=payload["mentionable"],
1045+
bot_id=bot_id,
1046+
integration_id=integration_id,
1047+
is_premium_subscriber_role=is_premium_subscriber_role,
10341048
)
10351049

10361050
@staticmethod

tests/hikari/impl/test_entity_factory.py

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1519,6 +1519,11 @@ def guild_role_payload(self):
15191519
"permissions": "66321471",
15201520
"managed": False,
15211521
"mentionable": False,
1522+
"tags": {
1523+
"bot_id": "123",
1524+
"integration_id": "456",
1525+
"premium_subscriber": None,
1526+
},
15221527
}
15231528

15241529
def test_deserialize_role(self, entity_factory_impl, mock_app, guild_role_payload):
@@ -1533,8 +1538,18 @@ def test_deserialize_role(self, entity_factory_impl, mock_app, guild_role_payloa
15331538
assert guild_role.permissions == permission_models.Permissions(66_321_471)
15341539
assert guild_role.is_managed is False
15351540
assert guild_role.is_mentionable is False
1541+
assert guild_role.bot_id == 123
1542+
assert guild_role.integration_id == 456
1543+
assert guild_role.is_premium_subscriber_role is True
15361544
assert isinstance(guild_role, guild_models.Role)
15371545

1546+
def test_deserialize_role_with_missing_or_unset_fields(self, entity_factory_impl, guild_role_payload):
1547+
del guild_role_payload["tags"]
1548+
guild_role = entity_factory_impl.deserialize_role(guild_role_payload, guild_id=snowflakes.Snowflake(76534453))
1549+
assert guild_role.bot_id is None
1550+
assert guild_role.integration_id is None
1551+
assert guild_role.is_premium_subscriber_role is False
1552+
15381553
def test_deserialize_partial_integration(self, entity_factory_impl, partial_integration_payload):
15391554
partial_integration = entity_factory_impl.deserialize_partial_integration(partial_integration_payload)
15401555
assert partial_integration.id == 4949494949

tests/hikari/impl/test_rest.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1277,6 +1277,9 @@ async def test_edit_permission_overwrites(self, rest_client):
12771277
is_mentionable=True,
12781278
permissions=0,
12791279
position=0,
1280+
bot_id=None,
1281+
integration_id=None,
1282+
is_premium_subscriber_role=False,
12801283
),
12811284
channels.PermissionOverwriteType.ROLE,
12821285
),

tests/hikari/test_guilds.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -176,6 +176,9 @@ def model(self, mock_app):
176176
is_mentionable=True,
177177
permissions=permissions.Permissions.CONNECT,
178178
position=12,
179+
bot_id=None,
180+
integration_id=None,
181+
is_premium_subscriber_role=False,
179182
)
180183

181184
def test_colour_property(self, model):

0 commit comments

Comments
 (0)