如何使用Python的xmpp查询联系人的PubSub?
我正在用Python写一个XMPP机器人(使用xmpppy这个库)。我想在用户请求后,检查他的PubSub状态(比如心情、音乐)并对这些信息做点什么。请问我该怎么做呢?
我知道如何解析用户在改变状态时发送的消息,但我不知道怎么让用户主动给我发送这样的消息。
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 哈希值是正确的,这一点是唯一比较复杂的部分。