我使用Python 2.7的Ubuntu 12.10并使用python-xmpp库(xmpppy) 我可以使用名为xsend.py的示例脚本连接到我的XMPP服务器(ejabberd)并将IM发送给用户
当我尝试使用测试脚本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客户端中的按键才能回复聊天时才会出现错误。如果我想回复“你好!”然后,当我在pigin客户端上按h时,服务器上的python程序崩溃。我甚至没有发送消息。
另一个非常有趣的观点:如果我在我的android上使用Xabber聊天客户端,我可以使用此脚本进行双向聊天。我不能用这个脚本和桌面Pigin客户端双向聊天......
答案 0 :(得分:2)
问题在于xtalk.py中的这些行:
if type in ['message', 'chat', None] and fromjid == self.remotejid:
sys.stdout.write(event.getBody() + '\n')
它假定消息节总是包含<body>
标记(它包含消息的实际文本)。事实并非如此:例如,typing notifications是作为不包含(总是)包含正文的消息发送的。
您应该用以下内容替换这些行:
if type in ['message', 'chat', None] and fromjid == self.remotejid and event.getBody():
sys.stdout.write(event.getBody() + '\n')