feat: Discord webhook notifications for live + VOD events
For users who run the app on a dedicated archive box and aren't watching the queue panel directly. Three optional event types post to a Discord webhook: - Live recording started: red embed with streamer + URL + output filename. Fires inside downloadLiveStream after chat-capture init, before streamlink launches, so a hung streamlink doesn't silently delay the alert. - Live recording ended: green (ok) or purple (failed) embed with duration, file size, captured-chat-message count, output filename. Fires after streamlink exits — picks up cancellation, integrity failure, and clean stream-ended exits the same way. - VOD download complete: green embed with file count + total bytes. Skipped for live items (those have their own end-of-recording embed; double-firing would be noisy). Server: - New isAcceptableDiscordWebhook(url) regex sanity-check — refuses URLs that aren't discord.com/api/webhooks/* so a pasted-by-mistake other URL doesn't leak data anywhere. - sendDiscordWebhook(payload) is fire-and-forget: 8s timeout, errors logged via appendDebugLog but never surface to the user. Should NOT block the recording flow. - DiscordEmbedColor enum maps live/success/info to known palette values (red / green / Twitch purple). - Embed body slices fields to Discord's documented length limits (title 256, description 4096, field name 256, field value 1024, max 25 fields per embed) so a runaway long stream title can't produce a rejected webhook. Renderer / settings: - New Settings card "Discord-Webhook" between Backup and Updates. URL input + 3 toggles (live-start / live-end / vod-complete). All three default off, URL empty — totally inert until the user configures it. - AppConfig type, autosave fingerprint, syncSettingsForm, applyLanguageToStaticUI, debounced-save IDs all updated. Webhook URL is debounced like other text inputs so each keystroke doesn't trigger a save. - DE + EN locales for every label. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 4.7
parent
0ab3780ab1
commit
47862e7fbf
@@ -596,6 +596,29 @@
|
||||
<pre id="debugLogOutput" class="log-panel">Lade...</pre>
|
||||
</div>
|
||||
|
||||
<div class="settings-card">
|
||||
<h3 id="discordCardTitle">Discord-Webhook</h3>
|
||||
<p id="discordCardIntro" style="color: var(--text-secondary); font-size:13px; margin-bottom:12px; line-height:1.5;">Sende Benachrichtigungen an einen Discord-Channel via Webhook — nuetzlich fuer Multi-Device-Setups oder eine dedizierte Archiv-Maschine.</p>
|
||||
<div class="form-group">
|
||||
<label id="discordWebhookUrlLabel">Webhook-URL</label>
|
||||
<input type="text" id="discordWebhookUrl" placeholder="https://discord.com/api/webhooks/...">
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label style="display:flex; align-items:center; gap:8px;">
|
||||
<input type="checkbox" id="discordNotifyLiveStartToggle">
|
||||
<span id="discordNotifyLiveStartLabel">Bei Live-Aufnahme-Start benachrichtigen</span>
|
||||
</label>
|
||||
<label style="display:flex; align-items:center; gap:8px; margin-top: 8px;">
|
||||
<input type="checkbox" id="discordNotifyLiveEndToggle">
|
||||
<span id="discordNotifyLiveEndLabel">Bei Live-Aufnahme-Ende benachrichtigen</span>
|
||||
</label>
|
||||
<label style="display:flex; align-items:center; gap:8px; margin-top: 8px;">
|
||||
<input type="checkbox" id="discordNotifyVodCompleteToggle">
|
||||
<span id="discordNotifyVodCompleteLabel">Bei abgeschlossenem VOD-Download benachrichtigen</span>
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="settings-card">
|
||||
<h3 id="backupCardTitle">Sicherung & Wartung</h3>
|
||||
<p id="backupCardIntro" style="color: var(--text-secondary); font-size:13px; margin-bottom:12px; line-height:1.5;">Konfiguration sichern, auf einem anderen Geraet wiederherstellen, oder die Liste der bereits heruntergeladenen VODs zuruecksetzen.</p>
|
||||
|
||||
Reference in New Issue
Block a user