README mit Aufbau, Verhalten und Stolpersteinen

This commit is contained in:
MineTec committed 2026-10-18 13:57:47 +02:00
1 parent ba22c9c79f
commit f127b90eca
1 file changed
+53
+53
View File
@@ -0,0 +1,53 @@
# voice-bridge
Verbindet Gruppen in Simple Voice Chat mit Voice-Channels in TeamSpeak und Discord („Crosstalk“).
Jede Seite hört die beiden anderen: Discord und TeamSpeak bekommen je einen gemischten Stream,
im Spiel kommt jeder externe Sprecher einzeln an (Lautstärke-Kategorie „Discord/TeamSpeak“).
| Modul | Läuft als | Inhalt |
|---|---|---|
| `plugin` | `plugins/voice-bridge.jar` auf Paper | legt die Gruppen an, schickt/spielt Audio, Hinweis beim Beitritt |
| `bridge` | eigener Dienst (`voice-bridge.jar`) | Discord-Bots (JDA + JDave), TeamSpeak-Clients (ts3j), Mischer (Concentus) |
| `protocol` | in beiden | UDP-Nachrichten Plugin ↔ Bridge (Standard: `127.0.0.1:24470`) |
`third_party/ts3j` ist ein Git-Submodul (`git submodule update --init`), JitPack hat keinen aktuellen Build.
## Bauen
```
./gradlew build
```
- Plugin: `plugin/build/libs/voice-bridge.jar`
- Bridge: `bridge/build/libs/voice-bridge.jar` (Fat-Jar), starten mit
`java --enable-native-access=ALL-UNNAMED -jar voice-bridge.jar config.yml`
## Verhalten
- Ein Raum ist aktiv, sobald auf mindestens zwei Seiten jemand ist.
- Bots verbinden sich nur, wenn der Raum aktiv ist und auf ihrer Seite jemand sitzt; danach bleiben
sie `lingerSeconds` (Standard 15) verbunden.
- TeamSpeak: ein Beobachter-Client ist dauerhaft verbunden (1 Slot), Raum-Clients nur bei Bedarf.
Fehlende Channels legt die Bridge unter `parentChannel` an (braucht Rechte zum Anlegen).
- Discord: ein Bot pro Raum (ein Bot kann pro Server nur in einem Voice-Channel sein). Fehlende
Channels legt der Bot in `category` an. Einladen mit
`https://discord.com/oauth2/authorize?client_id=APP_ID&scope=bot&permissions=70255632`
(Kanäle sehen, verbinden, sprechen, Kanäle verwalten, Nickname ändern).
## Config
Vorlage: `bridge/config.example.yml`. Die echte `config.yml` enthält Bot-Tokens und gehört nicht ins Repo.
## Stolpersteine
- **glibc ≥ 2.38**: Die `libdave.so` aus JDave (und Discords eigene Builds) brauchen glibc 2.38 und
GLIBCXX_3.4.32. Auf Debian 13 kein Problem, auf Ubuntu 22.04 lädt sie nicht
(„Cannot open library … dave….so“). Lokal hilft ein Debian-13-Loader:
glibc und libstdc++ aus den trixie-Paketen entpacken und
`ld-linux-x86-64.so.2 --library-path <libs>:$JAVA_HOME/lib:$JAVA_HOME/lib/server $JAVA_HOME/bin/java …` starten.
- **TeamSpeak 6 (mhsl.eu)**: verlangt Security-Level 15, Nicknames höchstens 30 Zeichen.
Schnelle Reconnects lösen den Flood-Schutz aus (IP-Bann), deshalb Backoff beim Verbinden.
Den Bot-Identitäten am besten `b_client_ignore_antiflood` geben.
- **Discord**: Die ersten Pakete nach dem Beitritt schlagen beim Entschlüsseln fehl
(„Decrypt failed“), bis DAVE die Schlüssel ausgehandelt hat. Das ist normal.
- Mit `-Dvoicebridge.ts3debug=true` loggt ts3j das TeamSpeak-Protokoll (Fehlercodes vom Server).