0

我正在用 Python 编写一个 XMPP 机器人(使用xmpppy)。我想(根据用户的请求)检查他的 PubSub 状态(心情、曲调)并用它做点什么。我怎么做?

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

4

1 回答 1

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>

当您收到这样的 disco#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 哈希正确是唯一困难的部分。

于 2010-01-04T08:43:41.423 回答