add pattern to match group chat messages for filtering

This commit is contained in:
Tom Quackenbush 2016-08-02 14:42:37 +00:00
parent 612b2b78e9
commit 265ff3dc70
1 changed files with 13 additions and 4 deletions

View File

@ -2,6 +2,8 @@
-behaviour(gen_mod). -behaviour(gen_mod).
-include("logger.hrl").
-export([ -export([
start/2, start/2,
stop/1, stop/1,
@ -37,6 +39,12 @@ censorWord({Lang, Word} = MessageTerm) ->
filterWords(L) -> filterWords(L) ->
lists:map(fun censorWord/1, L). lists:map(fun censorWord/1, L).
filterMessageText(MessageAttrs, MessageText) ->
Lang = getMessageLang(MessageAttrs),
MessageWords = string:tokens(unicode:characters_to_list(MessageText, utf8), " "),
MessageTerms = [{Lang, Word} || Word <- MessageWords],
unicode:characters_to_binary(string:join(filterWords(MessageTerms), " ")).
start(_Host, Opts) -> start(_Host, Opts) ->
Blacklists = gen_mod:get_opt(blacklists, Opts, fun(A) -> A end, []), Blacklists = gen_mod:get_opt(blacklists, Opts, fun(A) -> A end, []),
lists:map(fun bloom_gen_server:start/1, Blacklists), lists:map(fun bloom_gen_server:start/1, Blacklists),
@ -55,12 +63,13 @@ on_filter_packet(drop) ->
drop; drop;
on_filter_packet({_From, _To, {xmlel, <<"message">>, Attrs, [_chatState, {xmlel, <<"body">>, _BodyAttr, [{xmlcdata, MessageText}] = _BodyCData} = _MessageBody] = _Els} = _Packet} = _Msg) -> on_filter_packet({_From, _To, {xmlel, <<"message">>, Attrs, [_chatState, {xmlel, <<"body">>, _BodyAttr, [{xmlcdata, MessageText}] = _BodyCData} = _MessageBody] = _Els} = _Packet} = _Msg) ->
Lang = getMessageLang(Attrs), FilteredMessageWords = filterMessageText(Attrs, MessageText),
MessageWords = string:tokens(unicode:characters_to_list(MessageText, utf8), " "),
MessageTerms = [{Lang, Word} || Word <- MessageWords],
FilteredMessageWords = unicode:characters_to_binary(string:join(filterWords(MessageTerms), " ")),
{_From, _To, {xmlel, <<"message">>, Attrs, [_chatState, {xmlel, <<"body">>, _BodyAttr, [{xmlcdata, FilteredMessageWords}]}]}}; {_From, _To, {xmlel, <<"message">>, Attrs, [_chatState, {xmlel, <<"body">>, _BodyAttr, [{xmlcdata, FilteredMessageWords}]}]}};
on_filter_packet({_From, _To, {xmlel, <<"message">>, Attrs, [{xmlel, <<"body">>, _BodyAttr, [{xmlcdata, MessageText}] = _BodyCData} = _MessageBody] = _Els} = _Packet} = _Msg) ->
FilteredMessageWords = filterMessageText(Attrs, MessageText),
{_From, _To, {xmlel, <<"message">>, Attrs, [{xmlel, <<"body">>, _BodyAttr, [{xmlcdata, FilteredMessageWords}]}]}};
on_filter_packet(Msg) -> on_filter_packet(Msg) ->
% Handle the generic case (any packet that isn't a message with a body). % Handle the generic case (any packet that isn't a message with a body).
Msg. Msg.