feat: Soundboard Plugin + Radio Globe Fixes

- Add Soundboard plugin (full Jukebox port): server + frontend + CSS
- Fix Radio Globe: swap geo coords (API returns [lng,lat] not [lat,lng])
- Fix Radio stations showing "Unbekannt": use item.page.title + fix channel ID regex
- Add DirectMessages + MessageContent intents for DM commands
- Register SoundboardTab in App.tsx with scoped theme/card-size CSS vars

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Daniel 2026-03-06 00:51:07 +01:00
parent 6696fed9d7
commit 901dfe54be
9 changed files with 4545 additions and 14 deletions

View file

@ -100,7 +100,8 @@ export default function RadioTab({ data }: { data: any }) {
setStationsLoading(true);
setStations([]);
if (globeRef.current) {
globeRef.current.pointOfView({ lat: point.geo[0], lng: point.geo[1], altitude: 0.4 }, 800);
// Radio Garden geo format: [lng, lat]
globeRef.current.pointOfView({ lat: point.geo[1], lng: point.geo[0], altitude: 0.4 }, 800);
}
fetch(`/api/radio/place/${point.id}/channels`)
.then(r => r.json())
@ -123,8 +124,9 @@ export default function RadioTab({ data }: { data: any }) {
.atmosphereColor('rgba(230, 126, 34, 0.25)')
.atmosphereAltitude(0.12)
.pointsData(places)
.pointLat((d: any) => d.geo[0])
.pointLng((d: any) => d.geo[1])
// Radio Garden geo format: [lng, lat]
.pointLat((d: any) => d.geo[1])
.pointLng((d: any) => d.geo[0])
.pointColor(() => 'rgba(230, 126, 34, 0.85)')
.pointRadius((d: any) => Math.max(0.12, Math.min(0.45, 0.06 + (d.size ?? 1) * 0.005)))
.pointAltitude(0.003)