It's SPHERICAL!!!
  • Rust 97.8%
  • Dockerfile 2.2%
Find a file
2026-08-02 17:18:06 -04:00
deploy Compose: document ./data ownership gotcha 2026-08-02 14:55:48 -04:00
src Link conversion: only replace on domain boundaries 2026-08-02 14:56:05 -04:00
.dockerignore Bot skeleton: Serenity/Poise scaffolding, TOML config, Docker image 2026-08-02 01:06:57 -04:00
.gitignore Remote restart/update via watchtower sidecar 2026-08-02 01:58:01 -04:00
Cargo.lock Bot skeleton: Serenity/Poise scaffolding, TOML config, Docker image 2026-08-02 01:06:57 -04:00
Cargo.toml Bot skeleton: Serenity/Poise scaffolding, TOML config, Docker image 2026-08-02 01:06:57 -04:00
config.example.toml Vanity roles: enabled by default (opt-out per guild) 2026-08-02 14:55:11 -04:00
Dockerfile Bot skeleton: Serenity/Poise scaffolding, TOML config, Docker image 2026-08-02 01:06:57 -04:00
LICENSE Initial commit 2026-08-01 23:35:35 -04:00
onmyoudama.png Upload files to "/" 2026-08-01 23:36:04 -04:00
README.md update readme 2026-08-02 17:18:06 -04:00

onmyoudama

Yet another Discord utility bot. Built for the Allura community. Inspired by Infobot 42, whose featureset is only replicated when desired by Allura, but is otherwise complementary. Designed by a human, implemented with Kimi.

Feature List

  • Role automation
  • Channel gates
  • Vanity roles (Sheep-like)
  • Auto-ban (for incinerator channels)
  • Link Conversion (for e.g. converting x.com to fixvx.com)
  • Reminders/Alarms (WIP)
  • Webhook API (WIP)
  • LLM Assistant from an OpenAI-Compatible endpoint (WIP)
  • Configurable logging behavior (WIP)
  • Remote restart and update
  • TOML config, Components menu for remote configuration
  • Other junk later
  • IT'S SPHERICAL

Running with Docker

docker build -t code.allura.moe/inflatebot/onmyoudama:latest .

# Minimal: configure purely via environment
docker run --rm -e ONMYOUDAMA_TOKEN=your_token_here \
  code.allura.moe/inflatebot/onmyoudama:latest

# Or with a config file (see config.example.toml)
docker run --rm \
  -v /path/to/config:/config:ro \
  code.allura.moe/inflatebot/onmyoudama:latest

The bot looks for config at $ONMYOUDAMA_CONFIG, then /config/onmyoudama.toml, then ./onmyoudama.toml. Secret values can be given as env:VARNAME to be read from the environment at startup.

Deployment (with remote restart/update)

deploy/ contains a compose stack: the bot plus a watchtower sidecar. The Discord application owner can use /restart (restarts the container) and /update (watchtower pulls the latest image and recreates the bot). See the comments in deploy/docker-compose.yml for setup.

Role menus, vanity roles, and channel gates

Per-guild features, configured under [[guilds]] (see config.example.toml):

  • /rolemenu post name:<name> posts a self-apply role menu (one toggle button per configured role, max 25). Requires Manage Roles.
  • /vanity claim gives the member a personal hoisted role (named after them, random color); /vanity color <hex> and /vanity random restyle it. Enabled by default in every guild (opt out with [guilds.vanity] enabled = false). Role ownership is persisted in a JSON state file ($ONMYOUDAMA_STATE, /data/state.json, or ./state.json; the compose stack mounts ./data:/data).
  • /gate post channels:<up to 5 channels> posts Enter/Leave buttons that grant or revoke the clicker's View Channel overwrite in those channels. Requires Manage Channels.

The buttons keep working across restarts (everything is encoded in the button custom ids). The bot needs the Manage Roles permission for role menus/vanity roles and Manage Channels (+ access to the gated channels) for gates — the invite URL printed at startup includes them.