2010-03-18 28 views
5

Làm cách nào để đặt trạng thái GChat hoặc jabber qua python? Ngay bây giờ tôi đã có điều này:Làm cách nào để đặt trạng thái Jabber bằng python-xmpp?

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) 

Thực thi, nhưng trạng thái không được cập nhật. Tôi biết tôi đang kết nối với máy chủ thành công, vì tôi có thể gửi tin nhắn trò chuyện cho người khác. Tôi làm gì sai ở đây?

+0

Điều gì pres.getStatus() trả về? – Xavier

+0

Điều đó dường như trả lại nội dung của new_status, trong trường hợp này là "blah blah blah". – snostorm

Trả lời

1

Bạn có thể muốn xem xét tập tin này:

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

Edit: xấu, câu trả lời đầu tiên của tôi đã được ra khỏi bối cảnh, tôi đã hiểu sai mã của bạn.

cnx.sendInitPresence() 

Bạn chưa gửi trạng thái ban đầu của bạn tôi đoán ...

+0

Tôi đã làm điều đó chưa?Tôi có pres.setStatus (new_status) cnx.send (pres) có vẻ giống như mẫu mã đó. – snostorm

+0

Tệ của tôi, tôi đã đọc sai lần đầu tiên. Xem chỉnh sửa – Xavier

+0

Hum ... điều đó dường như không hoạt động. Bây giờ tôi đã có điều này: http://pastebin.com/hunGAJ84 – snostorm

1

LƯU Ý: muốn đề cập này cho những ai muốn làm dung được đề cập trong chủ đề này. Nếu một người không quen thuộc với giao thức XMPP và stanzas, người ta có thể bỏ lỡ một số thông tin cần thiết để thiết lập trạng thái thích hợp. Các tài liệu mô-đun xmpppy dường như không làm rõ các bước để thiết lập sự hiện diện.

Đặt sự hiện diện ban đầu là dễ nhất, như được hiển thị trong các bài đăng trước trong chuỗi này. Nó đặt một sự hiện diện mặc định (loại) của người dùng đang có sẵn. Không chắc chắn trạng thái "trạng thái" và "hiển thị" mặc định là gì, giả sử trống hoặc "khả dụng".

Tuy nhiên, khi thiết lập trạng thái mới bằng cách xác định đối tượng hiện diện mới để gửi trạng thái, nếu bạn khởi tạo đối tượng mặc định (không có đối số) như trong bài gốc ở đây, đối tượng hiện diện (hoặc stanza) được gửi chưa hoàn thành bởi vì nó không xác định sự hiện diện thích hợp "loại". Vì vậy, tùy thuộc vào máy chủ XMPP bạn đang làm việc với nó có thể hoặc có thể không có các thiết lập một cách chính xác.

Cách thích hợp để khởi tạo đối tượng tình trạng hiện diện mới sẽ là như thế này:

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

hoặc đơn giản chỉ là những điều sau đây, nếu chuyển đổi qua lại giữa "sẵn/học qua mạng" và "không có sẵn/ẩn" w/o đăng trên và tắt phiên IM XMPP, nơi chúng tôi không quan tâm những gì được hiển thị cho trạng thái trạng thái/hiển thị (tức là nhãn bạn thấy được liên kết với trạng thái, như "Ngoại tuyến - đi" và chỉ "ngoại tuyến").

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

Đối với trạng thái tùy chỉnh như DND, Away, Out to Lunch, v.v. Tôi không thực sự quen thuộc với XMPP nhưng giả sử bạn sẽ chỉ định trạng thái và hiển thị giá trị trạng thái như (DND, Away) trong khi thiết lập loại hiện diện là "khả dụng" hoặc "không khả dụng" tùy thuộc vào việc bạn muốn xuất hiện theo cách đó hay không phải.

Và dựa trên tài liệu xmpppy, bạn chỉ có thể chỉ định loại hiện diện khi khởi tạo đối tượng, không thể thay đổi sau đó. Nhưng bạn có thể thay đổi trạng thái và hiển thị trạng thái cho đối tượng hiện diện sau khi khởi tạo. Điều đó được thực hiện như được hiển thị trong bài gốc ở đây. Đối với trạng thái hiển thị, có phương thức thiết lập phù hợp giống như setStatus.

Gửi sự hiện diện giống như trong bài đăng gốc.

Các vấn đề liên quan