ОсновноеRadiotalkПользовательское
MPCHAT - CMS хостинг чатов для профессионалов
84   •   Посмотреть все темы

Мощный фильтр рекламы в чат (обсуждение)

 

2536
удалён @crigon
Испробовать можно здесь: **********
Кто хорошо знает регулярные выражения, возможно, предложит более рациональные фильтры.
Т.к. в редких случаях может отфильтроваться безобидное сообщение.

Спрашивайте, если что-то непонятно или что ещё следует отлавливать.
Ну и в принципе, о рекламе можно будет забыть.

УСТАНОВКА

1. Модерация -> Фильтрация чата
Добавляем:
((spamer))^<font color=red>РЕКЛАМА</font>^
2. Модерация -> Скрипты в чате -> Открыть весь фаил
/* Урезать повторяющиеся символы в сообщениях до maxabc, 0 - выкл */
var maxabc=5;

Находим:
function translit(msg){
Выше добавляем:
1) Собственно фильтр. Массив spamerf - условия для чат-сервисов и просто фильтры с применением REGEX, больше всего спама от мелких левых чатов. Обратите внимание на "ref" и "reg", ищет реферальные ссылки. Может фильтровать и хорошие ссылки, но это редко.
simplespamerf - для обычных сайтов, как правило, не пытающихся обойти фильтр.
nospamerf содержит сайты-исключения.
guestspamerf - регулярное выражение, ищет любые ссылки. Предполагается, что со временем оно станет более адекватным.

var spamerf = new Array();
spamerf[0] = /[aа]{1,5}[^0-9a-zа-я]*[uуy]{1,5}[^0-9a-zа-я]*[gг]{1,5}[^0-9a-zа-я]*[иuyу]{1,5}[^0-9a-zа-я]*[sсc]{1,5}[^0-9a-zа-я]*[tт]{1,5}[^0-9a-zа-я]*[4]{1,5}[^0-9a-zа-я]*[uиyу]{1,5}/; /* august */
spamerf[1] = /[mмscсiи]{1,5}[^0-9a-zа-я]*[pрпmм]{1,5}[^0-9a-zа-я]*([cс]{1,5}[^0-9a-zа-я]*[hн]{1,5}[^0-9a-zа-я]*|[4]{1,5}[^0-9a-zа-я]*)[aа]{1,5}[^0-9a-zа-я]*[tт]{1,5}/; /* mpchat, spchat, smchat, ipchat */
spamerf[2] = /[rр]{1,5}[^0-9a-zа-я]*[uyу]{1,5}[^0-9a-zа-я]*[cсs]{1,5}[^0-9a-zа-я]*[hн]{1,5}[^0-9a-zа-я]*[aа]{1,5}[^0-9a-zа-я]*[tт]{1,5}/; /* russchat */
spamerf[3] = /[cс]{1,5}[^0-9a-zа-я]*[hн]{1,5}[^0-9a-zа-я]*[aа]{1,5}[^0-9a-zа-я]*[tт]{1,5}[^0-9a-zа-я]*[nнh]{1,5}[^0-9a-zа-я]*[aаoо]{1,5}[^0-9a-zа-я]*[mм]{1,5}[^0-9a-zа-я]*[eе]{1,5}/; /* chatname, chathome */
spamerf[4] = /[tт]{1,5}[^0-9a-zа-я]*[vв]{1,5}[^0-9a-zа-я]*[oо]{1,5}[^0-9a-zа-я]*[йij]{1,5}[^0-9a-zа-я]*[сc]{1,5}[^0-9a-zа-я]*[hн]{1,5}[^0-9a-zа-я]*[aа]{1,5}[^0-9a-zа-я]*[tт]{1,5}/; /* tvoichat */
spamerf[5] = /[сc]{1,5}[^0-9a-zа-я]*[hн]{1,5}[^0-9a-zа-я]*[аa]{1,5}[^0-9a-zа-я]*[tт]{1,5}[^0-9a-zа-я]*[zз]{1,5}[^0-9a-zа-я]*[mм]{1,5}[^0-9a-zа-я]*[eе]{1,5}/; /* chatzme */
spamerf[6] = /[cс]{1,5}[^0-9a-zа-я]*[hн]{1,5}[^0-9a-zа-я]*[aа]{1,5}[^0-9a-zа-я]*[tт]{1,5}[^0-9a-zа-я]*[scс]{1,5}[^0-9a-zа-я]*[eе]{1,5}[^0-9a-zа-я]*[rpр]{1,5}[^0-9a-zа-я]*[vвb]{1,5}[^0-9a-zа-я]*[ijи]{1,5}[^0-9a-zа-я]*[cс]{1,5}[^0-9a-zа-я]*[eе]{1,5}/; /* chatservice */
spamerf[7] = /[сc]{1,5}[^0-9a-zа-я]*[hн]{1,5}[^0-9a-zа-я]*[аa]{1,5}[^0-9a-zа-я]*[tт]{1,5}[^0-9a-zа-я]*[cс]{1,5}[^0-9a-zа-я]*[iиj]{1,5}[^0-9a-zа-я]*[tт]{1,5}[^0-9a-zа-я]*[yу]{1,5}/; /* chacity */
spamerf[8] = /[iи]{1,5}[^0-9a-zа-я]*[nhн]{1,5}[^0-9a-zа-я]*[tт]{1,5}[^0-9a-zа-я]*[eе]{1,5}[^0-9a-zа-я]*[rрp]{1,5}[^0-9a-zа-я]*[cс]{1,5}[^0-9a-zа-я]*[hн]{1,5}[^0-9a-zа-я]*[aа]{1,5}[^0-9a-zа-я]*[tт]{1,5}/; /* interchat */
spamerf[9] = /(&|\?)ref/;
spamerf[10] = /(&|\?)reg/;
spamerf[11] = /(&|\?)from/;

