Zum Inhalt

Python

Es gibt einige Python-Module, mit denen man Jabber/XMPP-Nachrichten direkt (1, 2) versenden kann, oder gar einen Bot programmieren, der auf XMPP-Nachrichten reagiert. Soweit ich sehen kann, ist es aber damit nicht möglich, OMEMO-verschlüsselte Nachrichten zu verschicken.

Deswegen ist hier dieser Workaround beschrieben, der Gajim benutzt, um eine XMPP-Nachricht OMEMO-verschlüsselt zu versenden. Um sie zu empfangen, kann man auf PCs Gajim oder auf Handys Conversations oder ChatSecure verwenden.

Gajim installieren und vorbereiten

Nach der Installation und dem Einrichten eines Kontos (möglichst auf einem guten Server wie z.B. jabber.de, dismail.de, jabber.ccc.de, thrashserver.net, wiuwiu.de, mailbox.org) muss man die Steuerung von Gajim via Terminal freigeben1:

Einstellungen/Erweitert/Erweiterter Konfigurationseditor/Öffnen

nach remote_control suchen und den Wert auf Aktiviert setzen.

Jetzt Gajim neu starten.

Gajim starten

Das Sende funktioniert nur, wenn Gajim gestartet ist.

Hat man mehrer Empfänger und es funktioniert nicht, soll man das Chat-Fenster des Empfängers öffnen.

Mittels gajim-remoteout eine Nachricht versenden

Der Terminal-Befehl, um eine Nachricht mit Gajim zu versenden, sieht so aus:

1
gajim-remote send_chat_message emfaenger@server.de 'Hallo'

Im Python-Code kann das z.B. so aussehen:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#!/usr/bin/env python3
# -*- coding: utf-8 -*-

import RPi.GPIO as GPIO
from time import sleep
from subprocess import call

try:
    while True:

        def sende_xmpp_nachricht(text):
            befehl_fuer_gajim = "gajim-remote send_chat_message empfaenger@server.de '" + text + "'"
            call(befehl_fuer_gajim, shell=True)

        nachricht_nr = 1
        while True:
            print('Senden der Nachricht Nr. ' + str(nachricht_nr) + '...')
            sende_xmpp_nachricht('Hallo ' + str(nachricht_nr))
            print('Versenden beendet.)
            sleep(10)
            nachricht_nr += 1

except KeyboardInterrupt:
    GPIO.cleanup()