humhub: Direktnachrichten senden (mail-send)

Die REST-API kann das Mail-Modul, das Skill bisher nicht — Direktnachrichten
mussten von Hand in der Weboberflaeche geschrieben werden.

Der Stolperstein ist die Empfaengeraufloesung: Profil-Slug und Benutzername
sind nicht dasselbe (zu /u/serge/ gehoert "Serge"), und get-by-username
unterscheidet Gross-/Kleinschreibung. resolve_user() nimmt deshalb ID,
Benutzername oder Profil-URL und faellt auf einen Durchlauf der Benutzerliste
zurueck, der beides case-insensitive vergleicht.

Kein Befehl zum Lesen von Konversationen: fremde Nachrichten gehoeren nicht
ungefragt in einen Modellkontext.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
jhsandClaude Opus 5 committed 2026-09-11 08:56:09 +02:00
1 parent 4a20da2ed2
commit e00395fc64
2 files changed
+81

No files matched your search

+19
View File
@@ -91,6 +91,25 @@ Beide nehmen wie `fetch` eine **Content-ID** oder Perma-URL (nicht die Post-/
Wiki-Seiten-ID) und lösen das Zielobjekt selbst auf — funktioniert für Posts
und Wiki-Seiten.
### Direktnachrichten
```bash
./humhub.py mail-send <empfaenger> "<betreff>" [datei|-]
./humhub.py mail-send https://humhub.inmedias.it/u/serge/ "Betreff" entwurf.md
./humhub.py mail-send jan.stobbe,26 "Betreff" -
```
Empfänger sind Benutzername, Profil-URL oder numerische ID; mehrere mit Komma.
**Slug ≠ Benutzername.** Zur Profil-URL `/u/serge/` gehört der Benutzername
`Serge`, und `get-by-username` unterscheidet Groß-/Kleinschreibung. Wer den
Slug einsetzt, bekommt sonst `User not found!`. `mail-send` fängt das ab: erst
`get-by-username`, dann ein Durchlauf der Benutzerliste, der Benutzername und
Slug ohne Rücksicht auf Groß-/Kleinschreibung vergleicht.
Zum Lesen von Konversationen gibt es bewusst keinen Befehl — Nachrichten
anderer gehören nicht ungefragt in einen Modellkontext.
Inhalte (Markdown) aus Datei oder `-` (stdin) übergeben — nicht als langes
Shell-Argument (Sonderzeichen). `container_id` akzeptiert eine numerische
Container-ID, einen **Space-Slug** oder eine **Space-URL** (`resolve_container`