0

Python 2.7 を搭載した Ubuntu 12.10 があり、python-xmpp ライブラリ (xmpppy) を使用しています。xsend.pyというサンプル スクリプトを使用して、XMPP サーバー (ejabberd) に接続し、IM をユーザーに送信できます。

テスト スクリプトxtalk.pyを使用しようとすると、xmpp に再度接続して認証し、メッセージを送信できます。このスクリプトを使用すると、メッセージの送信先から返信を受け取ることもできます。

プログラムを実行すると、次のようになります。

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 を実行してユーザーにメッセージを送信できますが、ユーザーが (ピギン クライアントを使用して) 応答の最初の文字を入力するとすぐに、python プログラムがそのトレースバックでクラッシュします。

基本的に、このスクリプトでメッセージを送信できますが、受信できません。ピギンクライアントでキーストロークを押してチャットに返信するまでエラーが発生しないため、ユーザーが入力していることをこのプログラムに通知するXMPPに関係があると思われます。「こんにちは!」と返信したい場合 次に、ピギン クライアントで h を押すとすぐに、サーバー上の python プログラムがクラッシュします。メッセージを送信することさえできません。

もう 1 つの非常に興味深い点: 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 に答える