Radio: Schalter dorthin, wo man ihn sucht — und Stille sagt jetzt warum
Drei Sachen, alle vom selben Bericht ausgeloest. 1. Der Schalter war nur im Modul-Reiter zu finden, die Meldung schickte aber nach "Community". Beim Nachsehen kam heraus: Modul-Schalter haben in /api/settings gar keinen Weg — jeder stand von Hand in api.js, und fuenf fehlten dort (radio, automod, anti_raid, linked_roles, ls_farm). Die liessen sich nur ueber den Modulreiter umlegen. Jetzt kommen sie wie Kanaele, Rollen und Texte aus dem Register; jeder neue ist damit von allein speicherbar. Dazu steht der Haken jetzt oben im Radio-Abschnitt, wo auch die Sender stehen. 2. Der Bot sass im Sprachkanal und schwieg. Ursache im Code: nach joinVoiceChannel wurde sofort losgespielt. Der Aufruf kommt zurueck, sobald der Bot sichtbar im Kanal steht — der UDP-Weg wird danach erst ausgehandelt. Wer vorher sendet, sendet ins Leere. Jetzt wird auf VoiceConnectionStatus.Ready gewartet, und schlaegt das fehl, sagt der Befehl es statt still dazustehen. 3. Stille erklaert sich. Fehlt ffmpeg im Container, setzte sich der Bot bisher hin und schwieg — nichts stuerzte ab, nichts fehlte sichtbar. ffmpeg wird jetzt beim Start geprueft, /radio verweigert mit klarer Ansage, und kommt binnen acht Sekunden kein Ton, steht der Grund in der Tafel: fehlendes ffmpeg oder ein Sender, der nichts liefert. Nebenbei: -analyzeduration stand hinter -i und wurde damit als Ausgabe-Option gelesen, also ignoriert. Geprueft: die Tonkette laeuft lokal gegen einen echten Sender durch bis zum Abspieler (4,1 s Ton in 6 s Laufzeit, Status bleibt playing). Alle 16 Modul-Schalter gehen angemeldet durch /api/settings hin und zurueck. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -6,7 +6,7 @@
|
||||
import { SlashCommandBuilder, MessageFlags } from 'discord.js';
|
||||
import { moduleEnabled } from '../../modules.js';
|
||||
import { listStations, getStation, setRadioState } from '../../db.js';
|
||||
import { spielen, laeuft, tafelEmbed, tafelKomponenten, titelHolen } from '../radio.js';
|
||||
import { spielen, laeuft, tafelEmbed, tafelKomponenten, titelHolen, ffmpegVorhanden } from '../radio.js';
|
||||
|
||||
export const data = new SlashCommandBuilder()
|
||||
.setName('radio')
|
||||
@@ -15,7 +15,7 @@ export const data = new SlashCommandBuilder()
|
||||
export async function execute(interaction) {
|
||||
if (!moduleEnabled('radio')) {
|
||||
await interaction.reply({
|
||||
content: '❌ Radio ist ausgeschaltet — im Panel unter **Community** einschaltbar.',
|
||||
content: '❌ Radio ist ausgeschaltet — im Panel unter **Community → Radio** einschalten.',
|
||||
flags: MessageFlags.Ephemeral,
|
||||
});
|
||||
return;
|
||||
@@ -53,6 +53,17 @@ export async function execute(interaction) {
|
||||
}
|
||||
}
|
||||
|
||||
// Ohne ffmpeg wuerde der Bot sich hinsetzen und schweigen. Lieber gleich
|
||||
// sagen, woran es liegt, als jemanden im stillen Kanal warten lassen.
|
||||
if (ffmpegVorhanden() === false) {
|
||||
await interaction.reply({
|
||||
content: '❌ Auf dem Server fehlt **ffmpeg** — ohne das kann der Bot keinen Ton '
|
||||
+ 'umwandeln. Das Image muss neu gebaut werden.',
|
||||
flags: MessageFlags.Ephemeral,
|
||||
});
|
||||
return;
|
||||
}
|
||||
|
||||
// Verbinden dauert länger als die drei Sekunden, die Discord gibt
|
||||
await interaction.deferReply();
|
||||
|
||||
@@ -64,7 +75,7 @@ export async function execute(interaction) {
|
||||
await spielen(kanal, station);
|
||||
} catch (error) {
|
||||
console.error('[radio]', error);
|
||||
await interaction.editReply('❌ Verbindung in den Sprachkanal fehlgeschlagen.');
|
||||
await interaction.editReply(`❌ ${error.message || 'Verbindung in den Sprachkanal fehlgeschlagen.'}`);
|
||||
return;
|
||||
}
|
||||
({ titel } = await titelHolen(station.url));
|
||||
@@ -72,8 +83,10 @@ export async function execute(interaction) {
|
||||
if (s) s.titel = titel;
|
||||
}
|
||||
|
||||
const jetzt = laeuft(interaction.guild.id);
|
||||
const nachricht = await interaction.editReply({
|
||||
embeds: [tafelEmbed(interaction.client, station, titel, kanal?.id ?? schonAn?.channelId)],
|
||||
embeds: [tafelEmbed(interaction.client, station, titel, kanal?.id ?? schonAn?.channelId,
|
||||
{ tonLaeuft: jetzt?.tonLaeuft, ffmpeg: ffmpegVorhanden() })],
|
||||
components: tafelKomponenten(stationen, station?.id),
|
||||
});
|
||||
|
||||
|
||||
Reference in New Issue
Block a user