A Discord bot that automatically assigns roles based on player stats from The Outlast Trials.
| Command | Description |
|---|---|
/setup start |
Automatically create roles for selected categories (Prestige, Level, Reagent Rig, Invasion Ranking, Total Invasion Matches, Platform, Account Type) |
/setup delete |
Delete all bot-managed roles and remove mappings |
/setup language |
Change the bot's response language (English, Deutsch) |
/setup role-mapping <category> |
Link a role to a category (prestige, level, skill, invasion-ranking, total-invasion-matches, platform, account-type) |
/setup remove-role-mapping <category> |
Remove a role mapping for any category |
/setup messages-upload |
Upload a custom .properties file to override bot messages |
/setup messages-download |
Download all current messages as a .properties file |
/setup messages-reset |
Reset custom messages to defaults |
| Command | Description |
|---|---|
/sync-profile |
Sync your Discord roles with your Outlast Trials stats |
/sync-all |
Scan all server members and assign roles based on their stats |
Roles are also automatically assigned when a verified member joins the server.
| Command | Description |
|---|---|
/leaderboard <category> |
View a paginated leaderboard for a stat category (ephemeral, with Previous/Next buttons) |
/setup leaderboard <channel> <category> <pages> |
Set up an auto-updating leaderboard in a channel (refreshes hourly) |
To remove a leaderboard, simply delete its message in Discord — the bot will automatically clean up the binding.
The easiest way to run the bot is with Docker.
services:
bot:
container_name: totstats-discord-bot
image: ghcr.io/outlasttrialsstats/discord-bot:latest
restart: always
mem_limit: 1g
environment:
DISCORD_BOT_TOKEN: "your-bot-token"
SPRING_DATASOURCE_URL: "jdbc:postgresql://postgres:5432/totstats"
SPRING_DATASOURCE_USERNAME: "totstats"
SPRING_DATASOURCE_PASSWORD: "change-me"
depends_on:
- postgres
postgres:
container_name: totstats-discord-postgres
image: postgres:17
restart: always
mem_limit: 512m
environment:
POSTGRES_USER: totstats
POSTGRES_PASSWORD: change-me
POSTGRES_DB: totstats
volumes:
- postgres_data:/var/lib/postgresql/data
volumes:
postgres_data:docker compose up -dInvite the bot to your server using the OAuth2 URL from the Developer Portal with the bot and applications.commands scopes.
- Java 25+
- Docker (for PostgreSQL)
- A Discord Bot Token with Server Members Intent enabled
docker compose up -dCreate a .env file in the project root:
DISCORD_BOT_TOKEN=your-bot-token-here./mvnw spring-boot:run