185 lines
4.5 KiB
Markdown
185 lines
4.5 KiB
Markdown
|
|
# Testing the Jackbox Player Count Script
|
||
|
|
|
||
|
|
## Prerequisites
|
||
|
|
|
||
|
|
1. Go 1.21+ installed
|
||
|
|
2. Chrome or Chromium browser installed
|
||
|
|
3. Active Jackbox lobby with a valid room code
|
||
|
|
|
||
|
|
## Running the Script
|
||
|
|
|
||
|
|
### Basic Usage
|
||
|
|
|
||
|
|
```bash
|
||
|
|
cd scripts
|
||
|
|
go run get-player-count.go JYET
|
||
|
|
```
|
||
|
|
|
||
|
|
Replace `JYET` with your actual room code.
|
||
|
|
|
||
|
|
### Debug Mode
|
||
|
|
|
||
|
|
If the script isn't capturing data, run with debug output:
|
||
|
|
|
||
|
|
```bash
|
||
|
|
DEBUG=true go run get-player-count.go JYET
|
||
|
|
```
|
||
|
|
|
||
|
|
This will show:
|
||
|
|
- Each WebSocket frame received
|
||
|
|
- Parsed opcodes
|
||
|
|
- Detailed connection info
|
||
|
|
|
||
|
|
## Expected Output
|
||
|
|
|
||
|
|
### Success
|
||
|
|
|
||
|
|
```
|
||
|
|
🎮 Jackbox Player Count Fetcher
|
||
|
|
Room Code: JYET
|
||
|
|
|
||
|
|
⏳ Navigating to jackbox.tv...
|
||
|
|
✓ Loaded jackbox.tv
|
||
|
|
⏳ Joining room JYET...
|
||
|
|
✓ Clicked Play button, waiting for WebSocket data...
|
||
|
|
✓ Captured lobby data from WebSocket
|
||
|
|
|
||
|
|
═══════════════════════════════════════════
|
||
|
|
Jackbox Room Status
|
||
|
|
═══════════════════════════════════════════
|
||
|
|
|
||
|
|
Room Code: JYET
|
||
|
|
Game: triviadeath
|
||
|
|
Game State: Lobby
|
||
|
|
Lobby State: CanStart
|
||
|
|
Locked: false
|
||
|
|
Full: false
|
||
|
|
|
||
|
|
Players: 3 / 8
|
||
|
|
Audience: 0
|
||
|
|
|
||
|
|
Current Players:
|
||
|
|
1. Host (host)
|
||
|
|
2. E (player)
|
||
|
|
3. F (player)
|
||
|
|
|
||
|
|
═══════════════════════════════════════════
|
||
|
|
```
|
||
|
|
|
||
|
|
### If No WebSocket Messages Captured
|
||
|
|
|
||
|
|
```
|
||
|
|
Error: no WebSocket messages captured - connection may have failed
|
||
|
|
Try running with DEBUG=true for more details
|
||
|
|
```
|
||
|
|
|
||
|
|
**Possible causes:**
|
||
|
|
- Room code is invalid
|
||
|
|
- Game lobby is closed
|
||
|
|
- Network connectivity issues
|
||
|
|
|
||
|
|
### If Messages Captured but No Player Data
|
||
|
|
|
||
|
|
```
|
||
|
|
⚠️ Captured 15 WebSocket messages but couldn't find 'client/welcome'
|
||
|
|
|
||
|
|
Message types found:
|
||
|
|
- room/update: 5
|
||
|
|
- audience/count: 3
|
||
|
|
- ping: 7
|
||
|
|
|
||
|
|
Error: could not find player count data in WebSocket messages
|
||
|
|
Room may be invalid, closed, or not in lobby state
|
||
|
|
```
|
||
|
|
|
||
|
|
**Possible causes:**
|
||
|
|
- Game has already started (not in lobby)
|
||
|
|
- Room code exists but game is in different state
|
||
|
|
- WebSocket connected but welcome message not sent
|
||
|
|
|
||
|
|
## Troubleshooting
|
||
|
|
|
||
|
|
### Cookie Errors (Harmless)
|
||
|
|
|
||
|
|
You may see errors like:
|
||
|
|
```
|
||
|
|
ERROR: could not unmarshal event: parse error: expected string near offset 1247 of 'cookiePart...'
|
||
|
|
```
|
||
|
|
|
||
|
|
**These are harmless** and are suppressed in the output. They're chromedp trying to parse cookie data that doesn't follow expected format.
|
||
|
|
|
||
|
|
### "Failed to load jackbox.tv"
|
||
|
|
|
||
|
|
- Check your internet connection
|
||
|
|
- Verify https://jackbox.tv loads in a regular browser
|
||
|
|
- Try running without `headless` mode (edit the Go file)
|
||
|
|
|
||
|
|
### "Failed to enter room code"
|
||
|
|
|
||
|
|
- Verify the room code is valid
|
||
|
|
- Check that the lobby is actually open
|
||
|
|
- Try running with DEBUG=true to see what's happening
|
||
|
|
|
||
|
|
### "Failed to click Play button"
|
||
|
|
|
||
|
|
- The button may still be disabled
|
||
|
|
- Room code validation may have failed
|
||
|
|
- Name field may not be filled
|
||
|
|
|
||
|
|
### No WebSocket Messages at All
|
||
|
|
|
||
|
|
This means the browser never connected to the game's WebSocket server:
|
||
|
|
- Verify the room code is correct
|
||
|
|
- Check that the game lobby is actually open and accepting players
|
||
|
|
- The game may have a full lobby
|
||
|
|
- The room may have expired
|
||
|
|
|
||
|
|
## Testing with Different Game States
|
||
|
|
|
||
|
|
### Lobby (Should Work)
|
||
|
|
When the game is in the lobby waiting for players to join.
|
||
|
|
|
||
|
|
### During Game (May Not Work)
|
||
|
|
Once the game starts, the WebSocket messages change. The `client/welcome` message may not be sent.
|
||
|
|
|
||
|
|
### After Game (Won't Work)
|
||
|
|
Room codes expire after the game session ends.
|
||
|
|
|
||
|
|
## Manual Verification
|
||
|
|
|
||
|
|
You can verify the data by:
|
||
|
|
|
||
|
|
1. Open https://jackbox.tv in a regular browser
|
||
|
|
2. Open Developer Tools (F12)
|
||
|
|
3. Go to Network tab
|
||
|
|
4. Filter by "WS" (WebSocket)
|
||
|
|
5. Join the room with the same code
|
||
|
|
6. Look for `client/welcome` message in WebSocket frames
|
||
|
|
7. Compare the data with what the script outputs
|
||
|
|
|
||
|
|
## Common Room States
|
||
|
|
|
||
|
|
| State | `client/welcome` | Player Count Available |
|
||
|
|
|-------|------------------|------------------------|
|
||
|
|
| Lobby - Waiting | ✅ Yes | ✅ Yes |
|
||
|
|
| Lobby - Full | ✅ Yes | ✅ Yes |
|
||
|
|
| Game Starting | ⚠️ Maybe | ⚠️ Maybe |
|
||
|
|
| Game In Progress | ❌ No | ❌ No |
|
||
|
|
| Game Ended | ❌ No | ❌ No |
|
||
|
|
|
||
|
|
## Performance Notes
|
||
|
|
|
||
|
|
- Takes ~5-10 seconds to complete
|
||
|
|
- Most time is waiting for WebSocket connection
|
||
|
|
- Headless Chrome startup adds ~1-2 seconds
|
||
|
|
- Network latency affects timing
|
||
|
|
|
||
|
|
## Next Steps
|
||
|
|
|
||
|
|
If the script works:
|
||
|
|
1. Extract the function into a library package
|
||
|
|
2. Integrate with your bot
|
||
|
|
3. Set up cron jobs or periodic polling
|
||
|
|
4. Add result caching to reduce load
|
||
|
|
|