2010-03-18 12 views
5

Come si imposta uno stato GChat o jabber tramite python? In questo momento ho questo:Come si imposta uno stato Jabber con 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) 

Viene eseguito, ma lo stato non viene aggiornato. So che mi sto connettendo al server con successo, in quanto posso inviare messaggi di chat ad altri. Cosa sto facendo di sbagliato qui?

+0

Cosa restituisce pres.getStatus()? – Xavier

+0

Sembra che restituisca il contenuto di new_status, in questo caso "blah blah blah". – snostorm

risposta

1

Si potrebbe voler dare un'occhiata a questo file:

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

Edit: Il mio male, prima risposta è stata fuori contesto, ho letto male il codice.

cnx.sendInitPresence() 

Non hai inviare il vostro stato iniziale immagino ...

+0

Non lo sto già facendo?Ho pres.setStatus (new_status) cnx.send (pres) che sembrerebbe fare la stessa cosa di quell'esempio di codice. – snostorm

+0

Mio male, ho letto male la prima volta. Vedi modifica – Xavier

+0

Hum ... anche quello non sembra funzionare. Ora ho questo: http://pastebin.com/hunGAJ84 – snostorm

1

NOTA: voleva parlare di questo per coloro che vogliono fare ciò che è menzionato in questo thread. Se non si ha familiarità con il protocollo e le stanze XMPP, si potrebbero perdere alcune informazioni necessarie per impostare lo stato corretto. I documenti del modulo xmpppy non sembrano esplicitare esplicitamente i passaggi per impostare la presenza.

L'impostazione della presenza iniziale è più semplice, come mostrato nei post precedenti in questa discussione. Imposta una presenza (tipo) predefinita di utente disponibile. Non sono sicuro quali siano gli stati di "stato" e "show" di default, si presuma in bianco o "disponibile" anche.

Tuttavia, quando si imposta un nuovo stato definendo un nuovo oggetto presenza per inviare lo stato, se si inizializza l'oggetto con valori predefiniti (senza argomenti) come nel post originale qui, l'oggetto presenza (o stanza) da inviare è incompleto perché non definisce una presenza corretta "tipo". Quindi, a seconda del server XMPP con cui si sta lavorando, potrebbe o meno prendere le impostazioni correttamente.

Il modo corretto per inizializzare nuovo oggetto stato di presenza sarebbe come questo:

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

o semplicemente quanto segue, se commutazione tra "disponibile on-line /" e "non disponibile/offline" w/o accedendo e fuori dalla sessione di IM XMPP, dove non ci interessa cosa viene mostrato per stato/stato dello stato (cioè l'etichetta che vedi associata allo stato, come "Offline - away" vs solo "offline").

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

Per lo stato personalizzato come DND, Away, Out to Lunch, ecc., Diventa un po 'più complicato. Non ho molta familiarità con XMPP, ma presumo che tu specifichi lo stato e mostri il valore dello stato come tale (ad esempio DND, Away) mentre imposti il ​​tipo di presenza come "disponibile" o "non disponibile" a seconda che tu voglia apparire in questo modo o non.

E in base ai documenti xmpppy, è possibile specificare solo il tipo di presenza all'inizializzazione dell'oggetto, non è possibile modificarlo in seguito. Ma è possibile modificare lo stato e mostrare gli stati per l'oggetto presenza dopo l'inizializzazione. Questo è fatto come mostrato nel post originale qui. Per lo stato di visualizzazione, è disponibile un metodo setShow corrispondente allo setStatus.

L'invio della presenza è uguale a quello del post originale.