来自xtalk.py的Python-XMPP回溯

时间:2014-05-02 13:36:08

标签: python ubuntu xmpp xmpppy

我使用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客户端双向聊天......

1 个答案:

答案 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')