Сообщения в общий чат, личные в приват, поисковые запросы или описания пользователей просматриваются функциекй антирекламы по шаблонам, занесённым в список рекламы (если она активна). В случае обнаружения в сообщении соответствия шаблону в массиве списка рекламы, если этот текст не соответствует шаблонам-исключениям, текст не пропускается или нарушитель наказывается баном, в зависимости от режима антирекламы. Есть функция проверки описаний пользователей на рекламу. Всего режимов 4:
Таблицы с шаблонами рекламы, отдельно рекламы чата, привата, описаний и поиска хранятся в файлах adverTable, adverTableChatOnly, adverTablePMOnly, adverTableDescOnly, adverTableSROnly.
Для добавления в список шаблона рекламы (обычной строки или LUA-шаблона) используется команда !advertising+ <тип> <шаблон>. Этот шаблон общий для всех событий. Для добавления в список шаблона рекламы отдельно для чата используется команда !advertising_chat+ <тип> <шаблон>. Для добавления в список шаблона рекламы отдельно для привата используется команда !advertising_pm+ <тип> <шаблон>. Для добавления в список шаблона рекламы отдельно для описаний используется команда !advertising_desc+ <тип> <шаблон>. Для добавления в список шаблона рекламы отдельно для поиска используется команда !advertising_sr+ <тип> <шаблон>. Для удаления шаблона из списка рекламы используется команда !advertising- <индекс>. Для удаления шаблона из списка рекламы чата отдельно используется команда !advertising_chat- <индекс>. Для удаления шаблона из списка рекламы привата отдельно используется команда !advertising_pm- <индекс>. Для удаления шаблона из списка рекламы описаний отдельно используется команда !advertising_desc- <индекс>. Для удаления шаблона из списка рекламы поиска отдельно используется команда !advertising_sr- <индекс>. Для просмотра списка шаблонов антирекламы используется команда !advertising. Включение/выключение проверки чата, привата, описаний и поиска производится командами !adver_chatscan, !adver_pmscan, !adver_dscscan и !adver_srscan соответственно.
При добавлении шаблона указывается тип шаблона: 0 - это обычный текст (регистронезависимо), 1 - это шаблон по правилам LUA-regex.
Например, мы хотим запретить рекламу хаба dchub://badhub.hub. Для этого мы можем добавить строку dchub://badhub.hub как шаблон антирекламы 0 типа. Так, при написании адреса этого хаба в чат, например, сработает антиреклама. НО! А что, если мы хотим запретить все адреса хабов, кроме нашего? Нереально занести в шаблоны адреса всех возможных хабов. Для этого есть очень мощный инструмент: шаблоны 1 типа (LUA-шаблоны). Расскажу коротко об основных возможностях (более подробно в описании языка):
. означает любой символ;
%S означает любой непустой (непробельный) символ;
%s означает любой пустой символ (пробел, табуляция, перевод строки и т.п.): \t \n \v \f \r <space>;
%d означает любой числовой символ (от 0 до 9);
%w означает любой буквенно-цифровой символ (латинский алфавит);
%a означает любой буквенный символ (латинский алфавит): ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz;
%c означает любой управляющий символ: \0 \1 \2 \3 \4 \5 \6 \a \b \t \n \v \f \r \14 \15 \16 \17 \18 \19 \20 \21 \22 \23 \24 \25 \26 \27 \28 \29 \30 \31 ;
%l и %u означают соответственно любой символ в нижнем и верхнем регистрах (латинский алфавит);
%p означает любой символ пунктуации: !"#$%&'()*+,-./:;<=>?@[\]^_`{|}~;
%x означает любое шеснадцатиричное число: 0123456789ABCDEFabcdef;
%z означает нулевой символ: \0;
Символы ^$()%.[]*+-? являются служебными:
^ и $ в начале и конце строки шаблона соответственно означают начало и конец исходной строки;
[ и ] определяют диапазон символов внутри них. Например, шаблон [0-9] означает любой числовой символ от 0 до 9, что можно записать и как %d. Если в начале шаблона внутри квадратных скобок стоит символ ^, то шаблон означает любые символы, не входящие в этот диапазон. Например, шаблон [^0-9] означает любой нечисловой символ, тоесть символы, кроме символов от 0 до 9. Это можно записать как [^%d];
( и ) означают захват, который возвращается в результах проверки совпадения (нужный участок из найденной подстроки, соответствующий шаблону в скобках);
* означает, что символ до него может повторяться много раз или не быть (0 и более символов). Например, шаблон %d* означает, что тут могут быть цифровые символы (или не быть вовсе);
+ означает, что символ перед ним может повторяться много раз, но хотя бы один должен быть (1 и более символов). Например, шаблон %S+ означает 1 или более непробельных символов;
- похож на *, только отличается от него тем, что определяет строку до первого вхождения в исходной строке символа, соответствующего шаблону после него (при наличии), тоесть минимально возможной длины;
? означает, что символ перед ним может присутствовать 1 раз или не присутствовать вовсе (0 или 1 символ). Например, шаблон %s? означает, что в этом месте может быть 1 пробельный символ или не быть.
Для того, чтобы задать в шаблоне символ, который входит в список служебных символов, нужно экранировать его символом %. Например, чтобы задать в шаблоне символ "." (точка), надо написать %., иначе, если задан шаблон ., он будет означать вообще любой символ, не только точку). Таким образом, например, чтобы задать шаблон IP-адреса, нужно написать так: %d+%.%d+%.%d+%.%d+. Здесь %d+ означает 1 или несколько цифр, а %. означает точку. Чтобы задать сам символ "%" (который тоже является служебным), надо написать шаблон как %%.
Все остальные символы, не являющиеся служебными, означают самих себя.
Приведём пример, как задать шаблон анирекламы для любого адреса хаба. Для этого достаточно добавить шаблон антирекламы 1 типа:
dchub://%S+
Тут служебный символ %S+ означает, что после строки "dchub://" идёт 1 или более непустых символов. Чтобы антиреклама не срабатывала на адрес нашего собственного хаба, добавим адрес нашего хаба в список исключений антирекламы (поддерживаются также как обычные строки, так и шаблоны LUA).
Командой !adver_banmode <режим> устанавливается режим антирекламы чата (от 0 до 3). Командой !adver_pmbanmode <режим> устанавливается режим антирекламы привата (от 0 до 3). Командой !adver_dscbanmode <режим> устанавливается режим антирекламы описаний (от 0 до 3). Командой !adver_srbanmode <режим> устанавливается режим антирекламы поисковых запросов (от 0 до 3). Командой !adver_bantime <минуты> устанавливается число минут для бана в режиме антирекламы 2.
Включение/выключение проверки чата на рекламу выполняется командой !adver_chatscan. Включение/выключение проверки приватных сообщений на рекламу выполняется командой !adver_pmscan. Включение/выключение проверки описаний пользователей на рекламу выполняется командой !adver_dscscan. Включение/выключение проверки поисковых запросов на рекламу выполняется командой !adver_srscan.
Можно добавлять шаблон исключений антирекламы. При встрече этого шаблона антиреклама не будет срабатывать. Добавить шаблон в исключения можно командой !advertising_exceptions+ <тип> <шаблон> (тип 0 - обычный текст, 1 - шаблон LUA). Удалить шаблон из исключений можно по команде !advertising_exceptions- <шаблон>. Список исключений доступен по команде !advertising_exceptions.
Включение/выключение уведомлений о банах за рекламу по команде !adver_notices.
Для того, чтобы проверить, попадает ли какой-либо текст под имеющиеся шаблоны антирекламы, можно воспользоваться командой !adver_check <текст>.
Также есть возможность установить для шаблона антирекламы с выбранным индексом класс пользователей, выше которого (включая его) этот шаблон не проверяется, командой !adver_setclass <индекс> <класс>. Непроверяемый класс для шаблона чата отдельно задаётся командой !adver_setclasschat <индекс> <класс>. Непроверяемый класс для шаблона привата отдельно задаётся командой !adver_setclasspm <индекс> <класс>. Непроверяемый класс для шаблона описания отдельно задаётся командой !adver_setclassdesc <индекс> <класс>. Непроверяемый класс для шаблона поиска отдельно задаётся командой !adver_setclasssr <индекс> <класс>. Если класс не указывается, то это значение для указанного индекса очищается.
Можно добавлять простые текстовые шаблоны антирекламы для чата, привата, поиска и описаний в файлы adverTableChat.txt, adverTablePM.txt, adverTableSR.txt и adverTableDesc.txt соответственно, которые находятся в папке плагина. Эти шаблоны загружаются при запуске плагина и располагаются по одному шаблону на каждой строке.
В файлах языковых локализаций плагина Text_lang.lua находится текст, который получит пользователь и операторы Хаба в случае срабатывания антирекламы. В файле Vars.lua находится константа adverBanType, в которой задаётся тип функции для бана (0 - бан по нику, 1 - полный бан). В некоторых локализациях эти типы равны.