Modul-System: alle 35 Funktionen im Panel ein- und ausschaltbar
Deploy / check (push) Has been cancelled
Deploy / deploy (push) Has been cancelled

Bisher waren die Schalter über die Oberfläche verstreut: fünf Funktionen
hatten einen Haken, 22 weitere gingen nur über den Umweg „Kanal leeren".
Für jeden außer dem Owner war das nicht auffindbar.

Jetzt steht in src/modules.js ein zentrales Register aller Funktionen mit
Beschreibung, Standard-Zustand und den Einstellungen, die sie brauchen.
Daraus entsteht ein neuer Setup-Tab mit Karten: Schiebeschalter, kurze
Erklärung, Hinweis was noch fehlt ("Fehlt noch: Release-Kanal") und ein
Sprung zu den Einstellungen.

Damit die Schalter keine Attrappen sind, prüfen die Bot-Module jetzt an
18 Stellen zentral, ob sie laufen dürfen — Starboard, Galerie, Modmail,
Willkommen, Protokoll, Auto-Antworten, Sprachkanäle, Erinnerungen,
Events, Twitch/YouTube, Monitor, Wächter, Releases, Rückblick,
Geburtstage, Verlosungen und geplante Beiträge.

Funktionen mit vorhandenem Schalter (Level-System, Backups, Member-Gate …)
nutzen weiterhin dieselbe Einstellung, damit keine zweite Wahrheit
entsteht und bestehende Konfigurationen unverändert weiterlaufen.

Nebenbei gefunden und behoben: Beim Anlegen eines Modmail-Threads wurde
`member.client` benutzt, obwohl es an der Stelle kein `member` gibt — der
erste Modmail-Thread wäre mit einem Fehler abgebrochen.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
2026-07-31 15:53:44 +02:00
co-authored by Claude Fable 5
parent bdbd35883c
commit 59aad27534
16 changed files with 451 additions and 1 deletions
+3
View File
@@ -8,6 +8,7 @@ import {
twitchChannel, twitchClientId, twitchClientSecret,
brandColor, brandColor2, brandFooter,
} from '../runtime-settings.js';
import { moduleEnabled } from '../modules.js';
const CHECK_INTERVAL_MS = 5 * 60 * 1000;
let twitchToken = null; // { token, expiresAt }
@@ -22,6 +23,7 @@ async function announce(client, embed) {
/* ── YouTube (RSS, ohne API-Key) ───────────────────── */
async function checkYouTube(client) {
if (!moduleEnabled('social')) return;
const channelId = youtubeChannelId();
if (!channelId) return;
const res = await fetch(`https://www.youtube.com/feeds/videos.xml?channel_id=${channelId}`, {
@@ -67,6 +69,7 @@ async function getTwitchToken() {
}
async function checkTwitch(client) {
if (!moduleEnabled('social')) return;
const login = twitchChannel();
if (!login || !twitchClientId() || !twitchClientSecret()) return;