0

我有带有 Python 2.7 的 Ubuntu 12.10,并且正在使用 python-xmpp 库 (xmpppy) 我能够连接到我的 XMPP 服务器 (ejabberd) 并向用户发送即时消息,方法是使用名为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 客户端中按下键以回复聊天时才会发生错误。如果我想回复“你好!” 然后,只要我在 pigin 客户端上按 h,服务器上的 python 程序就会崩溃。我什至来不及发送消息。

另一个非常有趣的观点:如果我在我的 android 上使用 Xabber 聊天客户端,我可以使用此脚本进行两​​种方式的聊天。我只是不能用这个脚本和桌面 Pigin 客户端两种方式聊天......

4

1 回答 1

2

问题在于 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')
于 2014-05-02T14:16:08.237 回答