var simplespamerf = 'antichat|townchat.ru|boom4u.eu|chillout.nnov.ru|kchat.ru|chatki.ru|myfland.ru|da.zp.ua|multi-chat.ru|kiss-chat.ru|chat.slize.ru|livechat.su|wilect.ru|mega-chat.ru|proekt28053.ru|chat.biz.ua|chatic|ksyuadmin.at.ua|lovechat.ru|sexychat.ru';
simplespamerf = simplespamerf.split("|");

var nospamerf = 'spam-test|ВАШДОМЕН.РУ';
nospamerf = nospamerf.split("|");

var guestspamerf = /[hхx]?[tт]?[tт]?[пpр]?[\/]?[\/]?[^0-9a-zа-я]*[wв]?[wв]?[wв]?[^0-9a-zа-я]*([ruру]{2}|[comком]{3}|[deде]{2}|[orgорг]{3}|[azаз]{2}|[bizбиз]{3}|[infoинфо]{4}|[nameнаме]{4}|[fmфм]{2}|[netнет]{3}|[uaуа]{2})/;

2) Функция фильтрации. Вставляем её сразу после списка мусора.
function spamer(msg) {
var wtf = msg.toLowerCase();
while(wtf.search(' ') != -1) wtf = wtf.replace(' ','');
var spam = 0;
if(parent.regist != 1) {
if(wtf.search(guestspamerf) != -1) spam = 1; /* А для гостей, вообще, все ссылки будут спамом. */
for(var i = 0; i < spamerf.length; i++) if(wtf.search(spamerf[i]) != -1) { spam = 1; break; } /* Проверка по REGEX выражениям на всякий случай */ }
else { /* Для зарегистрированных */
for(var i = 0; i < simplespamerf.length; i++) if(wtf.search(simplespamerf[i]) != -1) { spam = 1; break; } /* Проверка простых сайтов */
for(var i = 0; i < spamerf.length; i++) if(wtf.search(spamerf[i]) != -1) { spam = 1; break; } /* Проверка по REGEX выражениям */ }
for(var i = 0; i < nospamerf.length; i++) if(wtf.search(nospamerf[i]) != -1) { spam = 0; break; } /* Проверка исключений */
if(spam) msg = "((spamer))"; /* Заменяем всё сообщение */
return msg; }

