Reference
Scheduled posts
Jobs run only between START_DATE and END_DATE. Times marked “Eastern” are pinned to America/New_York because they follow the NFL game clock. All other times follow TIMEZONE.
| Day | Time | Report |
|---|---|---|
| Monday | 9:00 AM | Score update |
| Monday | 6:30 PM Eastern | Close scores |
| Tuesday | 6:00 AM Eastern | Dashboard snapshot |
| Tuesday | 9:00 AM | Final scores and trophies for the previous week |
| Tuesday | 6:30 PM | Power rankings |
| Wednesday | 9:00 AM | Standings |
| Wednesday | 9:01 AM | Waiver report |
| Thursday | 7:30 PM Eastern | Matchups |
| Friday | 9:00 AM | Score update |
| Sunday | 9:00 AM | Player monitor report |
| Sunday | 4:00 PM and 8:00 PM Eastern | Score updates |
When DAILY_WAIVER is True, the waiver report also runs at 9:01 AM on Monday, Tuesday, Thursday, Friday, Saturday, and Sunday.
The Tuesday 6:00 AM snapshot writes the finished week’s scores and standings to data/fantasy.db. It runs after Monday night football so the week is final.
Slash commands
Slash commands need DISCORD_BOT_TOKEN. The bot syncs its command tree to every guild it joins when it connects.
| Command | Returns |
|---|---|
/matchups |
The current week’s matchups. |
/scoreboard |
The current scoreboard. |
/standings |
The current standings. |
/power-rankings |
The current power rankings. |
/monitor |
The injury and player monitor report. |
/trophies |
This week’s trophies. |
/waiver-report |
Recent waiver moves. Private leagues only. |
/dashboard |
A link to the web dashboard. |
If ESPN returns an error, the bot replies with a message explaining that the season may not have started yet.
Dashboard
The dashboard reads data/fantasy.db and offers four tabs:
- Weekly Scores: a score trend line per team.
- Standings: the latest standings snapshot.
- Consistency: the score distribution per team.
- Trophies: a season recap.
A sidebar dropdown selects the season. Only seasons present in the database appear there, so a new season stays empty until the first Tuesday snapshot runs.
Reach the dashboard at http://localhost:8000 locally, or at the tunnel hostname if cloudflared is running.
Project layout
| Path | Contents |
|---|---|
gamedaybot/run.py |
Container entrypoint. |
gamedaybot/espn/ |
ESPN API access, report text, and the scheduler. |
gamedaybot/discord_bot/ |
Slash-command bot and embed formatting. |
gamedaybot/chat/ |
Webhook clients for Discord, Slack, and GroupMe. |
gamedaybot/storage/db.py |
SQLite schema and queries. |
gamedaybot/web/app.py |
Shiny dashboard. |
dev/ |
Maintenance scripts. Copied into the image, so docker-compose exec can run them. |
data/ |
SQLite database. Mounted from the host. |
logs/ |
Log output. Mounted from the host. |
docs/ |
This Quarto site. |
cloudflared/config.yml |
Reference copy of the tunnel config. The cloudflared container reads ~/.cloudflared on the host instead. |
config.env |
Secrets and runtime settings. Excluded by .gitignore. |