如何用python-xmpp设置Jabber状态?
我想知道怎么用Python设置GChat或者Jabber的状态。目前我写了这个:
import xmpp
new_status = "blah blah blah"
login = 'email'
pwd = 'password'
cnx = xmpp.Client('gmail.com')
cnx.connect( server=('talk.google.com',5223) )
cnx.auth(login, pwd, 'botty')
pres = xmpp.Presence()
pres.setStatus(new_status)
cnx.send(pres)
这个代码能运行,但我的状态没有更新。我知道我已经成功连接到服务器,因为我可以给别人发送聊天消息。那我到底哪里出错了呢?
2 个回答
注意:想要了解这个讨论内容的人需要注意,如果你对XMPP协议和信息片段不太熟悉,可能会错过一些设置正确状态所需的信息。xmpppy模块的文档似乎没有明确说明如何设置状态。
设置初始状态是最简单的,就像这个讨论中之前的帖子所示。它会将用户的默认状态设置为“可用”。不太确定默认的“状态”和“显示”状态是什么,假设是空白或者“可用”也可以。
但是,当你通过定义一个新的状态对象来设置新的状态时,如果你像这里的原始帖子那样用默认值(没有参数)来初始化这个对象,那么要发送的状态对象(或信息片段)就不完整,因为它没有定义一个合适的状态“类型”。所以根据你使用的XMPP服务器,可能会正确设置,也可能不会。
正确初始化新的状态对象的方法应该是这样的:
offPres = xmpp.Presence(typ='unavailable',show='unavailable',status='unavailable')
或者如果你只是想在“可用/在线”和“不可用/离线”之间切换,而不需要登录和注销XMPP即时消息会话,那么可以简单使用以下代码,这样我们就不在乎状态/显示状态是什么(也就是说,你看到的与状态相关的标签,比如“离线 - 离开”与“离线”)。
offPres = xmpp.Presence(typ='unavailable')
对于像“请勿打扰”、“离开”、“午餐时间”等自定义状态,这就有点复杂了。我自己对XMPP不太熟悉,但我假设你需要在设置状态时指定状态和显示状态的值(例如“请勿打扰”、“离开”),同时根据你是否想让自己看起来是那样来设置状态类型为“可用”或“不可用”。
根据xmpppy的文档,你只能在对象初始化时指定状态类型,之后不能更改。但你可以在初始化后更改状态和显示状态。这个过程在这里的原始帖子中有说明。对于显示状态,有一个与setShow方法相匹配的方法,就像setStatus一样。
发送状态的方式与原始帖子中相同。
你可能想看看这个文件:
http://steliosm.net/projects/picaxejabber/picaxe_xmpp.py
补充:我之前的回答有点跑题了,我误解了你的代码。
cnx.sendInitPresence()
我想你没有发送你的初始状态吧……