es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Recibir mensaje de cualquier usuario en Python ejabberd utilizando xmlrpc.client

Estoy usando ejabberd en Python y encontré un método para enviar mensajes, pero ¿cómo puedo obtener esos mensajes o recibirlos en mi consola de Python? Por favor, sugiéreme algún método o forma de hacer esto.

Para enviar el mensaje mi código es:

import xmlrpc.client as xmlrpclib

server_url = 'http://127.0.0.1:5180/xmlrpc/'
server = xmlrpclib.ServerProxy(server_url)

EJABBERD_XMLRPC_LOGIN = {'user':'yatish', 'server':'localhost', 'password':'1234', 'admin':False}

def ejabberdctl(command, data):
    fn = getattr(server, command)
    print(fn.__dict__)
    return fn(EJABBERD_XMLRPC_LOGIN, data)

result = ejabberdctl('send_message', {"type":"chat","from":"yatish@localhost","to":"1@localhost",
    "subject":"backend subject","body":"Hey this is message from python1"})

Aquí puedo enviar mensajes desde yatish@localhost al usuario 1@localhost. Quiero recibir todos los mensajes recibidos de 1@localhost. ¿Puedes sugerirme algún método? He revisado todos los documentos y buscado en Google, pero no he podido encontrar alguna forma de recibir todos esos mensajes en Python. Si se reciben los mensajes, el cliente debe estar conectado y recibir los mensajes en tiempo real.

Gracias.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para recibir mensajes, necesitas conectarte al servidor ejabberd utilizando el protocolo XMPP. Puedes usar la biblioteca xmpppy de Python para implementar el lado del cliente del protocolo XMPP.

    Aquí tienes un código de ejemplo que escucha los mensajes entrantes en la cuenta 1@localhost:

    import xmpp
    
    jid = xmpp.JID('1@localhost')
    password = 'contraseña'
    
    cliente = xmpp.Client(jid.getDomain(), debug=[])
    cliente.connect()
    
    if cliente.auth(jid.getNode(), password):
        cliente.sendInitPresence()
    
        def callback_mensaje(conexion, msg):
            if msg.getType() in ('chat', 'normal'):
                print("Mensaje recibido: %s" % msg.getBody())
    
        cliente.RegisterHandler('message', callback_mensaje)
        cliente.sendPresence()
    
    while True:
        cliente.Process(1)
    

    Este código autentica en el servidor ejabberd utilizando el nombre de usuario y la contraseña 1@localhost y escucha los mensajes entrantes utilizando el método RegisterHandler. Cuando se recibe un mensaje, se llama a la función callback_mensaje, que imprime el cuerpo del mensaje en la consola.

    Puedes ejecutar este código en una ventana de consola separada para recibir mensajes entrantes en tiempo real. Ten en cuenta que necesitarás tener instalada la biblioteca xmpppy para utilizar este código.

Comments are closed.