Вот выкладываю, но только обработчик onChanelMessage:
%b_halt = 0
if((%Chanels{$chan.name}==1)&&(!%ExUsers{$2}))
foreach(%word,%X_words)
if(!$str.grep(%word,$3,"r")==0)
if(($isMeHalfOp||$isMeOp)&&!%b_halt)
{
if(%X_users{$2}{$chan.name}==0)
{
if($str.grep(c,$chan.mode) == "")%mod_c = 0
else %mod_c = 1
if(!%mod_c)
Ъ $0 "мат на канале запрещён."
else
say $0": мат на канале запрещён."
%b_halt = 1
%X_users{$2}{$chan.name}=1
}
else if(%X_users{$2}{$chan.name}==1)
{
kick $0 Стена там "-->"
notice $0 "Следующий раз бан"
%b_halt = 1
%X_users{$2}{$chan.name}=2
}
else
{
kb $0 "Фильтруй базар"
%b_halt = 1
}
}
вот мой вариант. имхо самый лучший.

для каждого юзверя заводиться "досье" на каждом канале в хеше %X_users{маска_юзверя}{имя_канала}. Сделал в попапе item, чтоб можно обнулить было (мало ли чего). Ещё есть хеш %ExUsers{маска_юзверя} и %Chanels{имя_канала}. тоже в попапе сделал менюшек, чтоб хоть какой-нибудь интерфейс был.

Дальше читайте код, там no comments.

install.kvs ещё не собрал. Как соберу выложу ссылку.
Кому интересно в подробностях, пишите мне в приват. Ник тотже
В коде вместо $3 лучше поставить %p_str предварительно сделав следующее:
%p_str=" "$3
просто некоторые слова могут содержать части матов. Например "рубля" или "застрахуя". Чтобы избежать подобных случаев, в блокноте надо перед матным словом ставить пробел. В приведённом выше коде случаи если мат первое слово, но в блокноте начиналось с пробела не обрабатывались.
Правда возникает вопрос при создании базы данных для скрипта.
Как например в шаблоне прописать исключение букв (!ч|!к) вместо того, чтобы перебирать весь алфавит? если кто, знает расскажите.
