2010-03-18 17 views
5

如何通过python设置GChat或jabber状态?现在我得到了这个:如何使用python-xmpp设置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) 

它执行,但状态不更新。我知道我已成功连接到服务器,因为我可以将聊天消息发送给其他人。我在这里做错了什么?

+0

pres.getStatus()返回什么? – Xavier 2010-03-18 22:10:40

+0

这似乎返回new_status的内容,在这种情况下,“等等等等等等”。 – snostorm 2010-03-18 22:18:44

回答

1

你可能想看看这个文件:

http://steliosm.net/projects/picaxejabber/picaxe_xmpp.py

编辑: 我不好,第一个答案是断章取义,我误解你的代码。

cnx.sendInitPresence() 

你还没有把你的初始状态,我猜...

+0

我不是已经这样做了吗?我有 pres.setStatus(new_status) cnx.send(pres) 这似乎与该代码示例做同样的事情。 – snostorm 2010-03-18 22:36:33

+0

我的不好,我第一次误读了。见编辑 – Xavier 2010-03-18 22:37:34

+0

嗡嗡声...似乎也没有工作。现在我已经得到了这个:http://pastebin.com/hunGAJ84 – snostorm 2010-03-18 23:20:31

1

注:想提一提这个,谁想要做什么,在这个线程提及。如果您不熟悉XMPP协议和节,可能会错过一些需要的信息来设置正确的状态。 xmpppy模块文档似乎没有明确说明设置存在的步骤。

设置初始状态是最简单的,如此线程中以前的帖子所示。它设置用户可用的默认存在(类型)。不确定默认的“状态”和“显示”状态是什么,假设为空白或“可用”。

但是,当通过定义一个新的状态对象来设置新的状态以发送状态时,如果您在此处初始化默认值(无参数)的对象,则要发送的状态对象(或节)不完整因为它没有定义合适的存在“类型”。因此,根据您使用的XMPP服务器,它可能会或可能不会正确地进行设置。

的正确方法来初始化新的存在状态的对象会是这样的:

offPres = xmpp.Presence(typ='unavailable',show='unavailable',status='unavailable') 

或只是简单地下面,如果“可用/在线”和“不可用/离线”之间切换W/O登录并关闭XMPP IM会话,我们不关心显示状态/显示状态(即您看到的与状态关联的标签,如“离线 - 离开”与“离线”)。

offPres = xmpp.Presence(typ='unavailable') 

对于像DND自定义状态,离开,外出就餐等,这变得有点棘手。我自己并不十分熟悉XMPP,但假设您将状态指定为状态并显示状态值(例如DND,Away),同时将呈现类型设置为“可用”或“不可用”,具体取决于您希望以这种方式出现还是不。

并且基于xmpppy文档,您只能在对象初始化时指定存在类型,之后不能更改它。但是您可以在初始化后更改状态并显示状态对象的状态。这是完成的原始帖子在这里显示。对于显示状态,有一个匹配的setShow方法就像setStatus

发送状态与原始帖子中的状态相同。