SleekXMPP Muc房间列表和发现

时间:2016-09-10 13:48:29

标签: python xmpp chatroom multiuserchat

我是XMPP的新手:)我一直在使用Ejabberd和sleekXMPP。 我的问题是如何在线房间与sleekXMPP一起列出?

谢谢

2 个答案:

答案 0 :(得分:2)

我也挣扎了一段时间。列表房间不是MUC的一部分( xep_0045 ),而是服务发现的一部分( xep_0030 )。

有些文档是here,但仍然需要一些实验才能找到'disco_items'数组键。请注意,如果你还加载 iterator ”参数才有效> XEP-0059

它的工作原理如下:

  1. 确保您已装入0030:

    xmpp.register_plugin('xep_0030')
    
  2. 使用它:(在我的情况下,这是扩展sleekxmpp.ClientXMPP的类的start()方法的一部分)

    result = self['xep_0030'].get_items(jid='conference.your.xmpp.server.com', iterator=True)
    
    for room in result['disco_items']:
        print "Found room %s, jid is %s" % (room, room['jid'])
    

答案 1 :(得分:2)

Akom的方法不错,但是我个人对迭代器参数有疑问。

有关服务发现实施的完整示例,请参见:

https://github.com/fritzy/SleekXMPP/blob/develop/examples/disco_browser.py

使用这些功能,您只需执行以下操作即可获取XMPP服务器的身份,信息和功能:

items = self['xep_0030'].get_items(jid='conference-server.com', node='', block=True)

然后:

for identity in info['disco_info']['identities']:
    print('  - %s' % str(identity))

for feature in info['disco_info']['features']:
    print('  - %s' % feature)

for item in items['disco_items']['items']:
    print('  - %s' % str(item))