XMPP und MUC

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Antworten
U32
User
Beiträge: 25
Registriert: Sonntag 6. Oktober 2019, 13:34

Hallo Kollegen,

Ich sitze nun schon seit über 2 Jahren an folgendem Problem - leider bisher ohne Erfolg:
Vielleicht ist ja seid meinem letzten Posting doch ein User hinzugekommen, der sich mit meinem speziellen Problem auskennt:
Ich möchte mit einem Python-Script eine Nachricht in einem XMPP Multi-User-Chat (MUC) Raum schicken.
Meine aktuelle Code-Version sieht wie folgt aus:
(Bitte nicht von den prints und Try-Exepts irritieren lassen, ich wollte sehen, wo das script "herläuft".)

Code: Alles auswählen

#!/usr/bin/python
# -*- coding: utf-8 -*-

# --------------- Bibliotheken importieren ---------------------------
import sys,time,xmpp

# ---------------- Variablen initialisieren ---------------------------
Server = 'jabber.de'
user = '<Absendername>@jabber.de'
pwd = '<Voll_das_geheime_Passwort>'
room = '<Name des Raumes>@conference.jabber.de'

Status = 'idle'

text = 'Du hast dooofe Ohren!'

# --------------- Verbindung aufbauen --------------------------------
conn = xmpp.Client(Server, port=5222, debug=[])
conn.connect()

if not conn:
    print ('connection failed')
    sys.exit(1)

# --------------- Anmeldung -------------------------------------------
jid = xmpp.protocol.JID(user)
print ('jid =' ,jid)

login = conn.auth(user=jid.getNode(), password=pwd, resource=jid.getResource())
print ('login = ' ,login)

if not login:
    print ('authentication failed')
    conn.disconnect()
    sys.exit(1)

	
# --------------- MUC beitreten und initialen Presence Status senden ----
InitPres = conn.sendInitPresence(requestRoster=1)
print ('InitPres = ', InitPres)

if not InitPres:
    print ('Sending initial presence failed.')
    try:
        pres = xmpp.Presence()
        CurrentStatus = pres.getStatus()
        time.sleep(1)
        print ('CurrentStatus =', CurrentStatus)
        pres.setStatus('busy')
        print(pres)
        conn.send(pres)
        
    except Exception as error:
        print (error)
        MsgErr = msg.getError()
        print (MsgErr)
        print ('Sending initial failed.')
        conn.disconnect()
        sys.exit(1)

# --------------- die eigentliche Nachricht senden -----------------------
msg = xmpp.protocol.Message(body=text)
msg.setTo(room)
msg.setType('groupchat')
msg.setID('1')

try:
	conn.send(msg)
	print ('Nachricht_2 = ',msg)
	time.sleep(2)
	conn.disconnect()
	sys.exit(1)

except Exception as error:
    print ('ConnExeptError =', error)
    MsgErr = msg.getError()
    print (MsgErr)
    print ('Nachricht nicht gesendet!')
    conn.disconnect()
    sys.exit(1)

Dieser Code liefert mir dann diesen Output:

Code: Alles auswählen

jid = <Absendername>@jabber.de
login =  sasl
InitPres =  None
Sending initial presence failed.
CurrentStatus = None
<presence xmlns="jabber:client"><status>busy</status></presence>
Nachricht_2 =  <message 
				to="<Name des Raumes>@conference.jabber.de" 
				type="groupchat" 
				id="1">
				<body>Du hast dooofe Ohren!</body>
			   </message>
Ich habe nun aus diversen Foreneinträgen gelernt, dass - wenn man eine Nachricht an einen MUC senden will - dieses erst "joinen" muss.
(Nicht zu verwechseln, mit dem senden der "initial presence" - was angeblich nicht erforderlich ist.)

Meine Frage(n) ist nun,
a.) Wie kann ich mittels Python einen MUC beitreten?
b.) Wie kann ich überprüfen, ob dies erfolgreich war.

Denn was bisher mit dem o.g. Code funktioniert ist, dass sich der Status des Accounts ändert, über den ich die Nachricht versenden möchte.
Bedeutet, ich kann auf meinem Handy sehen, dass dieser Account kurz online geht.
Nur der Text wird leider nicht gesendet. Und da ich auch keine Fehlermeldung bekomme, weiß ich verd... nochmal nicht warum.

Ich wäre also unendlich dankbar, wenn es jemand hier im Forum gäbe, der mir meine Frage(n) beantworten könnte.

Bis dahin schon mal vielen Dank für eure Zeit, beste Grüße und einen schönen Sonntag noch
U32
Antworten