GhostieBot is a lightweight Discord bot for tracking whether a Twitch streamer has played a suggested Steam game before.
Built and maintained by AshKapow
A simple Discord bot that watches Steam game suggestions and tells your community whether the streamer has already played the game based only on what happens while the bot is running.
Viewers often suggest games by pasting Steam links into Discord.
Manually remembering what has or hasn’t been played quickly becomes unreliable.
GhostieBot was created to answer one question automatically:
“Has the streamer played this game before?”
Important design decisions:
- No scraping
- No VOD history
- No third‑party tracking sites
If the bot didn’t see it happen, it doesn’t count.
- Watches a specific Discord forum channel
- Only processes the first post of each forum thread
- Finds Steam links even if there is text before or after them
- Supports common Steam URL formats (
/app,steam://run, community links) - Resolves the game name via the Steam API
- Replies in the thread:
- Played before on stream
- Not played before on stream
- Polls the Twitch Helix API every
LIVE_CHECK_SECONDS - Detects streamer ONLINE / OFFLINE state
- When the streamer is live:
- Reads the current Twitch category/game
- Stores it once (no duplicates)
- Logs only meaningful state changes (no spam)
“Played before” means:
The game name exists in the locally stored list.
Tracked games are stored locally in:
games_data/<twitch_channel>_games.json
Example:
[
"phasmophobia",
"project zomboid"
]- Names are normalised to avoid Steam/Twitch naming differences
- The
games_data/directory should be mounted as a Docker volume
- Discord bot token
- Twitch app credentials (Client ID + Client Secret)
- Docker + Docker Compose (recommended)
- Create a Discord application and bot
- Enable Message Content Intent
- Invite the bot with permission to:
- View channels
- Read message history
- Send messages
- Reply in threads
- Enable Developer Mode in Discord
- Right‑click the forum channel → Copy Channel ID
- Set it in
config.pyasDISCORD_CHANNEL_ID
- Create a Twitch application
- Copy:
- Client ID →
TWITCH_CLIENT_ID - Client Secret →
TWITCH_CLIENT_SECRET
- Client ID →
- Set
TWITCH_CHANNELinconfig.pyto the streamer login name
DISCORD_CHANNEL_ID = 123456789012345678
TWITCH_CHANNEL = "streamer_channel"
LIVE_CHECK_SECONDS = 300Secrets are read only from environment variables:
DISCORD_TOKENTWITCH_CLIENT_IDTWITCH_CLIENT_SECRET
services:
ghostiebot:
image: ashkapow/ghostiebot:latest
container_name: ghostiebot
restart: unless-stopped
environment:
DISCORD_TOKEN: ${DISCORD_TOKEN}
TWITCH_CLIENT_ID: ${TWITCH_CLIENT_ID}
TWITCH_CLIENT_SECRET: ${TWITCH_CLIENT_SECRET}
LOG_LEVEL: INFO
volumes:
- ./config.py:/app/config.py:ro
- ./games_data:/app/games_data- Only the first post of a forum thread is processed
- Replies inside the thread are ignored
- Tracking starts from the moment the bot is running
Issues and improvements are welcome via GitHub Issues or PRs.
Please keep changes aligned with the original design goals (simple, local, non‑scraping).
Created by AshKapow.
If you fork this project:
- Keep attribution
- Clearly document any behavioural changes