HuskerBot2 is a Kotlin/Spring Boot Discord bot for Nebraska Cornhuskers fans. It provides game-day utilities, betting games, pick'em, schedules, weather, and other fun commands.
- Betting commands
- Create and show weekly bets for Husker games
- View betting lines for a given week
- Season-long betting leaderboard with points: Winner = 1, Spread = 2, Points = 2
- NFL Pick'em
- Interactive buttons to pick winners; live counts update on the message
- Leaderboard command for season performance
- Schedules
- College Football (CFB) schedule and countdowns
- NFL schedule utilities
- Weather
- Game day weather via NWS (api.weather.gov)
- Other utilities
- Urban Dictionary, image management, OSRS stats, and more
- Kotlin + Spring Boot
- JDA (Java Discord API)
- Spring Data JPA with H2 (file-backed) datastore by default; optional MySQL support via Spring profile
- Gradle build
- Java 17 or newer
- Discord bot token with appropriate permissions
- (Optional) API keys for external services (e.g., CollegeFootballData)
Edit src/main/resources/application.yml:
discord.token: Your bot tokendiscord.guilds: Guild IDs where the bot should operate- Channels and category IDs as needed
cfbd.api-key: CollegeFootballData API key if you use lines/matchup featuresgemini.api-key: Google Gemini API key used by the/geminicommand (can be set via application.yml or GEMINI_API_KEY)- Weather and Urban Dictionary settings are already configured with sensible defaults
- Default: H2 file-based database at
~/.discordbot/data. No extra config needed. - MySQL (optional): Enable the MySQL profile and provide connection details via environment variables.
- Set
SPRING_PROFILES_ACTIVE=mysql - Optional env vars (with defaults shown):
DB_HOST(default:localhost)DB_PORT(default:3306)DB_NAME(default:huskerbot)DB_USER(default:husker)DB_PASSWORD(default:password)
- The effective JDBC URL is:
jdbc:mysql://${DB_HOST}:${DB_PORT}/${DB_NAME}?createDatabaseIfNotExist=true&useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=UTC
- Set
- Schema is managed by Hibernate (
spring.jpa.hibernate.ddl-auto=update) in both profiles by default.
- Set your configuration in
application.yml. - Build and run using the Gradle wrapper:
- macOS/Linux:
./gradlew bootRun - Windows:
gradlew.bat bootRun
- macOS/Linux:
To build a jar:
- macOS/Linux:
./gradlew build - Windows:
gradlew.bat build
- Unit tests:
./gradlew test - Additional testing scripts live under the
testing/directory (Python and shell helpers for weather parsing).
-
/bet … Betting commands
- /bet create week: winner:<Nebraska|Opponent> predict-points:<Over|Under> predict-spread:<Nebraska|Opponent>
- Place a bet for a specific week’s Nebraska game. Week choices are populated from the current season schedule.
- /bet show week:
- Show all submitted bets and totals for the selected week.
- /bet lines week:
- Show betting lines (spread, over/under, details) for the selected week’s Nebraska game.
- /bet leaderboard
- Season-long betting leaderboard. Scoring: Winner = 1, Spread = 2, Points = 2.
- /bet create week: winner:<Nebraska|Opponent> predict-points:<Over|Under> predict-spread:<Nebraska|Opponent>
-
/gameday … Gameday mode (Admin only)
- /gameday on — Turns gameday mode on.
- /gameday off — Turns gameday mode off.
-
/gameday-weather
- Get weather forecast for the next Huskers game (location-aware, 7-day range).
-
/image … Image management
- /image add name: url:
- Add a named image by URL (http/https). Fails if name already exists or URL is invalid.
- /image delete name:
- Delete a stored image. You must be the uploader or have Manage Messages permission.
- /image show name:
- Display a stored image.
- /image list
- List all stored image names.
- /image add name: url:
-
/schedule … Schedule utilities
- /schedule cfb [league:<Top 25|ACC|American|Big 12|Big 10|SEC|Pac 12|MAC|Independent>] [week:]
- Get CFB scoreboard/schedule for the given week and league. Defaults: Top 25 and current week.
- /schedule nfl [week:]
- Get NFL scoreboard/schedule for the given week. Default is the current NFL week.
- /schedule cfb [league:<Top 25|ACC|American|Big 12|Big 10|SEC|Pac 12|MAC|Independent>] [week:]
-
/countdown
- Countdown to the next Nebraska game.
-
/ud term:
- Look up a term on Urban Dictionary and page through definitions.
-
/compare team1: team2:
- Compare two CFB teams’ head-to-head history with recent games and series summary.
-
/markov [messages:<10-1000>] [order:<1-3>] [seed:]
- Generate text from recent channel messages using a Markov chain. Defaults: messages=200, order=2.
-
/osrs player:
- Show Old School RuneScape high scores for a player.
-
/smms destination:<general|recruiting|admin> message: (Manage Messages required)
- Send an anonymous “Secret Mammal Message System” embed to the chosen channel.
-
/possum message:
- Post a “Possum Droppings” embed to the configured possum channel.
-
/iowa user:<@member> [reason:] [minutes:] (Manage Messages required)
- Time out a user (“banish to Iowa”) with optional reason and duration (default 30 minutes).
-
/nebraska user:<@member> (Manage Messages required)
- Remove user timeout (“return to Nebraska”).
-
/nfl-pickem-leaderboard
- Show the NFL Pick’em leaderboard for the current year.
-
/nfl-pickem-reload (Manage Messages required)
- Reload/repost the weekly NFL Pick’em listing without deleting picks.
- The bot uses a file-based H2 database located at
~/.discordbot/databy default. Spring will auto-create/update schema on startup. - Some features rely on external APIs and may need keys or rate limits respected.
PRs and issues welcome. Please keep changes small and focused. Run tests before submitting.