Thin Discord plugin runner. It loads the plugins you name and registers the commands they declare.
Create the Discord application and invite the bot first — see Discord Setup.
-
Clone the repository:
git clone https://github.com/FAZuH/pwr-bot cd pwr-bot -
Copy the example environment file and set your values (see Configuration):
cp .env-example .env
-
Start the bot. See Usage.
Prepare a .env file (see Configuration), then run the container:
mkdir -p pwr-bot/data pwr-bot/logs && cd pwr-bot
docker run -d \
--name pwr-bot \
--restart unless-stopped \
--env-file .env \
-v $(pwd)/data:/app/data \
-v $(pwd)/logs:/app/logs \
ghcr.io/fazuh/pwr-bot:latestTo pass single variables instead of --env-file, use -e DISCORD_TOKEN="..." and -e ADMIN_ID="...".
- Download the binary for your platform from GitHub Releases.
- Put a copy of
.env-examplenext to the binary. Rename it to.envand set your values (see Configuration). - On Linux or macOS, make the binary executable:
chmod +x pwr-bot
These screens come from the feed plugin, which ships in this repo. The host shows whatever the enabled plugins declare.
Start the bot:
docker compose up -d # Docker Compose install./pwr-bot # binary installCheck the log output (Docker Compose):
docker compose logs -fThen try these commands in Discord (each command comes from the plugin or host part named beside it):
/feed subscribe <links>— subscribe to anime and manga feeds (feed plugin)/feed list— show your subscriptions (feed plugin)/vc stats— show your voice channel activity (voice plugin)/settings— open one settings panel per enabled plugin (host)/plugins list— show the plugin catalog and internal plugins (host)/about— show bot information (host)
After the bot runs and joins your server, type !register_owner in a channel it can see. The bot responds with buttons — click Register in guild (immediate) or Register globally (can take up to one hour).
Note
!register_owner needs your Discord user ID to match ADMIN_ID. Users in other servers with the "Administrator" or "Manage Server" permission can run !register or !unregister.
The bot reads a .env file next to the binary or mounted into the container. The values you must set are DISCORD_TOKEN and ADMIN_ID; DB_URL points at PostgreSQL. Set INTERNAL_PLUGINS to name the internal plugins the host spawns at startup (default feed,voice,welcome). Pin external plugins in the catalog file (plugins.toml). Every variable and its default is in Configuration reference.
- Plugin runner host: The host spawns the internal plugins that
INTERNAL_PLUGINSnames, loads the external plugins that the catalog file pins, and registers the commands and views that their manifests declare. It also provides/about,/settings,/plugins,!register, and!unregister. - Feed plugin: Subscribe to updates from AniList, MangaDex, and Comick. The plugin sends the updates to your DMs or to a server channel, and provides its settings panel through
/settings. - Voice plugin: The plugin measures the time members spend in voice channels. View server leaderboards and user rankings. Its settings panel opens through
/settings. - Welcome plugin: The plugin owns the welcome-card renderer and its settings storage. It has no slash command; its settings panel opens through
/settings. - External plugins: Add features with plugins pinned in a catalog file. See Plugin catalog.
- Discord Setup — Developer Portal, intents, and invite URL
- Configuration reference — every environment variable
- Plugin catalog —
plugins.tomlformat and startup behavior - Deployment — database migrations, logs, and Docker volumes
- Architecture — system layers and module boundaries
- Changelog — release history
- Issues — bug reports and feature requests
pwr-bot is distributed under the terms of the MIT license.



