Skip to content

Commit

Permalink
Add SoundboardSoundsUpdateEvent
Browse files Browse the repository at this point in the history
  • Loading branch information
Lexedia committed Oct 12, 2024
1 parent 06ef571 commit 825fbe8
Show file tree
Hide file tree
Showing 4 changed files with 38 additions and 0 deletions.
3 changes: 3 additions & 0 deletions lib/src/event_mixin.dart
Original file line number Diff line number Diff line change
Expand Up @@ -272,6 +272,9 @@ mixin EventMixin implements Nyxx {
/// A [Stream] of [SoundboardSoundCreateEvent]s received by this client.
Stream<SoundboardSoundCreateEvent> get onSoundboardSoundCreate => onEvent.whereType<SoundboardSoundCreateEvent>();

/// A [Stream] of [SoundboardSoundsUpdateEvent]s received by this client.
Stream<SoundboardSoundsUpdateEvent> get onSoundboardSoundsUpdate => onEvent.whereType<SoundboardSoundsUpdateEvent>();

/// A [Stream] of [VoiceChannelEffectSendEvent]s received by this client.
Stream<VoiceChannelEffectSendEvent> get onVoiceChannelEffectSend => onEvent.whereType<VoiceChannelEffectSendEvent>();
}
16 changes: 16 additions & 0 deletions lib/src/gateway/gateway.dart
Original file line number Diff line number Diff line change
Expand Up @@ -301,6 +301,7 @@ class Gateway extends GatewayManager with EventParser {
'GUILD_SOUNDBOARD_SOUND_CREATE': parseSoundboardSoundCreate,
'GUILD_SOUNDBOARD_SOUND_UPDATE': parseSoundboardSoundUpdate,
'GUILD_SOUNDBOARD_SOUND_DELETE': parseSoundboardSoundDelete,
'GUILD_SOUNDBOARD_SOUNDS_UPDATE': parseSoundboardSoundsUpdate,
};

return mapping[raw.name]?.call(raw.payload) ?? UnknownDispatchEvent(gateway: this, raw: raw);
Expand Down Expand Up @@ -1215,6 +1216,21 @@ class Gateway extends GatewayManager with EventParser {
);
}

SoundboardSoundsUpdateEvent parseSoundboardSoundsUpdate(Map<String, Object?> raw) {
final guildId = Snowflake.parse(raw['guild_id']!);

final sounds = parseMany(raw['sounds'] as List<Object?>, client.guilds[guildId].soundboard.parse);

final oldSounds = sounds.map((sound) => client.guilds[guildId].soundboard.cache[sound.id]).toList();

return SoundboardSoundsUpdateEvent(
gateway: this,
guildId: guildId,
sounds: sounds,
oldSounds: oldSounds,
);
}

/// Update the client's voice state in the guild with ID [guildId].
void updateVoiceState(Snowflake guildId, GatewayVoiceStateBuilder builder) => shardFor(guildId).updateVoiceState(guildId, builder);

Expand Down
18 changes: 18 additions & 0 deletions lib/src/models/gateway/events/soundboard.dart
Original file line number Diff line number Diff line change
Expand Up @@ -49,3 +49,21 @@ class SoundboardSoundDeleteEvent extends DispatchEvent {

PartialGuild get guild => gateway.client.guilds[guildId];
}

/// {@template soundboard_sounds_update_event}
/// Emitted when multiple guild soundboard sounds are updated.
/// {@endtemplate}
class SoundboardSoundsUpdateEvent extends DispatchEvent {
/// The ID of the guild where the sounds were updated.
final Snowflake guildId;

/// The sounds that were updated.
final List<SoundboardSound> sounds;

/// The old sounds.
final List<SoundboardSound?> oldSounds;

/// {@macro soundboard_sounds_update_event}
/// @nodoc
SoundboardSoundsUpdateEvent({required super.gateway, required this.guildId, required this.sounds, required this.oldSounds});
}
1 change: 1 addition & 0 deletions lib/src/utils/cache_helpers.dart
Original file line number Diff line number Diff line change
Expand Up @@ -298,6 +298,7 @@ extension CacheUpdates on NyxxRest {
SoundboardSoundCreateEvent(:final sound) => updateCacheWith(sound),
SoundboardSoundUpdateEvent(:final sound) => updateCacheWith(sound),
SoundboardSoundDeleteEvent(:final sound?) => sound.manager.cache.remove(sound.id),
SoundboardSoundsUpdateEvent(:final sounds) => sounds.forEach(updateCacheWith),
MessagePollVoteAddEvent() => null,
MessagePollVoteRemoveEvent() => null,

Expand Down

0 comments on commit 825fbe8

Please sign in to comment.