FEET: Fluxer Expandable Everyday Toolkit — is a pluggable bot for Fluxer. It's built on the @fluxerjs/core SDK.
Features are drop-in plugins called TOEs (Task/Operation Extensions). Each TOE is fully isolated and lives in its own folder under src/toes/ — adding one is just dropping in a new folder.
| TOE | What it does |
|---|---|
| todo | Per-user task list with pending/completed states |
| reminder | Time-based reminders delivered to a channel or DM |
| rss | Subscribe to RSS/Atom feeds; new items are posted as embeds every 5 minutes |
| avatar | Show user avatars and server icons |
| info | Show user and server info (.whois, .serverinfo) |
Data lives in a local SQLite database (node:sqlite, WAL mode) — no external services required beyond Fluxer itself.
Prefer not to host it yourself? Add the hosted FEET bot to your server:
The easiest way to run FEET is with the prebuilt Docker image.
1. Create a directory for the bot and enter it
mkdir ~/feet && cd ~/feet2. Download the setup script and run it
It fetches compose.yaml and a starter .env.
curl -fsSL https://raw.githubusercontent.com/TheInternetUse7/feet/master/setup.sh | bash3. Set your bot token
Open .env and put in the token from fluxer.app:
nano .env4. Start the bot
docker compose up -dPrefer not to pipe a script? Download it instead:
curl -fsSL -o setup.sh https://raw.githubusercontent.com/TheInternetUse7/feet/master/setup.sh chmod +x setup.sh ./setup.sh
A new image is built and pushed to ghcr.io on every push to master. Pull and restart:
docker compose up -d(pull_policy: always in compose.yaml pulls the newest image automatically. Tags are available if you want to pin: :latest, :<commit-sha>, and :v* release tags.)
For development, or running without Docker. Requires Node.js >= 22.5, pnpm (ships with Corepack), and a Fluxer bot token.
git clone https://github.com/TheInternetUse7/feet.git
cd feet
pnpm install
cp .env.example .env
# edit .env and set FLUXER_BOT_TOKEN
pnpm build
pnpm startThe bot connects to Fluxer, creates its database, and auto-loads every TOE found in dist/toes/.
| Variable | Required | Default | Description |
|---|---|---|---|
FLUXER_BOT_TOKEN |
yes | — | Bot token from fluxer.app; the process exits if missing |
DB_PATH |
no | ./feet.db |
Where the SQLite database file lives (the Docker compose file sets it to /app/data/feet.db) |
LOG_LEVEL |
no | info |
Minimum log level: debug, info, warn, or error |
LOG_FILE |
no | — | Optional path to append plain (uncolored) log lines to, in addition to stdout |
GIT_COMMIT |
no | dev |
Commit hash shown by .about; baked in by the Docker CI build (falls back to local .git) |
All commands use the . prefix (same as .help). Each TOE's help text is also available via .help <name>.
| Command | Description |
|---|---|
.todo add <task> |
Add a new task |
.todo list [done] |
List pending tasks (add done for completed) |
.todo done <id> |
Mark a task as completed |
.todo remove <id> |
Delete a task |
.todo clear --yes |
Remove all completed tasks (requires explicit confirmation) |
Tasks are scoped per user — everyone sees their own list.
| Command | Description |
|---|---|
.remind in <duration> <message> |
Set a reminder, e.g. .remind in 10m Check oven |
.remind list |
Show pending reminders |
.remind cancel <id> |
Cancel a pending reminder |
.remind dm on|off |
Deliver reminders via DM instead of the channel (falls back to the channel if DMs are blocked) |
Durations use Ns, Nm, Nh, Nd suffixes (seconds, minutes, hours, days).
| Command | Description |
|---|---|
.rss add <url> [#channel] |
Subscribe to a feed (defaults to the current channel; channel can be a mention, ID, or name) |
.rss remove <id> |
Unsubscribe from a feed |
.rss list |
Show subscribed feeds and their status |
.rss limit <id> <n> |
Max items posted per poll (1–50, 0 = unlimited, default 10) |
.rss backlog <id> [page] |
Browse items that were skipped because of the post limit |
.rss fetch |
Manually check all feeds for new items right now |
New items are posted to the subscribed channel as embeds; all feeds are polled every 5 minutes.
| Command | Description |
|---|---|
.avatar |
Show your global avatar |
.avatar <user> |
Show a user's global avatar (mention, ID, or name) |
.avatar member <user> |
Show a member's server-specific avatar (falls back to global) |
.avatar guild |
Show the current server's icon |
.avatar guild <id> |
Show another server's icon (bot must be in it) |
| Command | Description |
|---|---|
.whois [user] |
Show a user's info: ID, account creation date, badges, join date and roles (in a server), banner |
.serverinfo [id] |
Show a server's info: ID, owner, creation date, member/channel/role/emoji/sticker counts, verification level, features |
.about |
Show info about the bot: developer, running commit, source code and support community links |
pnpm check # typecheck + lint + format check
pnpm build # compile src/ -> dist/
pnpm start # run the compiled bot (requires pnpm build first)
pnpm lint:fix # auto-fix oxlint issues
pnpm format # auto-format with oxfmt