A simple Discord-based fleet timerboard for EVE Online.
This timerboard was created with the goal to address the issues of accidentally overlapping fleets as well as providing an easily accessible, single source of truth as to what fleets are upcoming.
This application is experimental and more-so a prototype than something planned to be supported long term as its functionality will be merged into Bifrost Auth eventually. Regardless, you are free to use it as you see fit but do expect bugs as this application was written quickly and with a few cut corners for the sake of prototyping. If you encounter any bugs, please submit an issue so we can fix them.
Ping Format
- Create a standard ping format defining what information a fleet needs, e.g.
Form-up location,Voice comms,SRP, etc
Fleet Category
- Select a ping format to be used by the fleet category
- Set the minimum time between fleets to avoid overlap (2 hours for roams or 0 for strategic fleets to demonstrate how they take precedent)
- Limit how far in advance a fleet can be scheduled (e.g. can't schedule a roam anymore than 24 hours in advance)
- Set if a reminder should be sent before fleet form-up (e.g. 1 hour before fleet)
- Choose which Discord roles have access to either view fleet, create a fleet, or manage fleets of that category
- Choose which Discord roles will be pinged when the fleet forms (@everyone or restrict to a specific role)
- Choose which channel(s) the fleet ping will be sent in
Multiple Discord Servers
- Supports multiple Discord servers for one timerboard instance
- Does not currently support relaying fleets between Discords
Timerboard
- Provides a per Discord-server timerboard
- Provides a list of all upcoming fleets
- Filters out fleets that started over an hour ago & hides fleets from categories a user doesn't have view access to
Discord fleet pings
- Sends pings & post upcoming fleets to configured channel(s) for fleet category
- Sends a ping when a fleet is first created
- Sends a reminder ping prior to form-up (if configured for fleet category)
- Sends a ping when fleet begins form-up
- Choose to hide fleet from those who don't have create/manage access for the category until reminder or form-up time
- Choose to not send a reminder even if configured for category
- Silently updates the fleet message when details are updated
- Silently updates fleet message and posts an additional message if a fleet is cancelled or the time is changed (without a ping)
- Periodicially provides a list of upcoming fleets with countdowns in the configured Discord channel - every 30 minutes pushes the list to most recent message for visibilty (deleting the prior posted list to not clutter the channel)
git clone https://github.com/autumn-order/bifrostCreate a Discord developer application at https://discord.com/developers/applications
- Go to
OAuth2tab of your application and add a redirect underRedirects, set tohttps://your-domain.com/api/auth/callback - Then, go to
Bottab, scroll down, enable theServer Members Intentwhich we need to access server members & roles to handle permissions for who can create timers.
Keep the developer application page open, configure your .env as directed below
cp .env.example .envSet the following in .env:
DOMAIN(Set to your domain, e.g.timerboard.autumn-order.com)DISCORD_REDIRECT_URL(Set to your application's callback URL e.g.https://timerboard.autumn-order.com/api/auth/callback) Create a Discord dev application at https://discord.com/developers/applications and set the following in.envDISCORD_CLIENT_ID(Get from `OAuth2 tab of your Discord developer application)DISCORD_CLIENT_SECRET(Get from `OAuth2 tab of your Discord developer application)DISCORD_BOT_TOKEN(Get fromBottab of your Discord developer application - use theReset Tokenbutton)
- Start traefik proxy instance (if you don't have a reverse proxy already)
sudo docker network create traefiksudo docker compose -f docker-compose.traefik.yml up -d- Run the application
sudo docker compose up -d- Create an admin login
sudo docker compose logs timerboard- Find the admin login URL printed to logs which is generated when there are no current admins in the instance.
Ctrl + clickthe link and then login with Discord, you will then be logged into the application and set as admin
If the link expires or you can't run it, run sudo docker compose restart then check logs again to get a new link.
Changing the style of the website is flexible and easy to do:
- Replace
assets/logo.webpwith your own logo - Replace
assets/favicon.icowith your own favicon (for browser tab icon)
- Modify
src/client/constant.rsand change the value ofSITE_NAME
- Use https://daisyui.com/theme-generator to choose a theme or make your own, click
CSSbutton at the top above the color options, and clickCopy to clipboard - Modify
tailwind.css, replacing the existing theme with your own, ensure you setdefault: true;within the theme for it to take effect
You will need to rebuild the application to apply the changes, do so with:
sudo docker compose up -d --buildSetup Discord developer application and .env as instructed above, similar to production steps but
- In
.envset theDOMAIN=localhost:8080andPROTOCOL=http
- Install tailwindcss dependencies with:
bun i- Run tailwindcss
bunx @tailwindcss/cli -i ./tailwind.css -o ./assets/tailwind.css --watch- Run the application
dx serveIf you modify migrations, you will need to do the following to apply them:
- Apply migrations to the database
sea-orm-cli migrate- Generate entities based upon database tables applied by the migration
sea-orm-cli generate entity -o ./entity/src/entities/ --date-time-crate chronoDrop all tables & reapply migrations
- Use this if you modified migrations and need a fresh start
sea-orm-cli freshRollback all applied migrations & reapply them
- Use this to ensure both your up & down methods of your migrations work
sea-orm-cli migrate refreshRun server tests using:
cargo test --features serverGenerate a code coverage report using:
cargo llvm-cov --open --features server --ignore-filename-regex "client\/|entity\/|migration\/|test-utils\/|test\/"