diff --git a/lib/src/http/managers/message_manager.dart b/lib/src/http/managers/message_manager.dart index b19897232..0a7bf674f 100644 --- a/lib/src/http/managers/message_manager.dart +++ b/lib/src/http/managers/message_manager.dart @@ -100,6 +100,7 @@ class MessageManager extends Manager { resolved: maybeParse(raw['resolved'], (Map raw) => client.interactions.parseResolvedData(raw, guildId: guildId, channelId: channelId)), poll: maybeParse(raw['poll'], parsePoll), call: maybeParse(raw['call'], parseMessageCall), + soundboardSounds: snapshot.soundboardSounds, ); } @@ -408,6 +409,11 @@ class MessageManager extends Manager { type: MessageType(raw['type'] as int), stickers: parseMany(raw['sticker_items'] as List? ?? [], client.stickers.parseStickerItem), components: maybeParseMany(raw['components'], parseMessageComponent), + soundboardSounds: maybeParseMany(raw['soundboard_sounds'] as List?, (Map raw) { + final guildId = maybeParse(raw['guild_id'], Snowflake.parse); + + return client.guilds[guildId ?? Snowflake.zero].soundboard.parse(raw); + }), ); } diff --git a/lib/src/models/message/message.dart b/lib/src/models/message/message.dart index ce9fac63b..a11a25d50 100644 --- a/lib/src/models/message/message.dart +++ b/lib/src/models/message/message.dart @@ -18,6 +18,7 @@ import 'package:nyxx/src/models/channel/text_channel.dart'; import 'package:nyxx/src/models/message/role_subscription_data.dart'; import 'package:nyxx/src/models/snowflake.dart'; import 'package:nyxx/src/models/snowflake_entity/snowflake_entity.dart'; +import 'package:nyxx/src/models/soundboard/soundboard.dart'; import 'package:nyxx/src/models/sticker/sticker.dart'; import 'package:nyxx/src/models/user/user.dart'; import 'package:nyxx/src/models/webhook.dart'; @@ -204,6 +205,9 @@ class Message extends PartialMessage implements MessageSnapshot { /// Information about a call in a DM channel. final MessageCall? call; + @override + final List? soundboardSounds; + /// {@macro message} /// @nodoc Message({ @@ -242,6 +246,7 @@ class Message extends PartialMessage implements MessageSnapshot { required this.resolved, required this.poll, required this.call, + required this.soundboardSounds, }); /// The webhook that sent this message if it was sent by a webhook, `null` otherwise. @@ -498,6 +503,9 @@ class MessageSnapshot with ToStringHelper { /// A list of components in this message. final List? components; + /// A list of soundmojis sent. + final List? soundboardSounds; + /// @nodoc MessageSnapshot({ required this.timestamp, @@ -511,6 +519,7 @@ class MessageSnapshot with ToStringHelper { required this.roleMentionIds, required this.stickers, required this.components, + required this.soundboardSounds, }); } diff --git a/test/unit/http/managers/message_manager_test.dart b/test/unit/http/managers/message_manager_test.dart index 68050a7ba..366c5e04c 100644 --- a/test/unit/http/managers/message_manager_test.dart +++ b/test/unit/http/managers/message_manager_test.dart @@ -242,6 +242,17 @@ final sampleForwardedMessage = { }, 'attachments': [], 'guild_id': '1033681997136146462', + 'soundboard_sounds': [ + { + 'name': 'User Banned', + 'sound_id': '1143974146414481529', + 'volume': .85, + 'emoji_id': null, + 'emoji_name': '💥', + 'guild_id': '1234567891234567890', + 'available': true + } + ], }; void checkForwardedMessage(Message message) { @@ -302,6 +313,19 @@ void checkForwardedMessage(Message message) { expect(message.resolved, isNull); expect(message.poll, isNull); expect(message.call, isNull); + expect(message.soundboardSounds, [ + wrapMatcher((SoundboardSound soundboardSound) { + expect(soundboardSound.emoji, isA()); + expect(soundboardSound.emoji!.name, '💥'); + expect(soundboardSound.name, 'User Banned'); + expect(soundboardSound.guildId, equals(const Snowflake(1234567891234567890))); + expect(soundboardSound.volume, equals(0.85)); + expect(soundboardSound.isAvailable, equals(true)); + expect(soundboardSound.id, equals(const Snowflake(1143974146414481529))); + + return true; + }) + ]); } final sampleMessageInteractionMetadata = {