Ожидаемая функция filter_packet Ejabberd не вызывается

Модуль 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


person bwsmith    schedule 09.03.2017    source источник
comment
используя ejabberd 17.01 и последний mod_pottymouth от ejabberd-contrib   -  person bwsmith    schedule 10.03.2017


Ответы (2)


Начиная с 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.
person user2610053    schedule 29.04.2017

Вы пытались использовать xmlel в качестве записи вместо кортежа?

person Girdhar Sojitra    schedule 01.04.2017