3. В скриптах добавляем наш фильтратор в msg_send()
Находим:
msg_text=abc_flood(msg_text);
Ниже добавляем:
msg_text=spamer(msg_text);
Готово.

Фильтр устроен так, что при нахождении искомой каки, полностью заменяет сообщение на индикатор спама.
У такого подхода есть как плюсы, так иминусы. Один из плюслов (или минусов) в том, что спамер испытывает злобу и негодует. -)

Хочу напомнить, что иногда может фильтроваться и НЕреклама, будьте адекватны в своих банах.

И последнее. Всяческие советы, критика и попытки обхода фильтра (в ТЕСТОВОМ чате, ссылка выше) приветствуются.

-----
28.01: Функция полностью переписана. Теперь она выглядит более гармонично и компактно, фильтр разделён на несколько частей, исключений можно добавлять сколько угодно, нечто вроде "sм4аТ" тоже отфильтруется. Так же фильтруется теперь только сам текст, не затрагивая ник

29.01: "guestspamerf" теперь понимает ссылки с доменом UA, а так же отфильтрует ссылку без точек. В "простых" фильтрах добавлена поддержка пробелов.
-----

Отдельной строкой, ДЛЯ ТЕХ КТО В ТАНКЕ: скрипт НЕ БУДЕТ фильтровать egargshydj.ru если ВЫ САМИ не пропишите его в фильтре. Более того, если вы хотите, чтобы фильтровалось оно с символами, пробелами и т.д. нужно САМОСТОЯТЕЛЬНО составить фильтр, используя REGEX и добавить его в массив. Всё.

+ добавляйте своих спамеров (только если домен уникальный, а не ***.august.*** и пр.), если есть случаи частого спама, будем составлять руглярки -)

Отредактировано crigon - 28.01.2009
1214
Андрей @Андрюха
я что то не поянл а зачем список этих чатов

2536
удалён @crigon
Андрюха пишет:

я что то не поянл а зачем список этих чатов

Это пример.

1214
Андрей @Андрюха
crigon пишет:

Андрюха пишет:

я что то не поянл а зачем список этих чатов

Это пример.

а если их не будет то чо ?

2536
удалён @crigon
Андрюха пишет:

crigon пишет:

Андрюха пишет:

я что то не поянл а зачем список этих чатов

Это пример.

а если их не будет то чо ?

Где не будет? Ты первый пост читал, вообще?

1214
Андрей @Андрюха
да но не понял зачем они 😲

11667
Латвиец @Латвиец
Читай ещё раз)

5421
Глеб @Глебон
Андрюха пишет:

да но не понял зачем они 😲

Что бы они фитровались и рекламы не было! Ты сам можешь пополнять список доменов чатов! Я так понял!

637
zorro @zorro
crigon пишет:

И последнее. Всяческие советы, критика и попытки обхода фильтра (в ТЕСТОВОМ чате, ссылка выше) приветствуются.

1. Через пробелы работает реклама ) то есть пишешь к примеру: "m u l t i - c h a t . r u " и реклама проходит! Можно и такое как-то закрыть?
2. Меняешь расскладку и опять реклама проходит как обычно )

Отредактировано zorro - 27.01.2009
2536
удалён @crigon
zorro, spamerf[0-8] с пробелами и подменёнными русскими символами не пропустит.
При желании можно хоть весь список таким образом сделать.

Просто обычно так делают именно ущербные чаты с сервисов, остальные так сильно не пытаются обойти фильтры. -)

2536
удалён @crigon
Или даже можете добавлять в эту тему свои неугодные URLы особо отличившихся.
Будем составлять стоп-спам лист -)

87
Сергей @Fahrenheit
Идея хорошая и фильтр хороший, все в-принципе понятно. Вопросов пока никаких, посмотрим что будет в процессе установки) автору благодарность)

Отредактировано Fahrenheit - 27.01.2009
1258
Сергей @seg
crigon пишет:

И последнее. Всяческие советы, критика и попытки обхода фильтра (в ТЕСТОВОМ чате, ссылка выше) приветствуются.

