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.
|
||||
const heim = jetzt.heimStationId ? getStation(jetzt.heimStationId) : null;
|
||||
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 {
|
||||
embed.setDescription(liste.length > 0
|
||||
? '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
|
||||
* naheliegende Schluss wäre „kaputt". Läuft dagegen schon etwas — Sender oder
|
||||
* Titel —, wird nicht dazwischengefunkt: die Liste kommt dran, wenn sie dran
|
||||
* ist.
|
||||
* Drei Fälle, und der mittlere ist der, den ich am 28.08.2026 falsch hatte:
|
||||
*
|
||||
* nichts läuft → die Liste fängt an. Sonst legt jemand drei Titel hinein,
|
||||
* 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) {
|
||||
if (laeuft(guildId) || !kanalId) return false;
|
||||
const q = await weiter(client, guildId, { erzwungen: true, kanalId });
|
||||
const jetzt = laeuft(guildId);
|
||||
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);
|
||||
}
|
||||
|
||||
/**
|
||||
* 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 ────────────────────────────────────────────
|
||||
//
|
||||
// Ein Discord-Auswahlmenü gibt nur die `value` zurück, und da passt keine
|
||||
|
||||
Reference in New Issue
Block a user