拦截登录/注销ejabberd

Rob*_*tos 3 erlang ejabberd

我想知道用户何时登录并从自定义模块中的ejabberd会话中注销,而不更改ejabberd代码.

我需要这个,因为我必须在用户登录时执行一些操作并清理我在用户注销时执行的操作.此外,我需要能够在某些情况下注销用户.

那么,有没有办法扩展一些模块来获得这些功能?我还在寻找一些可以帮助我的文档.

Nun*_*tas 9

您可以编写自己的代码并构建一个插件,其中包含ejabberd为您提供的行为gen_mod.一个好的开始是这个博客/教程,并按照下一部分.这应该足够了,但你会在同一个博客上找到更多.

在你建立自己的模块后,我建议你看一下钩子set_presence_hookunset_presence_hook

请注意,每次设置状态时都会激活set_presence_hook,不仅在登录时,如果可以的话,您只需要在周围工作.

长话短说,你会得到类似下面的东西

-module(mod_your_mod).

-behavior(gen_mod).
-include("ejabberd.hrl").

-export([start/2, stop/1, on_set/4, on_unset/4]).

start(Host, _Opts) ->
   ejabberd_hooks:add(set_presence_hook, Host, ?MODULE, on_set, 50),
   ejabberd_hooks:add(unset_presence_hook, Host, ?MODULE, on_unset, 50),
   ok.

stop(Host) ->
   ejabberd_hooks:delete(set_presence_hook, Host, ?MODULE, on_set, 50),
   ejabberd_hooks:delete(unset_presence_hook, Host, ?MODULE, on_unset, 50),
   ok.

on_set(User, Server, _Resource, _Packet) ->
<presence code>    

on_unset(User, Server, _Resource, _Packet) ->
<offline code>
Run Code Online (Sandbox Code Playgroud)

希望这有帮助