Liegestuetze: pro Stream mitzaehlen, wie viele gemacht sind

Herunterzaehlen mit -1/-5/-10 zaehlt als gemacht, Setzen bleibt eine
Korrektur und zaehlt nicht. Der Stand "gemacht" beginnt mit jedem neuen
Stream bei 0 (nicht beim Neustart des Hubs mitten im Stream), steht im
Overlay unter der offenen Zahl und laesst sich auf der Uebersicht
korrigieren.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
This commit is contained in:
ZeasyAlexandClaude Opus 5.5 committed 2026-10-04 00:46:32 +02:00
1 parent eb9eab949e
commit 094a791da2
7 files changed
+213 -79

No files matched your search

+24 -13
View File
@@ -99,7 +99,7 @@ export async function runHub(): Promise<void> {
const liegestuetze = createLiegestuetze(db);
// Gleich zu Beginn in den Bus, sonst zeigt eine frisch verbundene
// Browser-Source 0, bis die naechste Einloesung kommt.
bus.publish({ kind: 'liegestuetze', offen: liegestuetze.stand() });
bus.publish({ kind: 'liegestuetze', ...liegestuetze.stand() });
/**
* Eine Einloesung abschliessen (FULFILLED) oder die Punkte zurueckgeben
@@ -196,8 +196,7 @@ export async function runHub(): Promise<void> {
if (ent.aktion === 'emote-regen') bus.publish({ kind: 'hype', score: 5, rate: 40 });
if (ent.aktion === 'liegestuetze') {
const dazu = ent.plan.anzahl ?? 5;
const offen = liegestuetze.aendern(dazu);
bus.publish({ kind: 'liegestuetze', offen, dazu, name: e.userName });
bus.publish({ kind: 'liegestuetze', ...liegestuetze.aendern(dazu), dazu, name: e.userName });
}
log.info(`${e.userName} hat "${e.rewardTitle}" eingeloest -> ${ent.aktion}`);
void einloesungSetzen(e.rewardId, e.id, 'FULFILLED');
@@ -331,7 +330,7 @@ export async function runHub(): Promise<void> {
goLive: announcer.lastResult() ?? 'noch nichts',
overlayClients: bus.clients(),
ttsWartend: warteschlange.liste().length,
liegestuetzeOffen: liegestuetze.stand(),
liegestuetze: liegestuetze.stand(),
ttsStimme: stimmeFehlt.length ? `fehlt: ${stimmeFehlt.join(', ')}` : 'bereit',
spikeArmed: spikes.isArmed(),
note: state.chatAnonymous
@@ -374,23 +373,35 @@ export async function runHub(): Promise<void> {
liegestuetze: {
stand: () => liegestuetze.stand(),
aendern: (n) => {
const offen = liegestuetze.aendern(n);
bus.publish({ kind: 'liegestuetze', offen });
log.info(`Liegestuetze von Hand ${n > 0 ? '+' : ''}${n} -> ${offen} offen`);
return offen;
const neu = liegestuetze.aendern(n);
bus.publish({ kind: 'liegestuetze', ...neu });
log.info(`Liegestuetze von Hand ${n > 0 ? '+' : ''}${n} -> ` +
`${neu.offen} offen, ${neu.gemacht} gemacht`);
return neu;
},
setzen: (n) => {
const offen = liegestuetze.setzen(n);
bus.publish({ kind: 'liegestuetze', offen });
log.info(`Liegestuetze von Hand gesetzt -> ${offen} offen`);
return offen;
const neu = liegestuetze.setzen(n);
bus.publish({ kind: 'liegestuetze', ...neu });
log.info(`Liegestuetze von Hand gesetzt -> ${neu.offen} offen`);
return neu;
},
gemachtSetzen: (n) => {
const neu = liegestuetze.gemachtSetzen(n);
bus.publish({ kind: 'liegestuetze', ...neu });
log.info(`Liegestuetze gemacht von Hand gesetzt -> ${neu.gemacht}`);
return neu;
},
},
});
void server;
// ---- Zuschauerzahlen und Stream-Sitzungen
void pollStream(cfg, repo, state, bus, abort.signal, (stream) => announcer.announce(stream));
void pollStream(cfg, repo, state, bus, abort.signal, (stream) => {
announcer.announce(stream);
// Nur bei einem wirklich neuen Stream, nicht beim Neustart des Hubs
// mitten im Stream: dann wird die Sitzung uebernommen, nicht gestartet.
bus.publish({ kind: 'liegestuetze', ...liegestuetze.neuerStream() });
});
// ---- EventSub erst, wenn ein Konto verbunden ist. Ohne Nutzer-Token
// wuerde der Verbindungsversuch im Minutentakt scheitern und nichts als