# Lumi Bot

Discord bot + WebUI with role-based access, plugin management, and self-update support.

## Quick start

Requires Node.js 18+.

1. Install dependencies:
   ```
   npm install
   ```
2. Run with auto-restart:
   ```
   npm run run
   ```
3. Open `http://localhost:3000/setup` and enter your Discord app + bot settings.

You can also seed local configuration with a `.env` file. Use `.env.example`
as the template; `.env` is ignored by git.

## Discord app setup

- OAuth2 redirect URI: `http://localhost:3000/auth/discord/callback`
- OAuth2 scopes: `identify`, `guilds`, `guilds.members.read`
- Add the bot to your server and copy the Guild ID.

## WebUI roles

The WebUI maps Discord roles to access levels:
- `DISCORD_ADMIN_ROLE_ID`
- `DISCORD_MOD_ROLE_ID`

You can set these in `.env` or change role IDs in **Admin → Settings**.

## Plugins

Use **Admin → Plugins** to install, enable, update, or uninstall plugins.
You can also create a local plugin from the WebUI.

## Twitch bot

Configure Twitch chat settings in **Admin → Settings**:
- `twitch_bot_username`
- `twitch_bot_oauth` (OAuth token)
- `twitch_channels` (comma-separated)

Custom commands can target Discord, Twitch, or both from **Admin → Commands**.

## Users and linking

Users have an internal UUID and username. Link Twitch accounts in **Profile** and manage usernames in **Profile** or **Admin → Users**.

## Theming

Use **Admin → Theming** to select one of six read-only Lumi themes. Duplicate a
built-in or custom theme to edit colors, surfaces, controls, status colors,
focus states, radius, shadows, and spacing with a live light/dark preview.
Custom themes can be applied, renamed, duplicated, and deleted. Invalid or
incomplete values fall back safely to the selected built-in base theme.

Developer and modding conventions are documented in
[`docs/lumi-ui.md`](docs/lumi-ui.md).

## Notes

- Auto-update uses `git pull` from the configured remote + branch.
- Auto-restart uses `run.js` to respawn the process after updates or crashes.
