问题描述
当前,没有用于创建MIX通道的api。 我为此编写了一个自定义模块。
到目前为止,我已经编写了以下代码。但我不是如何进一步进行。 我真的很感谢有人在这里提供指导。预先感谢。
-module(mod_custom).
-behavIoUr(gen_mod).
-include("logger.hrl").
-export([start/2,stop/1,reload/3,mod_options/1,get_commands_spec/0,depends/2]).
-export([
% Create channel
add_channel/4
]).
-include("ejabberd_commands.hrl").
-include("ejabberd_sm.hrl").
-include("xmpp.hrl").
start(_Host,_Opts) ->
ejabberd_commands:register_commands(get_commands_spec()).
stop(Host) ->
case gen_mod:is_loaded_elsewhere(Host,?MODULE) of
false ->
ejabberd_commands:unregister_commands(get_commands_spec());
true ->
ok
end.
reload(_Host,_NewOpts,_OldOpts) ->
ok.
depends(_Host,_Opts) ->
[].
get_commands_spec() ->
[
#ejabberd_commands{name = add_channel,tags = [group],desc = "Create a WhatsApp like group",module = ?MODULE,function = add_channel,args = [{jid,binary},{channel,{id,binary}],args_example = [<<"admin@localhost">>,<<"testgroup123@localhost">>,<<"abc123456">>],args_desc = ["Admin JID","Channel JID","Unique ID"],result = {res,rescode}}
].
add_channel(JID,Channel,ID) ->
%%% Create channel code goes here...
ok.
mod_options(_) -> [].
解决方法
尝试这样的事情:
-module(mod_custom).
-behaviour(gen_mod).
-export([start/2,stop/1,reload/3,mod_options/1,get_commands_spec/0,depends/2]).
-export([create_channel/3]).
-include("logger.hrl").
-include("ejabberd_commands.hrl").
-include("ejabberd_sm.hrl").
-include_lib("xmpp/include/xmpp.hrl").
start(_Host,_Opts) ->
ejabberd_commands:register_commands(get_commands_spec()).
stop(Host) ->
case gen_mod:is_loaded_elsewhere(Host,?MODULE) of
false ->
ejabberd_commands:unregister_commands(get_commands_spec());
true ->
ok
end.
reload(_Host,_NewOpts,_OldOpts) ->
ok.
depends(_Host,_Opts) ->
[].
get_commands_spec() ->
[#ejabberd_commands{name = create_channel,tags = [group],desc = "Create a WhatsApp like group",module = ?MODULE,function = create_channel,args = [{from,binary},{channel,{service,binary}],args_example = [<<"admin@localhost">>,<<"testgroup123">>,<<"mix.localhost">>],args_desc = ["From JID","Channel Name","MIX Service"],result = {res,rescode}}
].
create_channel(From,ChannelName,Service) ->
try xmpp:decode(
#xmlel{name = <<"iq">>,attrs = [{<<"to">>,Service},{<<"from">>,From},{<<"type">>,<<"set">>},{<<"id">>,p1_rand:get_string()}],children =
[#xmlel{name = <<"create">>,attrs = [{<<"channel">>,ChannelName},{<<"xmlns">>,?NS_MIX_CORE_0}]}
]},?NS_CLIENT,[]) of
#iq{type = set} = Iq ->
case mod_mix:process_mix_core(Iq) of
#iq{type = result} ->
ok;
_ ->
{error,unexpected_response}
end
catch _:{xmpp_codec,Why} ->
{error,xmpp:format_error(Why)}
end.
mod_options(_) -> [].