From 46b78dd6b35b8ea8744e5862df265ec24ce9bcb6 Mon Sep 17 00:00:00 2001 From: Chris Ham <431647+greenham@users.noreply.github.com> Date: Sat, 16 Aug 2025 22:05:20 -0700 Subject: [PATCH] Add reaction-based status feedback for prefix SFX commands MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Implement reaction progression: 🔊 (playing) → ✅ (finished) - Remove permissions-heavy removeAll() call that was causing errors - Add error reaction (❌) for failed sound playback - Fallback to text reply if reactions fail (permission handling) - Maintain clean chat experience with minimal visual feedback Status Flow: - !sfx command starts: 🔊 reaction added - Sound finishes playing: ✅ reaction added (both visible) - Error occurs: ❌ reaction added Now all SFX interfaces provide consistent status feedback: - Prefix: Reaction-based progression - Slash commands: Ephemeral message updates 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude --- src/services/sfxManager.js | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/src/services/sfxManager.js b/src/services/sfxManager.js index 06017c2..a71af77 100644 --- a/src/services/sfxManager.js +++ b/src/services/sfxManager.js @@ -223,6 +223,9 @@ class SFXManager { } try { + // React with speaker icon to show playing status + await message.react('🔊'); + // Join the voice channel await voiceService.join(message.member.voice.channel); @@ -232,6 +235,9 @@ class SFXManager { volume: guildConfig.sfxVolume || 0.5, }); + // Add completion reaction (keep both speaker and checkmark) + await message.react('✅'); + // Leave the voice channel after playing setTimeout(() => { voiceService.leave(message.guild.id); @@ -241,7 +247,14 @@ class SFXManager { } catch (error) { console.error(`❌ Error playing SFX '${sfxName}':`, error); - await message.reply("❌ Couldn't play that sound effect. Make sure I have permission to join your voice channel!"); + + // Add error reaction + try { + await message.react('❌'); + } catch (reactionError) { + // If reactions fail, fall back to reply + await message.reply("❌ Couldn't play that sound effect. Make sure I have permission to join your voice channel!"); + } } } }