From f127b90ecafe907067b5c0f152e3717d7d46804d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Elias=20M=C3=BCller?= Date: Sun, 18 Oct 2026 13:57:47 +0200 Subject: [PATCH] README mit Aufbau, Verhalten und Stolpersteinen --- README.md | 53 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100644 README.md diff --git a/README.md b/README.md new file mode 100644 index 0000000..b7e02f6 --- /dev/null +++ b/README.md @@ -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 :$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).