3

我正在构建一个 ejabberd 模块来将消息的副本发送到外部 RESTful API。一切正常,对该 API 的请求正在发送带有发件人、收件人和消息正文的 POST 参数。

我为此触发了 user_send_packet 和 user_receive_packet 钩子,我可以从数据包中提取参数(发件人、收件人、正文):

Sender = xml:get_tag_attr_s("from", Packet),
Recipient = xml:get_tag_attr_s("to", Packet),
Body = xml:get_path_s(Packet, [{elem, "body"}, cdata])

对于群聊 (MUC),我还想在参数中发送 MUC 名册(参与者),但我不知道如何访问它们。

有这方面的活动吗?谁能指点我一些文件?

提前致谢!

4

1 回答 1

0

您似乎想要获得特定房间的 MUC 参与者。

您需要查看 mod_muc.erl 和 mod_muc_room.erl。我不确定你使用的是哪个版本的 ejabberd,所以我将根据最新的 ejabberd 进行解释。

通过调用获得房间的pid后

mnesia:dirty_read(muc_online_room, {Room, Host})

你可以打电话

gen_fsm:sync_send_all_state_event(Pid, {get_disco_item, From, Lang}, 100)

或使用类似的代码。用户列表在回复中。

如果您不喜欢回复格式,您可能需要在handle_sync_eventmod_muc_room.erl 中添加自定义。

于 2014-01-03T06:52:23.593 回答