Worum es geht
Ein selbst gehosteter Bot für Matrix, das offene Protokoll für dezentrale Kommunikation. Das Ziel ist ein kleiner, zuverlässiger Assistent, der in einem Raum lebt, auf Befehle reagiert und sich erweitern lässt, ohne gegen das Framework zu kämpfen.
Warum bauen
Matrix ist offen, föderiert und Ende-zu-Ende-verschlüsselt — der ideale Ort, um eigene Automatisierung laufen zu lassen, ohne die Gespräche einem Dritten zu überlassen. Die meisten bestehenden Bots sind entweder überladen oder verwaist, also ist das ein guter Anlass, das Protokoll richtig zu lernen und die beweglichen Teile minimal zu halten.
Die Entstehung
Die Wahl des Stacks
Der Bot ist in Python auf Basis von matrix-nio geschrieben, der asynchronen Client-Bibliothek.
Er läuft als langlebiger Prozess, der sich mit dem Homeserver synchronisiert und auf Ereignisse
reagiert.
Erste Nachricht
Der kleinste sinnvolle Meilenstein: einloggen, einem Raum beitreten und alles zurückgeben, was mit einem Befehls-Präfix beginnt.
async def on_message(room, event):
if event.body.startswith("!ping"):
await client.room_send(
room.room_id,
message_type="m.room.message",
content={"msgtype": "m.text", "body": "pong"},
)
Verschlüsselung
Matrix-Räume sind oft Ende-zu-Ende-verschlüsselt, das heißt der Bot muss Geräteschlüssel verwalten und Sitzungen verifizieren. Das war der kniffligste Teil — den Speicher so persistent zu machen, dass die Schlüssel einen Neustart überleben und der Bot Nachrichten weiter lesen kann.
Deployment
Der Bot läuft als systemd-Dienst auf einem kleinen VPS, startet bei Fehlern neu und hält
seinen Verschlüsselungsspeicher auf einem persistenten Volume.
Was als Nächstes kommt
- Ein Plugin-System, damit Befehle ergänzt werden können, ohne den Kern anzufassen
- Rate-Limiting und eine Allowlist für privilegierte Befehle
- Besseres Logging und ein Health-Check-Endpunkt
Du verfolgst das Projekt oder möchtest ein Feature vorschlagen? Nimm Kontakt auf.