Dokumentation nachziehen -- und einen verlorenen Wunsch retten

Der README behauptete an prominenter Stelle "bewusst kein YouTube".
Das stimmt seit vier Commits nicht mehr, und ein Satz, der das Gegenteil
des Codes sagt, wird geglaubt. Ersetzt samt der PO-Token-Lage und dem
Hinweis auf Cookies und eigene Argumente.

.env.example kennt jetzt FFMPEG_PATH und YTDLP_PATH -- mit dem Hinweis,
dass YTDLP_PATH=/bin/false der Weg ist, den Fehlerpfad zu pruefen.

Beim letzten Durchlesen aufgefallen: `weiter()` holt den naechsten Titel
aus der Liste, BEVOR `spielen()` laeuft. Scheitert der Beitritt in den
Sprachkanal -- fehlendes Recht, voller Kanal, DAVE --, war der Eintrag
weg. Genau im haeufigsten Fall: jemand reiht etwas ein, waehrend der Bot
noch gar nicht im Kanal sitzt, der erste Beitritt ist der, der scheitern
kann, und der Wunsch verschwindet wortlos.

Jetzt wird er wieder ganz vorn eingereiht und der Fehler weitergereicht.
Gegenprobe mit einem Kanal, dessen Beitritt garantiert wirft: drei Titel
vorher, drei Titel nachher, "Erster" wieder an erster Stelle.
This commit is contained in:
2026-08-28 13:52:56 +02:00
parent dbec4e9775
commit e165402f7d
3 changed files with 30 additions and 5 deletions
+18 -4
View File
@@ -51,7 +51,7 @@ import {
import { moduleEnabled } from '../modules.js';
import {
listStations, getStation, radioState, radioStates, setRadioState, clearRadioState, setSetting,
queueNext,
queueNext, queueAdd, queueVor,
} from '../db.js';
import { senderGrundstock } from './radio-sender.js';
import { tonstrom, ytdlpPruefen, ytdlpVorhanden } from './youtube.js';
@@ -801,13 +801,27 @@ export async function weiter(client, guildId, { erzwungen = false, kanalId: star
return null;
}
await spielen(kanal, quelle);
try {
await spielen(kanal, quelle);
} catch (error) {
// Der Eintrag ist oben schon aus der Liste geholt worden. Kommt
// die Sprachverbindung nicht zustande, waere er damit weg —
// jemand reiht etwas ein, der Beitritt scheitert an einem Recht,
// und der Wunsch ist verschwunden. Also zurück an dieselbe
// Stelle: anhängen und nach vorn holen.
if (naechster) {
const neu = queueAdd(guildId, naechster);
queueVor(guildId, neu);
}
throw error;
}
const tafel = radioState(guildId);
setRadioState({
guildId,
channelId: kanalId,
stationId: laufend.get(guildId)?.heimStationId ?? null,
panelChannelId: radioState(guildId)?.panel_channel_id,
panelMessageId: radioState(guildId)?.panel_message_id,
panelChannelId: tafel?.panel_channel_id,
panelMessageId: tafel?.panel_message_id,
});
// Beim Rückfall auf den Sender steht sonst noch der letzte Liedtitel
// in der Statuszeile und behauptet, er liefe.