私が抱えている問題は、定義したフックがイベント「user_send_packet」で呼び出されていないことです。私は、送信されている任意のスタンザ (メッセージを含む) がこのイベントをトリガーすると想定していました。
フックを「0」に設定することで、フックの呼び出し方法の優先度を考慮しました。ログで、モジュールが開始されていることを確認しました (「mod_stanza_ack starting」)。erl ファイルはコンパイルされましたが、"gen_mod" is undefined という警告だけが表示されましたが、ejabberd メーリング リストで、これは無害であり、変数 "Host" が 12 行目で使用されていないことも確認しました。それと一緒ですが、これが事実かどうかはわかりません。
-module(mod_stanza_ack).
-behaviour(gen_mod).
-include("ejabberd.hrl").
-export([start/2,
stop/1]).
-export([on_user_send_packet/3]).
start(Host, _Opts) ->
?INFO_MSG("mod_stanza_ack starting", []),
ejabberd_hooks:add(user_send_packet, global, ?MODULE, on_user_send_packet, 0),
ok.
stop(Host) ->
?INFO_MSG("mod_stanza_ack stopping", []),
ejabberd_hooks:delete(user_send_packet, global, ?MODULE, on_user_send_packet, 0),
ok.
on_user_send_packet(From, To, Packet) ->
?INFO_MSG("mod_stanza_ack a package has been sent coming from: ~p", [From]),
?INFO_MSG("mod_stanza_ack a package has been sent to: ~p", [To]),
?INFO_MSG("mod_stanza_ack a package has been sent with the following packet: ~p", [Packet]),
Packet.