私はオフラインメッセージが受信された場合、この機能を起動するというコードにフックがあります。erlang、ejabberd、対処する方法
offline_msg_received(From, To, Packet) ->
パケットは、コードのように探しています
{message,<<"purple2d957668">>,chat,<<>>,undefined,{jid,<<"admin">>,<<"localhost">>,<<"5280">>,<<"admin">>,<<"localhost">>,<<"5280">>},[],[{text,<<>>,<<"Hello">>}],undefined,[{xmlel,<<"active">>,[{<<"xmlns">>,<<"http://jabber.org/protocol/chatstates">>}],[]}],#{}}
私はこのうちたかった何を私のメッセージを含む部分です。これは次のとおりです。
[{text,<<>>,<<"Hello">>}]
この部分は、パッケージ変数全体と一致するパターンで取得できます。しかし、私のメッセージと一致するパターンを試したとき、それは悪い議論をしています。
{text,<<>>,<<"Hello">>}
と変数を指定すると、そのパターンマッチングが可能であることがわかります。私の理解から、何かの周りにある[]を見ることは、それがリストまたは文字列であることを意味します。
私はここにいくつかのコードを示すことができます。今
{P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11} = Packet, %% P8 is the message I want.
?INFO_MSG("----------------------P8: ~p~n", P8), %% This shows {text,<<>>,<<"Hello">>}
{A, B, C} = P8, %% This gives me a badmatch error.
私が代わりにコードのシェルで手動でこれを実行した場合、:
{text,<<>>,<<"Hello">>} = P8,
{A, B, C} = P8,
その後のコードは動作し、C変数に< <「こんにちは」>>置きます。
私の推測では、 "Package"変数の中の[]は私のbadmatchエラーと関係がありますが、何らかの理由でそれらのシンボルが表示されません。誰も良い提案をなぜそれが動作しませんか?私はそれが隠された[]と関係があると推測しています。そうでなければ、私のシェルコードテストと同じに見えるからです。
ありがとうございました。これは初めての質問ですので、間違ったことはしないことを願っています。
'#message.body'からテキストを取得するには、' xmpp:get_text/1'や 'xmpp:get_text/2'関数を使うのが良いでしょう。後者は、言語でテキストを選択する必要がある場合に便利です。 別のポイントは、 'xmpp_codec.hrl'を直接インクルードするべきではないということです。代わりに 'xmpp.hrl'をインクルードしてください。 – user2610053