Трассировка Python-XMPP из xtalk.py
У меня Ubuntu 12.10 с Python 2.7, и я использую библиотеку python-xmpp (xmpppy). Я могу подключиться к своему XMPP-серверу (ejabberd) и отправить IM пользователю, используя скрипт-пример xsend.py.
Когда я пытаюсь использовать тестовый скрипт xtalk.py, я снова могу подключиться к xmpp, auth и отправить сообщение. Этот скрипт также должен позволить мне получить ответ от человека, которому я отправляю сообщения.
Когда я запускаю программу, это происходит:
root@domU:/home/ubuntu# python xtalk.py user@xmpp.mydomain.com
An error occurred while looking up _xmpp-client._tcp.xmpp.mydomain.com
connected with tls
authenticated using sasl
I am sending this message from xtalk.py to user@xmpp.mydomain.com
My message was recieved, and I'm sending another one now
That was recieved to. Now I'm going to reply to myself.
Traceback (most recent call last):
File "xtalk.py", line 77, in <module>
cl.Process(1)
File "/usr/lib/python2.7/dist-packages/xmpp/dispatcher.py", line 303, in dispatch
handler['func'](session,stanza)
File "xtalk.py", line 18, in xmpp_message
sys.stdout.write(event.getBody() + '\n')
TypeError: unsupported operand type(s) for +: 'NoneType' and 'str'
Я не уверен, с чего начать устранение неполадок. Кто-нибудь может дать мне совет?
Конкретно, что происходит, я могу запустить xtalk.py и отправлять сообщения пользователям, но как только пользователь вводит первую букву ответа (используя pigin-клиент), программа python аварийно завершает эту трассировку.
По сути, я могу отправлять сообщения с помощью этого сценария, но не могу получить их обратно. Я думаю, что причина может заключаться в том, что XMPP сообщает этой программе, что пользователь печатает, потому что ошибка не происходит, пока я не нажму клавишу в клиенте pigin, чтобы ответить в чате. Если я хочу ответить "Привет!" затем, как только я нажимаю h на клиенте pigin, программа python на сервере вылетает. Я даже не могу отправить сообщение.
Еще один ОЧЕНЬ интересный момент: я могу использовать двусторонний чат, используя этот скрипт, если я использую клиент чата Xabber на моем Android. Я просто не могу двусторонний чат с этим скриптом и настольным клиентом Pigin...
1 ответ
Проблема с этими строками в xtalk.py:
if type in ['message', 'chat', None] and fromjid == self.remotejid:
sys.stdout.write(event.getBody() + '\n')
Предполагается, что разделы сообщения всегда содержат <body>
тег (который содержит фактический текст сообщения). Это не так: например, уведомления о печати отправляются как сообщения, которые (не всегда) содержат тело.
Вы должны заменить эти строки чем-то вроде:
if type in ['message', 'chat', None] and fromjid == self.remotejid and event.getBody():
sys.stdout.write(event.getBody() + '\n')