diff --git a/changes/1653.bugfix.md b/changes/1653.bugfix.md new file mode 100644 index 0000000000..67d9e11546 --- /dev/null +++ b/changes/1653.bugfix.md @@ -0,0 +1 @@ +Add support for text in stage channels diff --git a/hikari/channels.py b/hikari/channels.py index 75d3cde6b6..7c7519d6a0 100644 --- a/hikari/channels.py +++ b/hikari/channels.py @@ -1367,7 +1367,7 @@ class GuildVoiceChannel(PermissibleGuildChannel, TextableGuildChannel): @attrs.define(hash=True, kw_only=True, weakref_slot=False) -class GuildStageChannel(PermissibleGuildChannel): +class GuildStageChannel(PermissibleGuildChannel, TextableGuildChannel): """Represents a stage channel.""" bitrate: int = attrs.field(eq=False, hash=False, repr=True) @@ -1387,6 +1387,14 @@ class GuildStageChannel(PermissibleGuildChannel): If this is `0`, then assume no limit. """ + last_message_id: typing.Optional[snowflakes.Snowflake] = attrs.field(eq=False, hash=False, repr=False) + """The ID of the last message sent in this channel. + + .. warning:: + This might point to an invalid or deleted message. Do not assume that + this will always be valid. + """ + @typing.final class ForumSortOrderType(int, enums.Enum): diff --git a/hikari/impl/entity_factory.py b/hikari/impl/entity_factory.py index 031cfe1146..d636906337 100644 --- a/hikari/impl/entity_factory.py +++ b/hikari/impl/entity_factory.py @@ -1173,6 +1173,7 @@ def deserialize_guild_stage_channel( snowflakes.Snowflake(overwrite["id"]): self.deserialize_permission_overwrite(overwrite) for overwrite in payload["permission_overwrites"] } + last_message_id = snowflakes.Snowflake(payload["last_message_id"]) if "last_message_id" in payload else None return channel_models.GuildStageChannel( app=self._app, id=channel_fields.id, @@ -1186,6 +1187,7 @@ def deserialize_guild_stage_channel( bitrate=int(payload["bitrate"]), user_limit=int(payload["user_limit"]), position=int(payload["position"]), + last_message_id=last_message_id, ) def deserialize_guild_forum_channel( diff --git a/tests/hikari/impl/test_entity_factory.py b/tests/hikari/impl/test_entity_factory.py index 1706e82006..9ad10d4920 100644 --- a/tests/hikari/impl/test_entity_factory.py +++ b/tests/hikari/impl/test_entity_factory.py @@ -1999,6 +1999,7 @@ def guild_stage_channel_payload(self, permission_overwrite_payload): "user_limit": 3, "rtc_region": "euoo", "parent_id": "543", + "last_message_id": "1000101", } def test_deserialize_guild_stage_channel( @@ -2018,6 +2019,7 @@ def test_deserialize_guild_stage_channel( assert voice_channel.region == "euoo" assert voice_channel.bitrate == 64000 assert voice_channel.user_limit == 3 + assert voice_channel.last_message_id == 1000101 assert isinstance(voice_channel, channel_models.GuildStageChannel) def test_deserialize_guild_stage_channel_with_null_fields(self, entity_factory_impl): @@ -2034,10 +2036,12 @@ def test_deserialize_guild_stage_channel_with_null_fields(self, entity_factory_i "user_limit": 3, "rtc_region": None, "type": 6, + "last_message_id": None, } ) assert voice_channel.parent_id is None assert voice_channel.region is None + assert voice_channel.last_message_id is None def test_deserialize_guild_stage_channel_with_unset_fields(self, entity_factory_impl): voice_channel = entity_factory_impl.deserialize_guild_stage_channel( @@ -2055,6 +2059,7 @@ def test_deserialize_guild_stage_channel_with_unset_fields(self, entity_factory_ ) assert voice_channel.parent_id is None assert voice_channel.is_nsfw is False + assert voice_channel.last_message_id is None @pytest.fixture() def guild_forum_channel_payload(self, permission_overwrite_payload):