214 lines
6.2 KiB
Markdown
214 lines
6.2 KiB
Markdown
# 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.
|
|
|