4

如何通过 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)

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

4

2 回答 2

1

你可能想看看这个文件:

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

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

cnx.sendInitPresence()

我猜你还没有发送你的初始状态......

于 2010-03-18T22:27:26.557 回答
1

注意:想向那些想要做这个线程中提到的事情的人提及这一点。如果不熟悉 XMPP 协议和节,可能会错过一些设置正确状态所需的信息。xmpppy 模块文档似乎没有明确阐明设置存在的步骤。

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

然而,当通过定义一个新的出席对象来发送状态来设置新的状态时,如果你用默认值(无参数)初始化对象,就像这里的原始帖子一样,要发送的出席对象(或节)是不完整的,因为它没有t 定义适当的存在“类型”。因此,根据您正在使用的 XMPP 服务器,它可能会或可能不会正确地进行设置。

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

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

或者只是以下,如果在“可用/在线”和“不可用/离线”之间切换而无需登录和关闭 XMPP IM 会话,我们不关心状态/显示状态显示的内容(即您的标签查看与状态相关的信息,例如“离线 - 离开”与“离线”)。

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

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

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

发送出席信息与原帖相同。

于 2010-08-25T08:10:24.137 回答