sleekXMPP:获取XMPP服务器上的用户列表

时间:2016-05-20 11:19:35

标签: xmpp

我是python&的新手sleekxmpp脚本,想知道如何使用python(主要是下面节中的节点)传递这个iq节(XEP-0133:服务管理 - 获取在线用户):

http://xmpp.org/extensions/xep-0133.html#get-online-users-list

<iq from='bard@shakespeare.lit/globe'
    id='get-online-users-list-1'
    to='shakespeare.lit'
    type='set'
    xml:lang='en'>
  <command xmlns='http://jabber.org/protocol/commands' 
           action='execute'
           node='http://jabber.org/protocol/admin#get-online-users-list'/>
</iq>

我尝试了什么:

iq = self .make_iq_get(queryxmlns='http://jabber.org/protocol/commands', ito=self.domain, ifrom=self.jid, iq='')
response = iq.send()
print ('response = %s' % response)

在python中运行上面的代码总是导致IqError。

任何人都可以解释如何将上述iq节的xmlns,动作和节点信息传递给make_iq_get吗?

请帮助!!

1 个答案:

答案 0 :(得分:0)

以下代码解决了我上面的问题:

第一行代码返回一个要填​​充的表单,第二行返回在最后一行代码中使用的会话ID
    iq = self['xep_0050'}.send_command(domain, "http://jabber.org/protocol/admin#get-online-users-list")
sessionid = iq['command']['sessionid'] 

form = self.xmpp.plugin['xep_0004'].make_form(ftype='submit')
    field = form.add_field(
            ftype='hidden',
            type='hidden',
            var='FORM_TYPE',
            value=ADMIN)
    field['type'] = 'hidden'
    form.add_field(var='max_items', value='100')

print self['xep_0050'}.send_command(domain, "http://jabber.org/protocol/admin#get-online-users-list", sessionid=sessionid, payload=form)