Beim Sender kam die Warteschlange nie dran
Im Betrieb gemeldet: Link eingereiht, Bot blieb beim Radio. `ggfAnwerfen` stieg aus, sobald ueberhaupt etwas lief -- Sender wie Titel. Der Kommentar daneben sagte "die Liste kommt dran, wenn sie dran ist", und beim Sender war das schlicht falsch: ein Sender endet nie, es gibt also kein Idle, das weiterschaltet. Der einzige Idle, den es gibt, ist ein abgerissener Strom -- und der startet denselben Sender neu. Der Titel wartete auf einen Moment, der nie kommt. Damit war auch der Rueckweg unerreichbar: "Liste leer -> zurueck auf den Sender" setzt voraus, dass man ueberhaupt erst vom Sender wegkommt. Jetzt uebernimmt ein frisch eingereihter Titel sofort, wenn ein Sender laeuft. Der Sender ist nicht verloren -- er steht als heimStation im laufenden Eintrag und kommt zurueck, sobald die Liste leer ist. Ein laufender YouTube-Titel wird weiterhin nicht unterbrochen. Die Regel steckte als Bedingung mitten in der Funktion und war von aussen weder zu lesen noch zu pruefen. Sie heisst jetzt `uebernimmtSofort()` und laesst sich mit allen drei Eingaben durchspielen -- genau das ist gemacht: nichts laeuft -> true, Sender laeuft -> true (war vorher false, das war der Fehler), YouTube laeuft -> false. Der Quellenwechsel geht jetzt ins Log. Von aussen sieht "YouTube uebernimmt" genauso aus wie "nichts passiert", und der Unterschied ist genau der, den es hier zu sehen gibt. Die Musik-Tafel behauptete "kommt als Naechstes dran" -- korrigiert auf "uebernimmt sofort".
This commit is contained in:
+44
-8
@@ -107,7 +107,7 @@ export function musikEmbed(client, guildId) {
|
|||||||
// auch nicht als einer dargestellt.
|
// auch nicht als einer dargestellt.
|
||||||
const heim = jetzt.heimStationId ? getStation(jetzt.heimStationId) : null;
|
const heim = jetzt.heimStationId ? getStation(jetzt.heimStationId) : null;
|
||||||
embed.setDescription(`📻 Gerade läuft das Radio${heim ? ` (**${heim.name}**)` : ''}.\n`
|
embed.setDescription(`📻 Gerade läuft das Radio${heim ? ` (**${heim.name}**)` : ''}.\n`
|
||||||
+ 'Was hier eingereiht wird, kommt als Nächstes dran.');
|
+ 'Was hier eingereiht wird, übernimmt sofort — danach geht es zurück auf den Sender.');
|
||||||
} else {
|
} else {
|
||||||
embed.setDescription(liste.length > 0
|
embed.setDescription(liste.length > 0
|
||||||
? 'Nichts läuft. **Überspringen** startet die Warteschlange — '
|
? 'Nichts läuft. **Überspringen** startet die Warteschlange — '
|
||||||
@@ -229,19 +229,55 @@ export function eintraegeAufnehmen(guildId, eintraege, wunschVon = null) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Läuft nichts, soll das Einreihen sofort Musik machen.
|
* Nach dem Einreihen: soll das jetzt losgehen?
|
||||||
*
|
*
|
||||||
* Sonst legt jemand drei Titel in eine Liste, es passiert nichts, und der
|
* Drei Fälle, und der mittlere ist der, den ich am 28.08.2026 falsch hatte:
|
||||||
* naheliegende Schluss wäre „kaputt". Läuft dagegen schon etwas — Sender oder
|
*
|
||||||
* Titel —, wird nicht dazwischengefunkt: die Liste kommt dran, wenn sie dran
|
* nichts läuft → die Liste fängt an. Sonst legt jemand drei Titel hinein,
|
||||||
* ist.
|
* es passiert nichts, und der naheliegende Schluss wäre
|
||||||
|
* „kaputt".
|
||||||
|
* Sender läuft → **der Titel übernimmt sofort.** „Das Radio ist die
|
||||||
|
* Grundstellung, YouTube die Unterbrechung" — und eine
|
||||||
|
* Unterbrechung, die wartet, ist keine. Hier stand vorher
|
||||||
|
* „die Liste kommt dran, wenn sie dran ist", und das war
|
||||||
|
* beim Sender schlicht falsch: ein Sender endet nie, also
|
||||||
|
* gibt es kein `Idle`, das weiterschaltet. Der einzige
|
||||||
|
* `Idle`, den es gibt, ist ein abgerissener Strom — und der
|
||||||
|
* startet denselben Sender neu. Der Titel wartete also auf
|
||||||
|
* einen Moment, der nie kommt. Im Betrieb gemeldet: Link
|
||||||
|
* eingereiht, Bot blieb beim Radio.
|
||||||
|
* Der Sender ist nicht verloren: er steht als `heimStation`
|
||||||
|
* im laufenden Eintrag und kommt zurück, wenn die Liste
|
||||||
|
* leer ist.
|
||||||
|
* Titel läuft → nicht dazwischenfunken. Der Neue reiht sich ein, und
|
||||||
|
* *hier* stimmt „kommt dran, wenn er dran ist" auch.
|
||||||
*/
|
*/
|
||||||
export async function ggfAnwerfen(client, guildId, kanalId) {
|
export async function ggfAnwerfen(client, guildId, kanalId) {
|
||||||
if (laeuft(guildId) || !kanalId) return false;
|
const jetzt = laeuft(guildId);
|
||||||
const q = await weiter(client, guildId, { erzwungen: true, kanalId });
|
if (!uebernimmtSofort(jetzt)) return false;
|
||||||
|
// Ohne eigene Angabe der Kanal, in dem der Bot schon steht.
|
||||||
|
const ziel = jetzt?.channelId ?? kanalId;
|
||||||
|
if (!ziel) return false;
|
||||||
|
const q = await weiter(client, guildId, { erzwungen: true, kanalId: ziel });
|
||||||
return Boolean(q);
|
return Boolean(q);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Die Regel als eigener Satz — weil genau sie falsch war.
|
||||||
|
*
|
||||||
|
* Sie steckte als Bedingung mitten in `ggfAnwerfen` (`if (laeuft(guildId))
|
||||||
|
* return false`) und war von aussen weder zu lesen noch zu prüfen. Hier hat
|
||||||
|
* sie einen Namen und lässt sich mit allen drei Eingaben durchspielen.
|
||||||
|
*
|
||||||
|
* @param {object|null} jetzt Der laufende Eintrag, oder null
|
||||||
|
* @returns {boolean} true = der neue Titel fängt sofort an
|
||||||
|
*/
|
||||||
|
export function uebernimmtSofort(jetzt) {
|
||||||
|
// Nur ein laufender YouTube-Titel wird nicht unterbrochen. Ein Sender
|
||||||
|
// schon — er ist die Grundstellung, kein Vorrang.
|
||||||
|
return jetzt?.quelle?.art !== 'youtube';
|
||||||
|
}
|
||||||
|
|
||||||
// ── Suchtreffer zwischenlagern ────────────────────────────────────────────
|
// ── Suchtreffer zwischenlagern ────────────────────────────────────────────
|
||||||
//
|
//
|
||||||
// Ein Discord-Auswahlmenü gibt nur die `value` zurück, und da passt keine
|
// Ein Discord-Auswahlmenü gibt nur die `value` zurück, und da passt keine
|
||||||
|
|||||||
+6
-1
@@ -51,7 +51,7 @@ import {
|
|||||||
import { moduleEnabled } from '../modules.js';
|
import { moduleEnabled } from '../modules.js';
|
||||||
import {
|
import {
|
||||||
listStations, getStation, radioState, radioStates, setRadioState, clearRadioState, setSetting,
|
listStations, getStation, radioState, radioStates, setRadioState, clearRadioState, setSetting,
|
||||||
queueNext, queueAdd, queueVor,
|
queueNext, queueAdd, queueVor, queueStand,
|
||||||
} from '../db.js';
|
} from '../db.js';
|
||||||
import { senderGrundstock } from './radio-sender.js';
|
import { senderGrundstock } from './radio-sender.js';
|
||||||
import { tonstrom, ytdlpPruefen, ytdlpVorhanden } from './youtube.js';
|
import { tonstrom, ytdlpPruefen, ytdlpVorhanden } from './youtube.js';
|
||||||
@@ -815,6 +815,11 @@ export async function weiter(client, guildId, { erzwungen = false, kanalId: star
|
|||||||
}
|
}
|
||||||
throw error;
|
throw error;
|
||||||
}
|
}
|
||||||
|
// Der Wechsel gehört ins Log: von aussen sieht „YouTube uebernimmt"
|
||||||
|
// genauso aus wie „nichts passiert", und der Unterschied ist genau
|
||||||
|
// der, den es hier zu sehen gibt.
|
||||||
|
console.log(`[radio] ${quelle.art === 'youtube' ? '▶️' : '📻'} ${quelleName(quelle)}`
|
||||||
|
+ `${naechster ? ` (noch ${queueStand(guildId).n} in der Liste)` : ' — Warteschlange leer'}`);
|
||||||
const tafel = radioState(guildId);
|
const tafel = radioState(guildId);
|
||||||
setRadioState({
|
setRadioState({
|
||||||
guildId,
|
guildId,
|
||||||
|
|||||||
Reference in New Issue
Block a user