Don't always store messages passed through muc_filter_message

Recently we added new places where we call muc_filter_message to add
occupandid info to messages, but this also made them be stored in archive
as mod_mam uses that hook for getting sent messages - in case of those
messages we shouldn't be doing this.

This should fix issue #4083
This commit is contained in:
Paweł Chmielowski 2023-08-24 11:54:26 +02:00
parent 00c76003cb
commit c0e7774937
2 changed files with 8 additions and 6 deletions

View File

@ -465,6 +465,8 @@ offline_message({_Action, #message{from = Peer, to = To} = Pkt} = Acc) ->
-spec muc_filter_message(message(), mod_muc_room:state(),
binary()) -> message().
muc_filter_message(#message{meta = #{mam_ignore := true}} = Pkt, _MUCState, _FromNick) ->
Pkt;
muc_filter_message(#message{from = From} = Pkt,
#state{config = Config, jid = RoomJID} = MUCState,
FromNick) ->

View File

@ -625,12 +625,12 @@ normal_state({route, ToNick,
Packet2 = xmpp:set_subtag(Packet, X),
case ejabberd_hooks:run_fold(muc_filter_message,
StateData#state.server_host,
Packet2,
xmpp:put_meta(Packet2, mam_ignore, true),
[StateData, FromNick]) of
drop ->
ok;
Packet3 ->
PrivMsg = xmpp:set_from(Packet3, FromNickJID),
PrivMsg = xmpp:set_from(xmpp:del_meta(Packet3, mam_ignore), FromNickJID),
lists:foreach(
fun(ToJID) ->
ejabberd_router:route(xmpp:set_to(PrivMsg, ToJID))
@ -3016,7 +3016,7 @@ send_subject(JID, #state{subject_author = {Nick, AuthorJID}} = StateData) ->
to = JID, type = groupchat, subject = Subject},
case ejabberd_hooks:run_fold(muc_filter_message,
StateData#state.server_host,
Packet,
xmpp:put_meta(Packet, mam_ignore, true),
[StateData, Nick]) of
drop ->
ok;
@ -5169,9 +5169,9 @@ process_iq_moderate(From, #iq{type = set, lang = Lang},
]}]},
{FromNick, _Role} = get_participant_data(From, StateData),
Packet = ejabberd_hooks:run_fold(muc_filter_message,
StateData#state.server_host,
Packet0,
[StateData, FromNick]),
StateData#state.server_host,
xmpp:put_meta(Packet0, mam_ignore, true),
[StateData, FromNick]),
send_wrapped_multiple(JID,
get_users_and_subscribers_with_node(?NS_MUCSUB_NODES_MESSAGES, StateData),
Packet, ?NS_MUCSUB_NODES_MESSAGES, StateData),