2010-03-18 56 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

發送狀態與原始帖子中的狀態相同。