1
我遇到的问题是我定义的钩子没有在事件“user_send_packet”上被调用。我确实假设正在发送的任何节(包括消息)都会触发此事件。钩子没有在ejabberd中调用
我已经考虑到如何通过将钩子设置为'0'来调用钩子的优先级。在日志中,我已验证模块已启动(“mod_stanza_ack starting”)。 erl文件没有编译,它只收到警告“gen_mod”是未定义的,但我已经阅读了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.
你说得对。经验教训,系统并不总是正确的。更改为“主机”确实触发了这个傻瓜,这也适用于“on_user_receive”。 同时,作为一种解决方法,我使用事件/钩子“filter_packet”,它将其设置为全局触发。在这种情况下,我将不得不检查信息包是由某人发送还是接收。 – 2013-04-12 10:17:39