我正在用 Python 编写一个 XMPP 机器人(使用xmpppy)。我想(根据用户的请求)检查他的 PubSub 状态(心情、曲调)并用它做点什么。我怎么做?
我知道如何在用户更改状态时解析用户发送的节,但我不知道如何强迫他向我发送这样的节。
阅读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 哈希正确是唯一困难的部分。