Update backend, DB, Commands, Live Reloading
This commit is contained in:
67
README.md
67
README.md
@@ -243,6 +243,73 @@ Useful endpoints
|
||||
- `GET /api/twitch/streams?users=user1,user2` — proxy to twitch helix for streams (backend caches app-token)
|
||||
- `GET /api/events?guildId=...` — Server-Sent Events for real-time updates (ServerSettings subscribes to this)
|
||||
|
||||
### Twitch Live Notification Settings (Detailed)
|
||||
|
||||
Endpoint: `GET/POST /api/servers/:guildId/live-notifications`
|
||||
|
||||
Shape returned by GET:
|
||||
```json
|
||||
{
|
||||
"enabled": true,
|
||||
"channelId": "123456789012345678",
|
||||
"twitchUser": "deprecated-single-user-field",
|
||||
"message": "🔴 {user} is now live!",
|
||||
"customMessage": "Custom promo text with link etc"
|
||||
}
|
||||
```
|
||||
|
||||
Notes:
|
||||
- `twitchUser` is a legacy single-user field retained for backward compatibility. The active watched users list lives under `/api/servers/:guildId/twitch-users`.
|
||||
- `message` (default message) and `customMessage` (override) are persisted. If `customMessage` is non-empty it is used when announcing a live stream; otherwise `message` is used. If both are empty the bot falls back to `🔴 {user} is now live!`.
|
||||
- Update by POSTing the same shape (omit fields you don't change is okay; unspecified become empty unless preserved on server).
|
||||
|
||||
### Discord Bot Twitch Embed Layout
|
||||
|
||||
When a watched streamer goes live the bot posts a standardized embed. The layout is fixed to keep consistency:
|
||||
|
||||
Embed fields:
|
||||
1. Title: Stream title (hyperlinked to Twitch URL) or fallback "{user} is live".
|
||||
2. Author: Twitch display name with avatar and link.
|
||||
3. Thumbnail: Stream thumbnail (or profile image fallback).
|
||||
4. Fields:
|
||||
- Category: Game / category name (or "Unknown").
|
||||
- Viewers: Current viewer count.
|
||||
5. Description: Twitch user bio (if available via Helix `users` endpoint) else truncated stream description (200 chars).
|
||||
6. Footer: `ehchadservices • Started: <localized start time>`.
|
||||
|
||||
Pre-Embed Message (optional):
|
||||
- If `customMessage` is set it is posted as normal message content above the embed.
|
||||
- Else if `message` is set it is posted above the embed.
|
||||
- Else no prefix content is posted (embed alone).
|
||||
|
||||
Variables:
|
||||
- `{user}` in messages will not be auto-replaced server-side yet; include the username manually if desired. (Can add template replacement in a future iteration.)
|
||||
|
||||
### Watched Users
|
||||
|
||||
- Add/remove watched Twitch usernames via `POST /api/servers/:guildId/twitch-users` and `DELETE /api/servers/:guildId/twitch-users/:username`.
|
||||
- Frontend polls `/api/twitch/streams` every ~15s to refresh live status and renders a "Watch Live" button per user.
|
||||
- The watcher announces a stream only once per live session; when a user goes offline the session marker clears so a future live event re-announces.
|
||||
|
||||
### SSE Event Types Relevant to Twitch
|
||||
|
||||
- `twitchUsersUpdate`: `{ users: ["user1", "user2"], guildId: "..." }`
|
||||
- `liveNotificationsUpdate`: `{ enabled, channelId, twitchUser, message, customMessage, guildId }`
|
||||
|
||||
Consume these to live-update UI without refresh (the `BackendContext` exposes an `eventTarget`).
|
||||
|
||||
### Customizing Messages
|
||||
|
||||
- In the dashboard under Live Notifications you can set both a Default Message and a Custom Message.
|
||||
- Clear Custom to fall back to Default.
|
||||
- Save persists to backend and pushes an SSE `liveNotificationsUpdate`.
|
||||
|
||||
### Future Improvements
|
||||
|
||||
- Template variable replacement: support `{user}`, `{title}`, `{category}`, `{viewers}` inside message strings.
|
||||
- Per-user custom messages (different prefix for each watched streamer).
|
||||
- Embed image improvements (dynamic preview resolution trimming for Twitch thumbnails).
|
||||
|
||||
Notes about Postgres requirement
|
||||
- The backend now assumes Postgres persistence (via `DATABASE_URL`). If `DATABASE_URL` is not set the server will exit and complain. This change makes server settings authoritative and persistent across restarts.
|
||||
|
||||
|
||||
Reference in New Issue
Block a user