0

所以这是我的问题,我有一个 Ejabberd 服务器正在运行,我尝试使用 xmpppy 实现我自己的 XMPP API,但目前我不知道为什么我在 MUC 上的 echo bot 不起作用。我已经在私人消息/离线队列上制作了一个回声机器人,它正在工作,但在这里它似乎连接但无法读取消息这里是 MUC Echo 机器人的代码:

def messageCB(self,conn,msg):
    print(msg.getType())
    if msg.getType() == "groupchat":
            print(str(msg.getFrom()) +": "+  str(msg.getBody()))
    if msg.getType() == "chat":
            print("private: " + str(msg.getFrom()) +  ":" +str(msg.getBody()))

def StepOn(self,conn):
    try:
        conn.Process(1)
    except KeyboardInterrupt:
            return 0
    return 1

def GoOn(self,conn):
    while self.StepOn(conn):
        pass


def receive_muc(self, muc_room):

    client=xmpp.protocol.JID(self.jid)

    cl = xmpp.Client(client.getDomain(), debug=[])

    cl.connect()

    cl.auth(client.getNode(),self.passw)


    cl.sendInitPresence()

    cl.RegisterHandler('message', self.messageCB)

    room = muc_room
    print("Joining " + room)

    cl.send(xmpp.Presence(to="%s %s" % (room, self.jid)))
    self.send_muc("I'm online !", room)

    self.GoOn(cl)

当我运行此消息时,消息发送没有任何问题,它正在等待新消息打印它,但即使我在机器人使用另一个 python 脚本运行时尝试发送消息,并且它似乎已连接时,也没有任何反应在终端中并且仍在运行,在 ejabberd 的 Web 界面上,这就是显示的Ejabberd 网页

所以在网页上似乎没有在 MUC 上连接 echo bot。

提前感谢您的帮助!

4

1 回答 1

0

好的,我找到了解决方案,只需在发送状态时添加用户名,如下所示:

cl.send(xmpp.Presence(to="%s %s" % (room + "/username", self.jid)))
于 2021-06-02T14:01:33.680 回答