【问题标题】:Access muc roster from an ejabberd module (disco_items?)从 ejabberd 模块访问 muc roster (disco_items?)
【发布时间】:2012-12-16 16:22:04
【问题描述】:

我正在构建一个 ejabberd 模块来将消息的副本发送到外部 RESTful API。一切正常,对该 API 的请求正在发送带有 Sender、Recipient 和消息正文的 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 名册(参与者),但我不知道如何访问它们。

有这个活动吗?谁能指点我一些文档?

提前致谢!

【问题讨论】:

    标签: xmpp ejabberd multiuserchat


    【解决方案1】:

    您似乎想要获取特定房间的 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 中。

    【讨论】:

      猜你喜欢
      • 2015-10-23
      • 2016-05-18
      • 2016-12-09
      • 2016-02-21
      • 2017-07-14
      • 2017-05-11
      • 2018-10-23
      • 1970-01-01
      • 2017-01-11
      相关资源
      最近更新 更多