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

时间:2010-08-20 05:20:43

标签: python xmpp xmpppy

我想知道这里是否有人可以在以下场景中提供一些代码示例。我对使用xmpppy这样做特别感兴趣,因为我已经在我的应用程序中使用该库,但其他库也可以。不幸的是,xmpppy项目网站上没有任何样本。浏览专家/高级API文档,我无法弄清楚如何操作,或者xmpppy不支持多用户聊天(MUC)?

  • 通过邀请特定用户(例如2或3)来创建MUC

  • 向现有MUC发送消息(假设您知道它是MUC JID句柄或昵称)

  • 查找XMPP服务器上的现有MUC,获取JID或昵称等。如果通过获取名单来完成,我们只想查找MUC,忽略用户。

我在这里找到了一个答案,但后来我可能不得不学习新的库API调用,并弄清楚如何进行上述方案,因为这个示例并未涵盖所有这些:

pyxmpp: quick tutorial for creating a muc client?

我真的希望做一个负载生成器,它可以向MUC提供消息并创建包含许多参与者的大型MUC。我已经有了将消息传递给用户收件人的部分。

2 个答案:

答案 0 :(得分:6)

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房间的问题,这将通过服务发现来完成。

答案 1 :(得分: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中查找所需的stranzas:

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