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.