9.6 KiB
Voice Chat Feature - Phase 1 Testing Guide
Testing Environment Setup
✅ Bot rebuilt and restarted with new dependencies:
- PyNaCl>=1.5.0 (Discord voice support)
- websockets>=12.0 (TTS WebSocket client)
Test Checklist
🎯 Test 1: Voice Commands Basic Functionality
1A. Test !miku join Command
Prerequisites:
- Be in a Discord server where Miku is present
- Join a voice channel first
Steps:
1. Join any voice channel in the server
2. Type: !miku join
Expected Results:
- ✅ Miku joins your voice channel
- ✅ You receive an embed message with:
- Title: "🎤 Joined Voice Chat!"
- Teal color (#86CECB)
- Instructions on how to talk to Miku
- List of 8 blocked features
- ✅ Bot logs show all 9 resource locks activating:
[INFO] Switching to AMD GPU for voice session [INFO] Vision model blocked [INFO] Image generation disabled [INFO] Text channels paused [INFO] Bipolar interactions paused [INFO] Profile picture switching locked [INFO] Autonomous system paused [INFO] Scheduler paused [INFO] Figurine notifier paused
How to Check Logs:
docker-compose logs miku-bot --tail 100 | grep -i "voice\|blocked\|paused\|locked"
1B. Test !miku voice-status Command
Steps:
1. While voice session is active, type: !miku voice-status
Expected Results:
- ✅ Embed showing:
- Voice channel name
- Prompt channel name (where you typed the command)
- List of all 8 blocked features with ❌ icons
1C. Test !miku leave Command
Steps:
1. Type: !miku leave
Expected Results:
- ✅ Miku disconnects from voice channel
- ✅ Confirmation message: "👋 Left voice chat and restored all features!"
- ✅ Bot logs show all 9 resource locks releasing:
[INFO] Switched back to GTX GPU [INFO] Vision model unblocked [INFO] Image generation re-enabled [INFO] Text channels resumed [INFO] Bipolar interactions resumed [INFO] Profile picture switching unlocked [INFO] Autonomous system resumed [INFO] Scheduler resumed [INFO] Figurine notifier resumed
🚫 Test 2: Resource Blocking - Vision Model
Steps:
1. Type: !miku join (in a text channel)
2. Upload an image or video to the text channel
3. Wait for Miku's response
Expected Results:
- ✅ Miku responds: "🎤 I can't look at images or videos right now, I'm talking in voice chat! Send it again after I leave the voice channel."
- ✅ Image is NOT processed
- ✅ No vision model loading attempts in logs
🚫 Test 3: Resource Blocking - Image Generation
Steps:
1. Type: !miku join
2. Try to request an image (e.g., "draw a picture of yourself")
3. Wait for response
Expected Results:
- ✅ Miku responds: "🎤 I can't draw right now, I'm talking in voice chat! Ask me again after I leave the voice channel."
- ✅ Message gets a 🎤 reaction added
- ✅ No ComfyUI requests in logs
- ✅ Log shows: "[INFO] 🚫 Image generation blocked - voice session active"
🚫 Test 4: Resource Blocking - Profile Picture Changes
Steps:
1. Type: !miku join
2. Try to trigger a mood change that would normally change profile picture
(This might happen automatically or through commands)
Expected Results:
- ✅ Profile picture does NOT change
- ✅ Logs show: "[INFO] Profile picture switching locked"
- ✅ Error log: "Profile picture switching locked during voice session"
🚫 Test 5: Resource Blocking - Autonomous Engine
Steps:
1. Type: !miku join
2. Wait 30+ seconds (normal autonomous action interval)
3. Check if autonomous messages appear
Expected Results:
- ✅ NO autonomous messages appear
- ✅ Logs show: "[DEBUG] Autonomous system paused, skipping tick"
🚫 Test 6: Resource Blocking - Bipolar Mode
Prerequisites:
- Bipolar mode must be enabled on the server
Steps:
1. Type: !miku join
2. Try to trigger a bipolar argument (this has a 15% random chance)
3. Or check if any arguments start naturally
Expected Results:
- ✅ NO bipolar arguments start
- ✅ Logs show: "[DEBUG] Bipolar interactions paused, skipping argument trigger"
🚫 Test 7: Resource Blocking - Scheduled Events
This test requires waiting for a scheduled event time
Expected Behavior:
- ✅ During voice session, scheduled events (bedtime, mood rotations) should NOT fire
- ✅ Check logs for: "Scheduler paused" / "Scheduler resumed"
🚫 Test 8: Resource Blocking - Figurine Notifier
This test requires waiting for figurine notification time
Expected Behavior:
- ✅ During voice session, figurine notifications should NOT send
- ✅ Check logs for: "Figurine notifier paused" / "Figurine notifier resumed"
🔄 Test 9: Session Persistence
Steps:
1. Type: !miku join
2. Leave the server text channel
3. Go to a different text channel
4. Type: !miku voice-status
Expected Results:
- ✅ Status correctly shows the original voice channel and prompt channel
- ✅ Session persists across channel changes
⚠️ Test 10: Error Handling
10A. Join Without Being in Voice
Steps:
1. Don't join any voice channel
2. Type: !miku join
Expected Results:
- ✅ Error message: "You need to be in a voice channel first!"
10B. Leave When Not in Session
Steps:
1. Make sure no voice session is active
2. Type: !miku leave
Expected Results:
- ✅ Message: "I'm not in a voice chat right now!"
10C. Join While Already in Session
Steps:
1. Type: !miku join
2. Try: !miku join again
Expected Results:
- ✅ Error message preventing duplicate session start
🔍 Test 11: GPU Switching
This requires checking the gpu_state.json file
Steps:
1. Check current GPU state:
cat /home/koko210Serve/docker/miku-discord/gpu_state.json
2. Type: !miku join
3. Check GPU state again:
cat /home/koko210Serve/docker/miku-discord/gpu_state.json
4. Type: !miku leave
5. Check GPU state one more time
Expected Results:
- ✅ Before join:
{"current": "gtx"} - ✅ After join:
{"current": "amd"} - ✅ After leave:
{"current": "gtx"}
Command:
watch -n 2 'cat /home/koko210Serve/docker/miku-discord/gpu_state.json'
📋 Test 12: Text Channel Pausing
Steps:
1. Type: !miku join in a text channel
2. Try sending normal messages to Miku in that channel
Expected Results:
- ✅ Miku does NOT respond to normal text messages
- ✅ Messages get queued in TEXT_MESSAGE_QUEUE (visible in logs)
- ✅ Only voice commands (!miku join/leave/voice-status) work
Quick Testing Script
Run all tests at once by copying this into Discord:
# Test 1: Join
!miku join
# Test 2: Check status
!miku voice-status
# Test 3: Try to block image processing
[Upload an image here]
# Test 4: Try to block image generation
can you draw a picture of a cat?
# Test 5: Leave
!miku leave
# Test 6: Verify features restored
[Upload an image here - should work now]
Monitoring Commands
Watch Bot Logs in Real-Time
docker-compose logs -f miku-bot | grep -i "voice\|block\|pause\|lock"
Check GPU State
cat /home/koko210Serve/docker/miku-discord/gpu_state.json
Check for Errors
docker-compose logs miku-bot --tail 200 | grep -i "error\|exception"
Full Voice-Related Logs
docker-compose logs miku-bot --tail 500 | grep -E "(voice|Voice|VOICE)"
Success Criteria
Phase 1 is considered PASSING if:
✅ Core Functionality:
- Bot successfully joins voice channel
- Bot successfully leaves voice channel
- Status command shows accurate information
✅ Resource Blocking (5 critical checks):
- Vision model blocked during session
- Image generation blocked during session
- Profile pictures locked during session
- Autonomous engine paused during session
- Bipolar mode paused during session
✅ System Integrity:
- All locks properly released after leaving
- GPU switches to AMD during session
- No crashes or exceptions during session lifecycle
- Text channel responses properly paused
✅ Logging:
- All lock/unlock actions logged
- Clear user-facing error messages
- Debug information available for troubleshooting
Known Limitations (Phase 1)
⚠️ Expected Behaviors (Not Bugs):
- ❌ No actual audio playback yet (Phase 2)
- ❌ No LLM streaming to TTS yet (Phase 3)
- ❌ Miku doesn't actually respond in voice (Phase 3)
- ⚠️ Text input still from text channel (temporary - STT in Phase 4)
These are intentional Phase 1 limitations and will be addressed in future phases.
Troubleshooting
Issue: Bot doesn't join voice channel
Check:
# Verify PyNaCl is installed
docker-compose exec miku-bot python -c "import nacl; print('PyNaCl OK')"
# Check permissions
# Bot needs "Connect" and "Speak" permissions in Discord
Issue: Resource blocks not working
Check:
# Verify imports succeeded
docker-compose logs miku-bot | grep -i "import\|module"
# Check if voice_manager loaded
docker-compose logs miku-bot | grep "voice_manager"
Issue: Commands not recognized
Check:
# Verify command_router.py imports voice commands
docker-compose logs miku-bot | grep "voice command"
Next Steps After Phase 1 Testing
Once all tests pass, proceed to:
📋 Phase 2: Audio Streaming Implementation
- Implement MikuVoiceSource class (discord.AudioSource)
- Create WebSocket → Discord audio bridge
- Handle audio format conversion
- Test actual voice playback
See: VOICE_CHAT_IMPLEMENTATION_PLAN.md for Phase 2 details