【问题标题】:How do I set a Jabber status with python-xmpp?如何使用 python-xmpp 设置 Jabber 状态?
【发布时间】:2011-01-29 05:33:12
【问题描述】:

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

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

【问题讨论】:

  • pres.getStatus() 返回什么?
  • 这似乎返回了 new_status 的内容,在本例中为“blah blah blah”。

标签: python chat xmpp status


【解决方案1】:

你可能想看看这个文件:

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

编辑: 我糟糕的第一个答案是断章取义,我误读了您的代码。

cnx.sendInitPresence()

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

【讨论】:

  • 我不是已经这样做了吗?我有 pres.setStatus(new_status) cnx.send(pres) 这似乎与该代码示例执行相同的操作。
  • 哼...这似乎也不起作用。现在我得到了这个:pastebin.com/hunGAJ84
  • 现在我想通了。代码是正确的,只是如果我已经从其他地方登录到该帐户,它就不起作用。谢谢。
【解决方案2】:

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

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

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

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

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

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

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

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

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

发送状态与原帖相同。

【讨论】:

    猜你喜欢
    • 2011-05-21
    • 1970-01-01
    • 2012-06-08
    • 1970-01-01
    • 1970-01-01
    • 2023-03-18
    • 2021-07-06
    • 2016-02-09
    • 1970-01-01
    相关资源
    最近更新 更多