【问题标题】:The expected Ejabberd filter_packet function not being called未调用预期的 Ejabberd filter_packet 函数
【发布时间】:2017-07-30 22:48:15
【问题描述】:

我正在使用的 ejabberd 模块 mod_pottymouth 没有按预期过滤消息。添加日志记录后,我看到调用了一个通用处理程序方法,而不是执行实际过滤的方法。问题是,我无法解析 ejabberd 消息以确保调用正确的函数。任何人都可以帮忙吗?

on_filter_packet({_From, _To, {xmlel, <<"message">>, _Attrs, Els} = _Packet} = _Msg) ->
  %This is what should be called to filter messages, but is never called
  FilteredEls = filterMessageBodyElements(Els, []),
  {_From, _To, {xmlel, <<"message">>, _Attrs, FilteredEls}};
on_filter_packet(Msg) ->
 % This is what actually gets called
 Msg.

这是使用 ejabberd 17.01

【问题讨论】:

  • 使用 ejabberd 17.01,以及来自 ejabberd-contrib 的最新 mod_pottymouth

标签: erlang ejabberd ejabberd-module ejabberd-hooks


【解决方案1】:

从 16.12 开始,ejabberd 不再路由 xmlel 元素。您应该处理新样式记录:message、presence 或 iq。 请阅读https://docs.ejabberd.im/developer/guide/#ejabberd-router 和https://github.com/processone/xmpp/blob/master/README.md

所以,基本上,您的代码应该如下所示:

on_filter_packet(#message{body = Body} = Msg) ->
    NewBody = filterMessageBody(Body),
    Msg#message{body = NewBody};
on_filter_packet(Stanza) ->
    Stanza.

【讨论】:

    【解决方案2】:

    您是否尝试过使用 xmlel 作为记录而不是元组?

    【讨论】:

      猜你喜欢
      • 2015-10-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-27
      • 1970-01-01
      • 2019-03-28
      • 1970-01-01
      相关资源
      最近更新 更多