0

我正在使用的 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

4

2 回答 2

2

从 16.12 开始,ejabberd 不再路由xmlel元素。您应该处理新样式记录messagepresenceiq。请阅读https://docs.ejabberd.im/developer/guide/#ejabberd-routerhttps://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.
于 2017-04-29T06:36:48.003 回答
0

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

于 2017-04-01T15:09:36.357 回答