Files
jackboxpartypack-gamepicker/chrome-extension/README.md

214 lines
6.2 KiB
Markdown
Raw Normal View History

# Jackbox Chat Tracker Chrome Extension
A Chrome extension for tracking Jackbox game votes (`thisgame++` and `thisgame--`) from Kosmi chat.
## Features
- ✅ Tracks `thisgame++` and `thisgame--` votes in Kosmi chat
- ✅ Records username, full message, and UTC timestamp
- ✅ Case-insensitive matching (works with `THISGAME++`, `ThisGame--`, etc.)
- ✅ Matches votes anywhere in the message
- ✅ Exports data as JSON in the format expected by the Jackbox Game Picker app
- ✅ Real-time vote tracking with live updates
- ✅ Simple, intuitive interface
## Installation
1. Open Chrome and navigate to `chrome://extensions/`
2. Enable "Developer mode" in the top right
3. Click "Load unpacked"
4. Select the `chrome-extension` folder
5. The extension is now installed!
## Usage
### Starting a Tracking Session
1. Navigate to a Kosmi room: `https://app.kosmi.io/room/...`
2. Click the extension icon in your browser toolbar
3. Click "Start Tracking"
4. The extension will now monitor chat for votes
### Viewing Votes
- The popup shows all recorded votes in real-time
- Each vote displays:
- Username
- Full message text
- Timestamp (in your local timezone)
- Vote type (positive/negative indicated by color)
### Exporting Data
1. Click "Export JSON" to download votes
2. The file format matches the Jackbox Game Picker import format:
```json
[
{
"username": "Alice",
"message": "thisgame++",
"timestamp": "2025-10-30T20:15:00Z"
}
]
```
3. Import this JSON file into the Jackbox Game Picker app
### Resetting Votes
- Click "Reset Votes" to clear all recorded votes
- Confirmation dialog prevents accidental resets
## How It Works
The extension hooks into Kosmi's GraphQL WebSocket API (`wss://engine.kosmi.io/gql-ws`) to monitor real-time chat messages. This is much more reliable than DOM parsing!
When a message is received, the extension:
1. Checks if it contains `thisgame++` or `thisgame--` (case-insensitive)
2. Extracts the **username** from the GraphQL response
3. Extracts the **full message text**
4. Records the **UTC timestamp**
### Why WebSocket?
Previous versions used DOM parsing (MutationObserver), which was fragile and prone to breaking when Kosmi updated their UI. Version 3.0.0 uses Kosmi's own GraphQL API, which is:
- ✅ More reliable (API is stable)
- ✅ Faster (no DOM traversal needed)
- ✅ More accurate (username is always correct)
- ✅ Less CPU intensive (no constant DOM monitoring)
## Vote Format
**Input** (Kosmi chat):
```
Alice: This is great! thisgame++
Bob: thisgame-- not my favorite
Charlie: THISGAME++ love it!
```
**Output** (JSON export):
```json
[
{
"username": "Alice",
"message": "This is great! thisgame++",
"timestamp": "2025-10-30T20:15:00.123Z"
},
{
"username": "Bob",
"message": "thisgame-- not my favorite",
"timestamp": "2025-10-30T20:15:15.456Z"
},
{
"username": "Charlie",
"message": "THISGAME++ love it!",
"timestamp": "2025-10-30T20:15:30.789Z"
}
]
```
## Technical Details
### Files
- `manifest.json`: Extension configuration
- `content.js`: Monitors Kosmi chat and records votes
- `popup.html`: Extension popup interface
- `popup.js`: Popup logic and controls
- `popup.css`: Popup styling
- `icons/`: Extension icons
### Permissions
- `storage`: Save votes locally
- `activeTab`: Access current Kosmi tab
- `downloads`: Export JSON files
- `https://app.kosmi.io/*`: Access Kosmi chat
### Data Storage
- Votes are stored locally using Chrome's `storage.local` API
- Data persists across browser sessions
- No data is sent to external servers
## Changelog
### Version 3.0.1 (Current)
- 🐛 Fixed infinite retry loop when Apollo Client not found
- 🐛 Disabled auto-start on page load (user must manually start tracking)
- ✅ Added retry limit (10 attempts max, then gives up gracefully)
- ✅ Only sets `isTracking = true` after successfully hooking into Apollo Client
- ✅ Better error messages with attempt counter
### Version 3.0.0
- 🎉 **Complete rewrite using GraphQL WebSocket API**
- ✅ Hooks directly into Kosmi's Apollo Client
- ✅ 100% reliable message and username extraction
- ✅ No more DOM parsing or MutationObserver
- ✅ Lightweight and performant
- ✅ Future-proof (API-based, not DOM-based)
- ❌ Removed fragile DOM traversal code
- ❌ No more "Unknown" usernames
### Version 2.0.2
- 🐛 Fixed sidebar responsiveness with polling updates
- 🐛 Fixed MutationObserver not detecting new messages
- 🐛 Suppressed "Could not establish connection" errors
- ✅ Added extensive debug logging for troubleshooting
- ✅ Observer now properly disconnects and reconnects on start
### Version 2.0.1
- 🐛 Fixed duplicate vote counting issue
- 🐛 Improved username extraction with multiple fallback strategies
- ✅ Re-added sidebar panel support
### Version 2.0.0
- ✅ Simplified to only track `thisgame++` and `thisgame--`
- ✅ Removed complex game alias system
- ✅ Captures full message context
- ✅ UTC timestamp recording
- ✅ New JSON export format
- ✅ Improved UI with vote preview
- ✅ Case-insensitive matching
## Troubleshooting
**Extension not detecting votes:**
1. Make sure you're on a Kosmi room page (`app.kosmi.io/room/...`)
2. Click "Stop Tracking" then "Start Tracking" to reset
3. Check browser console for errors (F12 → Console tab)
**Votes not saving:**
1. Check Chrome's storage permissions
2. Try resetting votes and starting fresh
3. Ensure extension has permission to access Kosmi
**Export not working:**
1. Check Chrome's download permissions
2. Ensure popup blockers aren't blocking downloads
3. Try clicking "Export JSON" again
**Extension not loading:**
1. Make sure you've reloaded the extension after updating files
2. Go to `chrome://extensions/`, find "Jackbox Chat Tracker", and click the reload icon
3. Refresh the Kosmi room page after reloading the extension
**Apollo Client not found:**
1. The extension needs a moment after page load to find Apollo Client
2. Wait 2-3 seconds after the page loads, then click "Start Tracking"
3. Check console for "Apollo Client not found!" error
4. If error persists, Kosmi may have changed their client framework
## Support
For issues or questions, please file an issue in the main repository.
## License
Same as main Jackbox Game Picker project.