/Bathbot

Discord bot for osu!

Primary LanguageRustISC LicenseISC

Bathbot

A feature-rich discord bot with functionality all around osu!

Discord Ko-fi

Server count Lines of Code CI check

Features

  • check recent plays (<r / /rs)
  • track top scores (<track, <trackmania, ... / /track)
  • a background guessing game (/bg)
  • display the personal top scores with various filters and orderings (<top / /top)
  • show your best scores on a map (<c / /cs)
  • compare top scores among players (<common / /compare top)
  • check a map's global leaderboards (<lb / /leaderboard)
  • calculate a performance rating for players of a multiplayer match (<mc / /matchcost)
  • live track an ongoing multiplayer match (/matchlive)
  • simulate scores with arbitrary acc, combo, amount 300s, ... (/simulate)
  • display a bunch of statistics all around a users osu profile (<osu, <taiko, ... / /profile)
  • recalculate the personal top 100 if all scores were unchoked (<nc / /nochoke)
  • show all scores of a user that are in the top of a map's global leaderboard (<osg / /osustats scores)
  • list server members in order of some attribute in their osu! profile like pp, medal count, ... (/serverleaderboard)
  • notify a channel when a twitch streams comes online (/trackstream / <addstream)
  • configure various user or server settings (/config, /serverconfig)
  • ... and a ton more

All osu! gamemodes are supported and commands exist as slash commands as well as prefix commands.

With the <help command the bot will DM you a list of all available prefix commands. With <help [command name] (e.g. <help osg) the bot will explain the command, show how to use it and give examples.

For help on slash commands, use the /help command.

To invite the bot to your server, use this link.

You can also join its discord server to keep up with updates, suggest features or report bugs.

Credits

Internals

Setup

I wouldn't necessarily recommend to try and get the bot running yourself but feel free to give it a shot.

Rust must be installed and additionally either docker must be installed to setup the databases automatically (recommended) or postgres and redis must be installed manually.

  • Copy the content of .env.example into a new file .env and provide all of its variables. The most important ones are
    • DISCORD_TOKEN
    • OSU_CLIENT_ID
    • OSU_CLIENT_SECRET
    • MAP_PATH
  • If you don't run through docker, be sure these env variables are also set
    • DATABASE_URL
    • REDIS_HOST
    • REDIS_PORT
  • If you do run through docker, you can
    • boot up the databases with docker-compose up -d (must be done)
    • use docker ps to make sure bathbot-db and bathbot-redis have the status Up
    • to inspect the postgres container, use docker exec -it bathbot-db psql -U bathbot -d bathbot
    • to inspect the redis container, use docker exec -it bathbot-redis redis-cli
    • to shut the databases down, use docker-compose down
  • Next, install sqlx-cli if you haven't already. You can do so with cargo install sqlx-cli --no-default-features --features postgres,rustls.
  • Then cd bathbot-psql and migrate the database with sqlx migrate run. This command will complain if the DATABASE_URL variable in .env is not correct.
  • And finally you can cd .. again to compile and run the bot with cargo run. To make the bot run faster but compiling take longer, use cargo run --release.

The bot also has various features that can be enabled in compilation:

  • global_slash: Instead of only registering slash commands in the server specified as DEV_GUILD_ID in the .env, register them globally so that they work in all servers and DMs.
  • matchlive: Enables the matchlive commands and a background loop that regularly checks all tracked matches for updates.
  • osutracking: Enables the osu tracking commands and a background loop that regularly checks all tracked users' top plays for updates.
  • twitchtracking: Enables the stream tracking commands and a background loop that regularly checks all tracked streams for activity.
  • server: Runs a server on localhost:{SERVER_PORT} (specified in .env) and enables the link command. In order for linking and its authentication to succeed, you must configure the redirect URL in your osu! (and twitch) settings and set PUBLIC_URL in the .env accordingly. E.g for osu! you go to your profile settings, check the oauth section for your own clients, edit the Application Callback URL to http://localhost:27272/auth/osu and in your .env make sure you have SERVER_PORT=27272 and PUBLIC_URL="http://localhost:27272". The server also exposes a /metrics endpoint providing prometheus data. If you're interested in visualizing them, you need to install prometheus, configure it, install and configure grafana, then create a dashboard in grafana for the bathbot metrics.
  • full: Enables all of the above

To enable these features, use e.g. cargo run --features global_slash,server