从ejabberd模块访问muc名单(disco_items?)

时间:2013-01-02 09:38:50

标签: xmpp ejabberd multiuserchat

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

我正在为此触发user_send_packet和user_receive_packet挂钩,我可以从数据包中提取params(Sender,Recipient,Body):

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名单(参与者),但我不知道如何访问它们。

有这样的事件吗?有人能指点我一些文件吗?

提前致谢!

1 个答案:

答案 0 :(得分: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_event添加到mod_muc_room.erl。