Guess Game¶
What's Now Playing includes an interactive hangman-style game that runs in your Twitch chat, allowing viewers to guess the currently playing track and artist. Players earn points for correct guesses, with a leaderboard system to track top performers across your stream session and all-time.
What It Provides¶
- Interactive Chat Game: Viewers type commands like
!guess eor!guess houseto play - Automatic Announcements: Bot announces new games in chat when tracks change
- Real-time OBS Display: Shows masked track/artist names and game state in your stream overlay
- Online Game Board: Optional web display at whatsnowplaying.com with Charts API integration
- Leaderboard System: Tracks both session and all-time scores with configurable size
- Flexible Solve Modes: Configure whether viewers must guess track, artist, or both
- Smart Scoring: Points awarded based on letter frequency (rare letters = more points)
- Automatic Games: New games start when your track changes and end after a configurable duration
- User Statistics: Players can check their stats with a customizable command (default:
!mypoints)
Setup¶
Prerequisites¶
Before enabling the Guess Game, you must have:
- Twitch Bot configured: See TwitchBot for authentication setup
- Webserver enabled: See Webserver for configuration
Enable the Chat Commands¶
The Guess Game adds two chat command templates (twitchbot_guess.txt and twitchbot_mypoints.txt)
that are disabled by default. You must enable them in the Twitch Bot settings:
- Open Settings from the What's Now Playing menu/tray icon
- Select Twitch Bot from the Streaming & Chat section
- Find the
guessandmypointsentries in the permissions list and check the appropriate permission levels (e.g. Everyone) - Click Save
See TwitchBot → Setting Permissions for details.
Enabling the Guess Game¶
macOS:
- Click the What's Now Playing menu bar icon
- Check Enable Guess Game
Windows:
- Right-click the What's Now Playing system tray icon
- Check Enable Guess Game
Linux:
- Click the What's Now Playing system tray icon
- Check Enable Guess Game
Configuration¶
- Open Settings from the What's Now Playing menu/tray icon
- Select Guessgame from the Streaming & Chat section
- Configure the settings on each tab:
Basic Settings Tab¶
| Setting | Description | Default |
|---|---|---|
| Guess Command | Chat command viewers use to submit guesses | guess |
| Stats Command | Chat command viewers use to check their statistics | mypoints |
| Game Duration | Maximum time in seconds before game times out | 120 (2 minutes) |
| Leaderboard Size | Number of top players shown on leaderboard | 10 |
| First Solver Bonus Threshold | Difficulty threshold (0.0-1.0) for awarding first solver bonus | 0.70 |
| Solve Mode | How the game determines completion (see below) | Separate Solves |
Solve Modes:
- Separate Solves: Track and artist are independent objectives (players can solve one without the other)
- Either: Exact match of track OR artist wins the entire game
- Both Required: Players must guess both track AND artist together to win
Advanced Tab¶
Scoring Configuration:
| Setting | Description | Default |
|---|---|---|
| Common Letter Points | Points for guessing common letters (e, a, o, etc.) | 1 |
| Uncommon Letter Points | Points for guessing uncommon letters (d, h, etc.) | 2 |
| Rare Letter Points | Points for guessing rare letters (x, z, q, etc.) | 3 |
| Correct Word Points | Points for guessing a correct word in track/artist | 10 |
| Wrong Word Points | Penalty for guessing an incorrect word | -1 |
| Complete Solve Points | Bonus for completely solving track or artist | 100 |
| First Solver Bonus | Additional bonus for being first to solve (on difficult tracks) | 50 |
Advanced Options:
| Setting | Description | Default |
|---|---|---|
| Auto Reveal Common Words | Automatically reveal very common words (the, and, of, etc.) | Disabled |
| Time Bonus Enabled | Award bonus points for solving quickly | Disabled |
| Send to Server | Enable online game board at whatsnowplaying.com (requires Charts API key) | Enabled |
| Grace Period | Seconds after game ends to still accept guesses (accounts for Twitch stream delay) | 5 |
Leaderboard Management:
- Clear All Leaderboards button: Permanently deletes all user scores (session and all-time)
OBS Integration¶
The Guess Game provides two OBS browser sources for displaying game information on your stream:
Game Display¶
Shows the current game state with masked track and artist names, time remaining, guessed letters, and game status (Active, Solved, Timeout, Waiting).
- Add a Browser source in OBS
- Set URL to:
http://localhost:8899/guessgame/guessgame.htm - Set dimensions:
640x600(adjust height based on your typical track/artist name lengths; longer names wrap to multiple lines) - Customize the display by editing
templates/guessgame/guessgame.htm
Leaderboard Display¶
Shows rank, username, total score, and number of solves with gold/silver/bronze styling for the top 3. Both session and all-time leaderboards use the same template; the URL parameter controls which data is displayed.
Session Leaderboard¶
- Add a Browser source in OBS
- Set URL to:
http://localhost:8899/guessgame/guessgame-leaderboard.htm?type=session - Set dimensions:
560x500(or adjust to your layout)
All-Time Leaderboard¶
- Add a Browser source in OBS
- Set URL to:
http://localhost:8899/guessgame/guessgame-leaderboard.htm?type=all_time - Set dimensions:
560x500(or adjust to your layout)
How It Works¶
Game Flow¶
- Track Changes: When a new track starts playing, the Guess Game automatically begins
- Chat Announcement: An automatic announcement is sent to Twitch chat when the game starts
- Chat Commands: Viewers type
!guess <letter or word>in Twitch chat - Guess Processing:
- Single letters: Revealed if present in track/artist, points awarded by frequency
- Words: Checked against track/artist name, bonus points if correct
- Complete matches: If track/artist fully matches, that objective is solved
- Game Ends: When solved or time expires, game ends and scores are saved
- Next Track: Process repeats for the next song
Guess Normalization¶
The game intelligently handles variations in guesses:
- Case insensitive:
HOUSE,house, andHouseare all equivalent - Ampersand variants:
&,and, andnare treated as interchangeable - Punctuation: Periods in artist names (e.g.,
N.W.AvsNWA) are handled
Grace Period for Stream Delay¶
Viewers watching your Twitch stream experience a delay (typically 5-15+ seconds), meaning they're hearing tracks behind real-time. To ensure fair gameplay, the Guess Game includes a configurable Grace Period:
- After a game ends (solved, timeout, or track change), guesses are still accepted for the configured grace period (default: 5 seconds)
- Viewers see the ended game with revealed answers, but their "late" guesses from stream delay are still processed and scored
- Leaderboards reflect reality: Scores account for what viewers actually experienced on their delayed streams
- Configurable: Adjust the grace period (0-60 seconds) in Streaming & Chat → Guessgame → Advanced to match your stream's typical delay
This ensures viewers on delayed streams aren't penalized and get credit for guesses they made while the game was still active on their screen.
Scoring System¶
Points are awarded based on guess type and letter frequency:
- Common letters (e, a, o, i, n, t, s, r, h, l): 1 point each
- Uncommon letters (d, c, u, m, p, f, g, w, y, b): 2 points each
- Rare letters (v, k, x, j, q, z): 3 points each
- Correct words: 10 points
- Wrong words: -1 point (penalty)
- Complete solve: 100 point bonus
- First solver bonus: 50 additional points (on difficult tracks with threshold above configured value)
Online Game Board¶
If you have a Charts API key configured and have enabled Send to Server in the Guess Game settings, an online copy of your game board is available at:
https://whatsnowplaying.com/guessgame/(your-twitch-username)
This web-based display shows:
- Current masked track and artist
- Time remaining
- Live leaderboards (session and all-time)
- Game status updates in real-time
Benefits:
- Share with viewers: Post the link in your chat for viewers who want a dedicated game view
- Mobile-friendly: Viewers on mobile devices can follow along without watching the stream
- No OBS required: Provides game display even if you don't use OBS overlays
- Always synchronized: Updates every 2 seconds during active games
Requirements:
- Charts Account: Sign up at https://whatsnowplaying.com and obtain an API key
- Configure API Key: Add your Charts API key in Output & Display → Charts
- Enable Sync: Ensure "Send to Server" is enabled in Streaming & Chat → Guessgame
Difficulty Calculation¶
The game calculates difficulty based on:
- Total number of unique letters in track and artist
- Length of track and artist names
- Tracks with difficulty above the configured threshold award first solver bonus
Templates¶
The Guess Game uses Jinja2 templates for chat responses and OBS display:
Chat Templates¶
twitchbot_guess.txt: Response when a viewer makes a guess
{% if guess_error -%}
{{ guess_error }}
{%- elif guess_already_guessed -%}
@{{ guess_user }} "{{ guess_text }}" is already revealed!
{%- elif guess_already_solved -%}
@{{ guess_user }} That part is already solved!
{%- elif guess_solved and guess_solve_type == "both" -%}
@{{ guess_user }} 🎉 GAME COMPLETE! +{{ guess_points }} points! The answer was: {{ guess_masked_track }} by {{ guess_masked_artist }}
{%- elif guess_solve_type == "track" -%}
@{{ guess_user }} 🎵 TRACK SOLVED! +{{ guess_points }} points! Now guess the artist: {{ guess_masked_artist }}
{%- elif guess_solve_type == "artist" -%}
@{{ guess_user }} 🎤 ARTIST SOLVED! +{{ guess_points }} points! Now guess the track: {{ guess_masked_track }}
{%- elif guess_correct -%}
@{{ guess_user }} ✓ Correct! +{{ guess_points }} points | Track: {{ guess_masked_track }} | Artist: {{ guess_masked_artist }}
{%- else -%}
@{{ guess_user }} ✗ Not quite! | Track: {{ guess_masked_track }} | Artist: {{ guess_masked_artist }}
{%- endif -%}
twitchbot_mypoints.txt: Response when a viewer checks their stats
{% if stats_none -%}
@{{ stats_user }} You haven't played yet! Type !guess to start playing.
{%- else -%}
@{{ stats_user }} Session: {{ stats_session_score }} pts ({{ stats_session_solves }} solves,
{{ stats_session_guesses }} guesses) | All-Time: {{ stats_all_time_score }} pts
({{ stats_all_time_solves }} solves)
{%- endif -%}
twitchbot_gamestart.txt: Automatic announcement when a new game starts
🎮 New guessing game! Type !{{ guess_command }} <letter or word> to play | Track: {{ masked_track }} |
Artist: {{ masked_artist }}
Template Variables¶
twitchbot_guess.txt variables¶
| Variable | Description |
|---|---|
guess_user |
Twitch username who made the guess |
guess_text |
The text the viewer submitted |
guess_correct |
Boolean: true if the guess was correct |
guess_points |
Points awarded/deducted for this guess |
guess_masked_track |
Track name with unguessed letters as underscores |
guess_masked_artist |
Artist name with unguessed letters as underscores |
guess_solved |
Boolean: true if the game is now completely solved |
guess_solve_type |
Which part was just solved: "track", "artist", or "both" (only set on a solve) |
guess_track_solved |
Boolean: true if the track portion is solved |
guess_artist_solved |
Boolean: true if the artist portion is solved |
guess_already_guessed |
Boolean: true if this letter/word was already guessed |
guess_already_solved |
Boolean: true if this part of the game is already solved |
guess_error |
Error message string (e.g. no active game); only set on errors |
twitchbot_mypoints.txt variables¶
| Variable | Description |
|---|---|
stats_user |
Twitch username who requested stats |
stats_none |
Boolean: true if the user has never played |
stats_session_score |
User's points in the current session |
stats_session_solves |
User's solve count in the current session |
stats_session_guesses |
User's guess count in the current session |
stats_all_time_score |
User's all-time point total |
stats_all_time_solves |
User's all-time solve count |
stats_all_time_guesses |
User's all-time guess count |
twitchbot_gamestart.txt variables¶
| Variable | Description |
|---|---|
guess_command |
Configured guess command (default: guess) |
masked_track |
Track name with all letters hidden as underscores |
masked_artist |
Artist name with all letters hidden as underscores |
time_limit |
Maximum game duration in seconds |
Troubleshooting¶
Game Not Starting¶
- Verify Twitch bot is connected (test with
!whatsnowplayingversion) - Check that Guess Game is enabled in the menu/tray icon
- Ensure a track is actually playing (game starts on track changes)
Chat Commands Not Working¶
- Enable the commands: In Settings → Twitch Bot, the
guessandmypointscommands must be explicitly enabled (they are disabled by default) - Check that template files exist:
twitchbot_guess.txtandtwitchbot_mypoints.txt - Verify bot has proper OAuth authentication
OBS Display Not Updating¶
- Confirm webserver is enabled and running on correct port
- Check browser source URL matches your webserver port
- Try refreshing the browser source in OBS
Scores Not Saving¶
- Check logs for database errors
- Verify write permissions in What's Now Playing cache directory
- Try clearing leaderboards and restarting
Tips for Stream Engagement¶
Getting Started¶
- Test offline first: Run through several tracks before going live to verify setup and timing
- Explain clearly: When you first enable it, take 30 seconds to explain the rules to your chat
- Start simple: Use "Separate Solves" mode initially - easier for new players to understand
- Make it visible: Position the OBS overlay prominently so viewers notice when games start
Building Participation¶
- Call out new games: Even though auto-announcements happen, verbally mention "new game starting!" when you notice tracks changing
- Celebrate solvers: Give shout-outs when someone solves a track - viewers love recognition
- Give hints: If a game is going unsolved, drop subtle hints ("This artist is from Detroit...")
- Welcome newcomers: When someone plays for the first time, acknowledge them and explain briefly
Leaderboard Strategies¶
- Show it between sets: Display the leaderboard overlay during breaks or between mixing sessions
- Weekly/monthly resets: Clear session scores regularly to give everyone fresh chances to compete
- Call out the leaders: Mention top 3 players periodically to create friendly competition
- Track all-time legends: Keep all-time leaderboards running for long-term community engagement
Incentives and Rewards¶
- Channel points: Award bonus points to top session performers
- Discord roles: Give leaderboard leaders special roles in your community Discord
- Shout-outs: Feature top players in social media posts or stream recaps
- Track requests: Let weekly winners pick a track for your next stream
- Merchandise: Run monthly contests with prizes for cumulative top scores
Difficulty and Balance¶
- Adjust timeout duration: Shorter durations (60-90s) create urgency; longer (3-5 min) allow casual participation
- Consider your music: Obscure tracks are harder but more rewarding to solve
- Match your audience: Electronic music fans might struggle with mainstream pop (and vice versa)
- Use "Either" mode: For very difficult tracks, allow solving just track OR artist to maintain momentum
- Auto-reveal common words: Enable this setting if your track titles have many filler words (the, and, of, etc.)
Technical Tips¶
- OBS layout: Place game display near your track info - viewers naturally look there
- Font sizing: Make masked text large enough to read on mobile devices (many viewers watch on phones)
- Leaderboard placement: Side panels or overlays during transitions work well
- Test on mobile: Check how your overlays look on smaller screens
Advanced Engagement¶
- Themed streams: "Guess the 90s house track" nights with appropriate difficulty settings
- Team competitions: Track scores manually for "regulars vs newcomers" friendly rivalries
- Streak tracking: Manually recognize players who solve multiple games in a row
- Custom announcements: Edit
twitchbot_gamestart.txtto match your stream's personality - Integration: Mention game stats in your post-stream recaps or YouTube highlights
Common Pitfalls to Avoid¶
- Don't make it mandatory: Let viewers choose to participate - forced engagement backfires
- Avoid extreme difficulty: If nobody solves games for 30+ minutes, decrease timeout or change mode
- Don't ignore participants: Always acknowledge guesses and solvers, even if you're focused on mixing
- Balance attention: Keep focus on your music - the game enhances your stream, it shouldn't dominate it




