Erlang Ejabberd 13.12如何添加元素XMPP数据包?

Erlang Ejabberd 13.12如何添加元素XMPP数据包?,erlang,xmpp,ejabberd,Erlang,Xmpp,Ejabberd,我正在使用名为“FilterPacket”的ejabberd钩子来制作一个模块。这里我想向数据包添加一个元素。怎么做?我的代码是- on_filter_packet({From, To, Packet}=Input) -> Type = xml:get_tag_attr_s(list_to_binary("type"), Packet), if (Type == <<"groupchat">>) -> ?INFO_MSG("type is group ch

我正在使用名为“FilterPacket”的ejabberd钩子来制作一个模块。这里我想向数据包添加一个元素。怎么做?我的代码是-

on_filter_packet({From, To, Packet}=Input) ->

Type = xml:get_tag_attr_s(list_to_binary("type"), Packet),

if (Type == <<"groupchat">>) ->
?INFO_MSG("type is group chat", []),
    NPacket={Packet, [{xmlelement, "time",
     [],
     [{xmlcdata, "testtime"}]}]},
    {From, To, NPacket};
  true ->
    Input
end.
on_filter_数据包({From,To,packet}=Input)->
Type=xml:get_tag_attr_s(list_to_binary(“Type”),数据包),
如果(类型==)->
?信息信息(“类型为群聊,[]),
NPacket={Packet,[{xmlement,“time”,
[],
[{xmlcata,“testtime”}]},
{From,To,NPacket};
正确->
输入
结束。

此代码给出错误匹配。有什么帮助吗?

13.12对xmlelement使用了不同的类型

Packet是一种记录#xmlel,因此需要在Packet#xmlel.children中插入新元素

on_filter_packet({From, To, #xmlel{ children=OldChildren } = Packet}=Input) ->

...

TimeElem = #xmlel{ name = <<"time">>,
     children = 
     [{xmlcdata, <<"testtime">>}]},

NPacket = Packet#xmlel{ children = [TimeElem|OldChildren] },

...
on_filter_数据包({From,To,#xmlel{children=OldChildren}=packet}=Input)->
...
TimeElem=#xmlel{name=,,
儿童=
[{xmlcata,}]},
NPacket=Packet#xmlel{children=[TimeElem | OldChildren]},
...
未经测试,但会起作用