Seit über zwei Jahren nutzen wir den VOIP-Dienst Mumble. Der TeamSpeak-Klon überzeugt uns aus vielen Gründen, so ist das Tool Open Source, kann quasi überall laufen und durch Public-/Private Keys kann man sich über mehrere Server und Geräte identifizieren.

Auch dabei ist eine große Anzahl APIs, die es in verschiedenen Sprachen ermöglichen, Schnittstellen zu bauen. Eine neue Schnittstelle möchte ich heute vorstellen: mumbleSniff.

mumbleSniff

Das eigentliche Script lässt sich hier finden und ist keine große Sache, sondern verbindet sich mit Telegram und Mumble. Wenn jemand in Mumble online geht, bekommen alle Abonnenten eine Nachricht — zack fertig. Als neueres Feature werden nun Chatnachrichten weitergeleitet, sowohl von Telegram nach Mumble und vice-versa.

Ich will das auch!

Das Skript benötigt den node package manager (npm), um die Verbindungen zu Telegram und Mumble herzustellen. Außerdem solltest du schon mit dem BotFather gesprochen haben und einen API-Key bereithalten. Anschließend folgst du diesen Schritten:

## Verzeichnis herunterladen
~ $ git clone https://github.com/jeyemwey/mumbleSniff.git
~ $ cd mumbleSniff

## Abhängigkeiten laden
~/mumbleSniff $ npm install

## Schlüssel für die Mumble-Verbindung generieren
~/mumbleSniff $ openssl req -x509 -newkey rsa:2048 -nodes -keyout key.pem -out cert.pem

## Konfiguration erstellen
~/mumbleSniff $ cp default.env .env
~/mumbleSniff $ vi .env

In die .env-Datei schreibst du dann die Konfiguration:

Key Value
TELEGRAM_BOT_TOKEN Der Schlüssel vom BotFather
SERVERURL Die IP-Adresse/Domain vom Mumble-Server. Wenn der Port nicht Standard (64378) ist, für diese nach einem Doppelpunkt hinzu. Beispiel: example.net:1337
MUMBLEUSER Der Name des Bots wie er in Mumble erscheinen soll. Wichtig ist, dass dieser Benutzername im Server noch keinem anderen Schlüssel zugeordnet ist.

Als letztes fehlt nur noch der Bootup. Ich nutze dazu immer die interactive shell von node in einem screen-Terminal und lade die Skriptdatei:

~/mumbleSniff $ node -i
> .load ./index.js

Der Telegram-Bot sollte nun auf die Befehle /start, /stop und /list hören und in Mumble sollte ein neuer User sitzen. Ferner sollten Textnachrichten im Channel und über alle Bot-User weitergeleitet werden.

Known issues

Auch diese Software ist noch lange nicht perfekt. Ein prominentes Problem ist, dass der Bot regelmäßig aus Mumble rausfliegt, meistens nach einigen Tagen, und sich nicht wiederverbindet. Wenn das Skript dann neugestartet wird, sind alle Telegram-User weg. Glücklicherweise schreibt das Skript die angemeldeten Telegram-Nutzer in eine Datei (loggedInUsers.log) weg, sodass man die Verbindung im Zweifel wieder aufbauen kann:

var content = fs.readFileSync("loggedInUsers.log", "utf-8");
let u = content.split("\n");
u.forEach(function (i) {
	botUsers.push(i);
});

Dieses Snippet stammt leider noch aus einer Zeit, in der die /list-Funktion noch nicht gab. Aktive Telegram-Abonnenten werden erst aufgelistet, wenn sie in dem Objekt idToName zu finden sind und dafür müssen sie in dieser Instanz der App bereits mit dem Bot gesprochen haben. Ticket dazu ist erstellt.

Wer noch mehr Fehler findet, darf sie gerne im Github-Repo posten - oder noch lieber Verbesserungswünsche als Pull Request schreiben.

Avatar

Veröffentlicht am von Jannik

Technik open source mumble

19 | der blasse, dünne Junge aus der Nachbarschaft | Macht Web Design, Theatertechnik und Pfadfinder | Ist #Wö‑Leiter | Studiert was mit Medien