Ну попробовал. Только оставил сообщение в главном чате. Конечно извратился, ничего не скажеш. Так что, лучший защитник все же, это совесть спамера. Кипятка им в ухо.

13:30:14 • seg: н а ш (точка)м п 4 а т (точка)к о м проверяем фильтр ))) токо меня в бан лист не надо ))) я не спамлю.

Вот можете отсюда плясать, как усовершенствовать еще фильтр. Для высокопосещаемых чатов, админу мона и постараться, разные условия попрописывать. crigon спасибо. Нужная вещь на сегодняшний день ))

637
zorro @zorro
crigon пишет:

zorro, spamerf[0-8] с пробелами и подменёнными русскими символами не пропустит.

ну у меня же получилось) зайди в чат и посмотри, цитирую с чата:
11:09:10 fefefefe: www.dа.zp.ua
13:34:30 • hhththt: ksyuadmin.аt.uа - c подменой рус. и укр. букв
13:47:35 • hhththt: da . z p . ua - пробелы

или я тебя не правильно понял?

20090
Dimitry @Dimitry
А я могу предложить такой вариант фильтра
под эту строчку
msg=msg_cmd+msg_nick+msg_text;


var sp="mpchat.com|russchat.ru|smchat.ru|chathome.ru|antichat.ru|lovechat.ru";
var notsp="mpchat.com/chat|mychat.ru";
sp=sp.split('|');
notsp=notsp.split('|');
var t=msg.toLowerCase().replace(' ','');
var tru=translit(t);
var spam=0;
for(var i=0;i<sp.length;i++) if(t.search(sp[i]) != -1 || tru.search(translit(sp[i])) != -1) {spam=1;break;}
for(var i=0;i<notsp.length;i++) if(t.search(notsp[i]) != -1 || tru.search(translit(notsp[i])) != -1) {spam=0;break;}
if(spam) msg="((spamer))";

удаляет пробелы, переводит в нижний регистр
и проверяет все указанные адреса в английской и русской транскрипции
всё что надо это только доваить адреса в первую строку и искнючения в notspam)
Может быть кому то и мой мини варианчик пригодится, он не такой эффективный но и лишнего не дорлжен цеплять)

637
zorro @zorro
demon пишет:

Может быть кому то и мой мини варианчик пригодится, он не такой эффективный но и лишнего не дорлжен цеплять)

сейчас потестим его )

Дим, вот тут еще не мало важное хочу тебе сказать, сделай так чтобы еще можно было прописывать некоторые слова в запрет на регистрацию! К примеру я регю ник: chat

а это слово стоит в фильтрации, и все кто нажмут на ник chat и начнут ему писать будет вылетать: РЕКЛАМА
а это очень плохо) а так занес эти же слова чтобы не смогли их регить и все 😀 сможешь такое сделать?

20090
Dimitry @Dimitry
я испраил ошибку в коде, попробуй заного )

2536
удалён @crigon
seg, теперь и это не прокатит)
Первый пост обновлю..

zorro, ну эти сайты прописаны без выкрутасов) А вот xxx.mpchat.ru не получится так...

demon, как-то я не подумал c translit()
Но, в принципе особой разницы нету..
Попробую взять твою идею с "|" для простых адресов, которые не нужно проверять на всякие символы... И код сократится как раз.)

637
zorro @zorro
demon пишет:

я испраил ошибку в коде, попробуй заного )

не понял что ты исправил) поменял код который написал тобой выше) все равно регить ники такие можно как mpchat
а потом как вошел в чат под таким ником если нажимаешь на его ник выскакивает: РЕКЛАМА

2536
удалён @crigon
zorro пишет:

Дим, вот тут еще не мало важное хочу тебе сказать, сделай так чтобы еще можно было прописывать некоторые слова в запрет на регистрацию! К примеру я регю ник: chat

а это слово стоит в фильтрации, и все кто нажмут на ник chat и начнут ему писать будет вылетать: РЕКЛАМА
а это очень плохо) а так занес эти же слова чтобы не смогли их регить и все 😀 сможешь такое сделать?

Это косяк, конечно. Правда у меня ещё не было таких.
Ну, если что, можно просто банить эти ники.