如何在 ejabberd 中的 xmpp 消息正文中附加自定义数据
How do I append custom data in the body of a xmpp message in ejabberd
我已经使用 Pidgin 设置了一个聊天设置并且 Ejabberd.I 使用 user_send_packet
:
在 ejabberd 中写下了一个自定义模块
ejabberd_hooks:add(user_send_packet, _Host, ?MODULE,
myMessage, 95),
函数myMessage如下:
myMessage({Packet, C2SState})->
PacketType=xmpp:get_name(Packet),
case PacketType of
<<"iq">>->
ok;
<<"presence">>->
ok;
<<"message">>->
Sum=2+2,
?INFO_MSG("Sum is ~p~n",[Sum])
end,
{Packet,C2SState}.
基本上这个函数的作用是,每当有人发送聊天消息说 "hello there" 时,Sum
的值就会被计算并打印在服务器及其日志和消息“"hello there" 发送给第二个用户。
但是现在我想将 Sum
的值连同消息 "hello there"
一起发送给第二个用户,例如:
"hello there Sum is 4"
谁能帮我解决这个问题?
提前致谢。
这里是:
process_message({#message{body = Body} = Msg, C2SState})->
Sum = calc_sum_and_return_as_binary(),
NewBody = lists:map(
fun(#text{data = Data} = Txt) ->
Txt#text{data = <<Data/binary, Sum/binary>>}
end, Body),
{Msg#message{body = NewBody}, C2SState};
process_message(Acc) ->
Acc.
请注意,#text{}
记录包含 lang
字段,如果您想支持所附加文本的国际化,可以使用该字段。
我已经使用 Pidgin 设置了一个聊天设置并且 Ejabberd.I 使用 user_send_packet
:
ejabberd_hooks:add(user_send_packet, _Host, ?MODULE,
myMessage, 95),
函数myMessage如下:
myMessage({Packet, C2SState})->
PacketType=xmpp:get_name(Packet),
case PacketType of
<<"iq">>->
ok;
<<"presence">>->
ok;
<<"message">>->
Sum=2+2,
?INFO_MSG("Sum is ~p~n",[Sum])
end,
{Packet,C2SState}.
基本上这个函数的作用是,每当有人发送聊天消息说 "hello there" 时,Sum
的值就会被计算并打印在服务器及其日志和消息“"hello there" 发送给第二个用户。
但是现在我想将 Sum
的值连同消息 "hello there"
一起发送给第二个用户,例如:
"hello there Sum is 4"
谁能帮我解决这个问题?
提前致谢。
这里是:
process_message({#message{body = Body} = Msg, C2SState})->
Sum = calc_sum_and_return_as_binary(),
NewBody = lists:map(
fun(#text{data = Data} = Txt) ->
Txt#text{data = <<Data/binary, Sum/binary>>}
end, Body),
{Msg#message{body = NewBody}, C2SState};
process_message(Acc) ->
Acc.
请注意,#text{}
记录包含 lang
字段,如果您想支持所附加文本的国际化,可以使用该字段。