如何使用Python的xmpp查询其PubSub的联系人?

时间:2009-12-31 17:00:06

标签: python xmpp bots

我正在用Python写一个XMPP机器人(使用xmpppy)。我想(在用户的请求之后)检查他的PubSub状态(情绪,调整)并用它做一些事情。我该怎么做?

我知道如何解析用户在更改状态时发送的节,但我不知道如何强迫他向我发送这样的节。

1 个答案:

答案 0 :(得分:3)

阅读XEP-163。基本上,您需要实现实体上限(XEP-115)的发送方,以便您像这样发送您的存在:

<presence from='romeo@example.net/home'>
  <c xmlns='http://jabber.org/protocol/caps' 
     hash='sha-1'
     node='http://example.com/MYBOT'
     ver='/FpawanrJ31ymsv4ApCMGcyJmUk='/>
</presence>

当您收到像这样的迪斯科#info请求时:

<iq to='romeo@example.net/home'
    id='disco1'
    from='example.net' 
    type='get'>
  <query xmlns='http://jabber.org/protocol/disco#info'
         node='http://example.com/MYBOT#/FpawanrJ31ymsv4ApCMGcyJmUk='/>
</iq>

您回复了您实施的功能列表:

<iq from='romeo@example.net/home'
    id='disco1'
    to='example.net' 
    type='result'>
  <query xmlns='http://jabber.org/protocol/disco#info'
         node='http://example.com/MYBOT#/FpawanrJ31ymsv4ApCMGcyJmUk='>
    <identity category='client' type='bot' name='MYBOT'/>
    <feature var='http://jabber.org/protocol/mood+notify'/>
    <feature var='http://jabber.org/protocol/tune+notify'/>
  </query>
</iq>

向要隐式订阅的每个节点名称添加+ notify,并将结果字符串添加为功能,如上所述。确保出站状态中的SHA-1哈希是正确的是唯一困难的部分。