Как мне установить статус Jabber с помощью python-xmpp? - PullRequest
4 голосов
/ 19 марта 2010

Как установить статус GChat или Jabber через python?Прямо сейчас у меня есть это:

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)

Это выполняется, но статус не обновляется.Я знаю, что успешно подключаюсь к серверу, так как могу отправлять сообщения чата другим.Что я тут не так делаю?

Ответы [ 2 ]

1 голос
/ 25 августа 2010

ПРИМЕЧАНИЕ: хотел бы упомянуть об этом тем, кто хочет делать то, что упоминается в этой теме. Если человек не знаком с протоколом XMPP и строфами, он может пропустить некоторую необходимую информацию, чтобы установить надлежащий статус. Документы модуля xmpppy, по-видимому, явно не поясняют шаги для установки присутствия.

Установка начального присутствия является самой легкой, как показано в предыдущих сообщениях в этой теме. Он устанавливает присутствие (тип) пользователя по умолчанию. Не уверен, что по умолчанию "status" и "show" состояния, предположим, пустым или "available".

Однако при установке нового статуса путем определения нового объекта присутствия для отправки статуса, если вы инициализируете объект значениями по умолчанию (без аргументов), как в исходном сообщении, отправляемый объект присутствия (или раздел) будет неполным, поскольку это не определяет правильное присутствие "тип". Поэтому в зависимости от того, с каким XMPP-сервером вы работаете, он может или не может правильно принять настройку.

Правильный способ инициализации нового объекта состояния присутствия будет выглядеть так:

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

или просто просто следующее, если переключаться между «доступно / онлайн» и «недоступно / автономно» без входа в систему и отключения сеанса XMPP IM, где нам все равно, что показывается для статуса / состояния показа (т.е. метка, которую вы видите связанной со статусом, например, «Offline - away» против «offline»).

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

Для пользовательских состояний, таких как DND, Away, Out to Lunch и т. Д., Это немного сложнее. Я сам не очень знаком с XMPP, но предполагаю, что вы указали бы статус и показывали бы значение состояния как таковое (например, DND, Away), устанавливая тип присутствия как «доступный» или «недоступный», в зависимости от того, хотите ли вы отображаться таким образом или нет.

А на основе документов xmpppy вы можете указать только тип присутствия при инициализации объекта, но не можете изменить его впоследствии. Но вы можете изменить статус и показать состояния для объекта присутствия после инициализации. Это сделано, как показано в оригинальном сообщении здесь. Для показа состояния существует соответствующий setShow метод, такой же как setStatus .

Отправка присутствия такая же, как в оригинальном сообщении.

1 голос
/ 19 марта 2010

Возможно, вы захотите взглянуть на этот файл:

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

Edit: Мой плохой, первый ответ был вне контекста, я неправильно прочитал ваш код.

cnx.sendInitPresence()

Вы не отправили свое начальное состояние, я думаю ...

...