Module 如何在Ejabberd中的自定义模块中加载模块?

Module 如何在Ejabberd中的自定义模块中加载模块?,module,erlang,ejabberd,Module,Erlang,Ejabberd,我正在创建一个自定义模块,它使用从mod\u shared\u花名册模块导出的一些函数。这是代码 -模块(模块共享花名册额外)。 -作者('https://github.com/eric-mendoza'). -行为(gen_mod)。 -包括(“logger.hrl”)。 -包括(“translate.hrl”)。 -导出([开始/2、停止/1、重新加载/3、修改选项/1、, 获取命令(规范/0,依赖/2,修改文档/0])。 %命令API -出口([ %共享名册 srg\U显示组添加/4、s

我正在创建一个自定义模块,它使用从mod\u shared\u花名册模块导出的一些函数。这是代码


-模块(模块共享花名册额外)。
-作者('https://github.com/eric-mendoza').
-行为(gen_mod)。
-包括(“logger.hrl”)。
-包括(“translate.hrl”)。
-导出([开始/2、停止/1、重新加载/3、修改选项/1、,
获取命令(规范/0,依赖/2,修改文档/0])。
%命令API
-出口([
%共享名册
srg\U显示组添加/4、srg\U显示组删除/4、srg\U设置选项/4
]).
-包括(“ejabberd_commands.hrl”)。
-包括(“mod_花名册.hrl”)。
-包括(“mod_privacy.hrl”)。
-包括(“ejabberd_sm.hrl”)。
-include_lib(“xmpp/include/xmpp.hrl”)。
-包括(“mod_shared_花名册.hrl”)。
%%%
%%%通用国防部
%%%
开始(\u主机,\u选择)->
ejabberd_命令:注册_命令(get_commands_spec())。
停止(主机)->
案例gen_mod:是否加载了其他位置(主机、模块)
错误->
ejabberd_命令:取消注册_命令(get_commands_spec());
正确->
好啊
结束。
重新加载(\u主机、\u新选项、\u旧选项)->
好啊
取决于(\u主机,\u选择)->
[{mod_共享花名册,硬}]。
%%%
%%%寄存器命令
%%%
获取命令\u spec()->
[
#ejabberd_命令{name=srg_display_group_add,tags=[shared_花名册_group],
desc=“将组id添加到共享花名册组显示列表”,
模块=?模块,功能=srg\U显示\U组\U添加,
args=[{displaygroup,binary},{displaygrouphost,binary},{group,binary},{grouphost,binary}],
args_示例=[,],
args_desc=[“要添加到显示列表中的组”、“组服务器名称”、“要修改显示列表标识符的组”、“组服务器名称”],
结果={res,重新编码},
#ejabberd_命令{name=srg_display_group_del,tags=[shared_花名册_group],
desc=“从共享花名册组中删除组id”,
模块=?模块,功能=srg\U显示组\U del,
args=[{displaygroup,binary},{displaygrouphost,binary},{group,binary},{grouphost,binary}],
args_示例=[,],
args_desc=[“要从显示列表中删除的组”、“组服务器名称”、“要修改显示列表标识符的组”、“组服务器名称”],
结果={res,重新编码},
#ejabberd_命令{name=srg_set_opts,tags=[shared_花名册_group],
desc=“更新共享名册组选项(名称和说明)”,
模块=?模块,函数=srg\u集合\u选项,
args=[{name,binary},{description,binary},{group,binary},{grouphost,binary}],
args_示例=[,],
args_desc=[“共享花名册组名称”、“共享花名册组描述”、“组标识符”、“组服务器名称”],
结果={res,重新编码}
].
%%%
%%%共享名册组
%%%
to_列表([])->[];
to|list([H|T])->[to|list(H)| to|list(T)];
当原子(E)->原子(E)到原子(E)时,到原子列表(E);
到列表(E)->二进制到列表(E)。
srg\u显示\u组\u添加(新组、新组主机、组、组主机)->
?调试(“将组添加到显示列表。”,[]),
Opts=mod_shared_花名册:获取组选项(组、组主机),
mod_shared_花名册:设置组选项(组主机、组、选项),
好啊
srg\u显示\u组\u删除(删除组、删除组主机、组、组主机)->
?调试(“从显示列表中删除组。”,[]),
Opts=mod_shared_花名册:获取组选项(组、组主机),
%%mod_shared_花名册:设置组选项(组主机、组、选项),
好啊
srg设置选项(标签1,说明1,组,组主机)->
?调试(“设置组选项->标签:~p,说明:~p~n”,[Label1,说明1]),
Opts=mod_shared_花名册:获取组选项(组、组主机),
标签=如果标签1==->[];
true->[{label,Label1}]
完,,
Description=如果Description1==->[];
true->[{description,Description1}]
完,,
Displayed1=获取选项(选项、显示的组、[]),
显示=如果显示1=[]->[];
true->[{显示的组,显示的1}]
完,,
?调试(“选项:~p~n,[Label++Description++显示]),
mod_shared_花名册:设置组选项(显示组主机、组、标签++说明+),
好啊
mod_选项()->[]。
获取选项(选项、选项、默认值)->
案例列表:的键搜索(Opt,1,Opts)
{value,{{,Val}}->Val;
false->Default
结束。
mod_doc()->
#{desc=>
?T(“此模块为共享名册提供其他管理命令。”)}。
模块安装正确,但当我调用使用
mod\u shared\u花名册的方法
srg\u set\u opts
时,我得到以下错误:

error: {module_not_loaded, mod_shared_roster, <<"srg_group10">>}

错误:{模块未加载,模块共享花名册,}
我看过其他模块作为指南,我注意到的唯一区别是这些模块依赖项包含在同一目录中。但是,如何使用自定义模块实现这一点?我对Erlang没有经验,所以它可能只是一个简单的导入


我使用的是通过安装的ejabberd 20.04,用于安装模块

Opts = mod_shared_roster:get_group_opts(Group, GroupHost),
我认为该函数的参数是主机,然后是组,但您以相反的顺序提供它们