如何使用Python和XMPP创建MUC并向现有MUC发送消息

7 投票
2 回答
6915 浏览
提问于 2025-04-16 03:03

我想知道这里有没有人能提供一些代码示例,针对以下几种情况。我特别想用xmpppy这个库来实现,因为我已经在我的应用中使用了这个库,不过其他库也可以。很遗憾,xmpppy项目的网站上没有相关的示例。在浏览了专家/高级API文档后,我还是没搞明白怎么做,或者说xmpppy不支持多用户聊天(MUC)?

  • 通过邀请特定用户(比如2或3个)来创建一个多用户聊天(MUC)

  • 向一个已经存在的多用户聊天发送消息(假设你知道它的MUC JID或昵称)

  • 在XMPP服务器上查找现有的多用户聊天,获取它们的JID或昵称等。如果是通过获取联系人列表来做,我们只想查找多用户聊天,忽略普通用户。

我在这里找到了一些答案,但我可能还得学习新的库API调用,弄清楚如何实现我上面提到的场景,因为这个示例并没有覆盖所有内容:

pyxmpp: 创建多用户聊天客户端的快速教程?

我真的想做一个负载生成器,向多用户聊天发送消息,并创建有很多参与者的大型多用户聊天。我已经做好了向用户发送消息的部分。

2 个回答

5

Xmpppy确实支持使用多用户聊天(MUC)服务,但支持的功能比较基础,如果你想管理多个聊天室,还需要写一些额外的代码。

要“加入”一个MUC聊天室,你需要向聊天室的JID发送你的在线状态。

conn.send(xmpp.Presence(to="%s/%s" % (room, nickname)))

然后,发送消息时,你需要使用“groupchat”这种消息类型,把消息发给聊天室的JID。

msg = xmpp.protocol.Message(body=text)
msg.setTo(room)
msg.setType('groupchat')
conn.send(msg)

至于你问的如何找到MUC聊天室,这个可以通过服务发现来实现。

5

虽然我对那里的具体MUC接口不太了解,但xmpppy支持自定义消息,所以它可以支持整个XMPP协议。

要加入聊天,你需要发送一个状态消息,代码是:conn.send(xmpp.Presence(to='{0}/{1}'.format(room, nick)))

要发送消息到聊天中:

    stranza = "<message to='{0}' type='groupchat'><body>{1}</body></message>".format(room, text)
    conn.send(stranza)

至于创建新聊天或在联系人列表中查找,我手头没有现成的代码,但写起来很简单,只需按照相同的方式查找所需的消息格式即可,具体可以参考XEP文档:

http://xmpp.org/extensions/xep-0045.html#createroom

http://xmpp.org/extensions/xep-0045.html#disco-rooms

http://xmpp.org/extensions/xep-0045.html#invite

撰写回答