Extension:AbuseFilter/RulesFormat/ru
From MediaWiki.org
Правила фильтра злоупотреблений пишутся на подобном C/Java/Perl языке.
Contents |
[edit] Литералы
Вы можете задать литералы, поместив их в кавычки (для строк), или набрав их как есть (для чисел с плавающей точкой и целых чисел). Вы можете использовать разрывы строк с помощью \n, символ табуляции с помощью \t, а также использовать символ кавычки с обратным слешем.
- Примеры
"Это строка" 'Это также строка' 'Эта строка\' также верная' "Эта строка\nИмеет перевод строки" 1234 1.234 -123
[edit] Переменные
Фильтр злоупотреблений передаёт парсеру различные переменные. Эти переменные можно получить, введя их имя в месте, где будут работать литералы. Вы можете просмотреть в журнале злоупотреблений переменные, связанные с каждым запросом.
- Примеры
USER_EDITCOUNT ARTICLE_RECENT_CONTRIBUTORS
Допустимые переменные действий — 'edit', 'move' или 'createaccount'. На 1 мая 2009 загрузки файлов полностью игнорируются фильтром злоупотреблений.
[edit] Все переменные
| Описание переименной | Наименование переменной | Variable values |
|---|---|---|
| Количество правок участников | user_editcount | |
| Имя учётной записи | user_name | |
| Время подтверждения адреса почты | user_emailconfirm | |
| Возраст учётной записи | user_age | |
| Группы (включая неявные) в которых состоит участник | user_groups | |
| ID страницы (можно найти в исходном коде странице — переменная wgArticleId) | article_articleid | |
| Пространство имён страницы | article_namespace | |
| Наименование страницы (без пространства имён) | article_text | |
| Полное наименование страницы | article_prefixedtext | |
| Уровень защиты страницы от редактирования | article_restrictions_edit | |
| Уровень защиты страницы от переименования | article_restrictions_move | |
| Последние десять участников, правивших эту страницу | article_recent_contributors | |
| Действие | action | edit, move, createaccount, delete |
| Описание правки/причина | summary | |
| Отметка правки как малой | minor_edit | |
| Старый викитекст страницы, до правки | old_wikitext | |
| Новый викитекст страницы, после правки | new_wikitext | |
| Дифф изменений, сделанных в правке | edit_diff | |
| Новый размер страницы | new_size | |
| Старый размер страницы | old_size | |
| Изменение размера в правке | edit_delta | |
| Строки, добавленные правкой | added_lines | |
| Строки, удалённые правкой | removed_lines | |
| Все внешние ссылки в новом тексте | all_links | |
| Ссылки на странице, перед правкой | old_links | |
| Все внешние ссылки, добавленные правкой | added_links | |
| Все внешние ссылки, удалённые правкой | removed_links | |
| Исходный HTML-код новой версии страницы | new_html | |
| Новый текст страницы без разметки | new_text | |
| old_html | ||
| old_text | ||
| Была ли правка сделана при помощи узла Tor | tor_exit_node | 0, 1 |
| Unix-время изменения | timestamp |
[edit] Сравнения
Вы можете сравнивать переменные с другими переменными и литералами, используя следующий синтаксис:
- < и > — возвращает true, если левый операнд соответственно меньше/больше, чем правый операнд.
- <= и >= — возвращает true, если левый операнд соответственно меньше или равен/больше или равен, чем правый операнд.
- == и != — возвращает true, если левый операнд соответственно равен/не равен правому операнду.
| Пример | Результат |
|---|---|
| 1 == 2 | False |
| 1 <= 2 | True |
| 1 >= 2 | False |
| 1 != 2 | True |
| 1 < 2 | True |
| 1 > 2 | False |
[edit] Арифметические действия
Вы можете использовать основные арифметические символы для выполнения арифметических операций над переменными и литералами, используя следующий синтаксис:
- - — вычесть правый операнд из левого оператора.
- + — прибавить правый операнд к левому операнду..
- * — умножить левый операнд на правый операнд.
- / — разделить левый операнд на правый операнд.
- ** — возвести левый операнд в степерь, определённую правым операндом.
- % — вернуть остаток при делении левого операнда на правый операнд.
| Пример | Результат |
|---|---|
| 1 + 1 | 2 |
| 2 * 2 | 4 |
| 1 / 2 | 0.5 |
| 9 ** 2 | 81 |
| 6 % 5 | 1 |
[edit] Ключевые слова
Ключевые слова включены для часто используемых функций
- like возвращает true, если левый операнд соответствует с правым операндом с glob.
- in возвращает true, если правый операнд (строка) содержит левый операнд.
- rlike и regex возвращает true, если левый операнд совпадает с регулярным выражением в правом операнде.
- Примеры
"1234" like "12?4"
Результат: True
"1234" like "12*"
Результат: True
"foo" in "foobar"
Результат: True
"foo" regex "\w+"
Результат: True
[edit] Функции
Некоторые встроенные функции включены для использования в обычных ситуациях. Они выполняются в формате имяФункции(арг1,арг2,арг3), и могут быть использованы вместо любог литерала или переменной. Аргументами могут быть литералы, переменные или другие функции.
- length возвращает длину строки, данной в первом аргументе.
- lcase возвращает первый аргумент, преобразованный в нижний регистр.
- ccnorm нормализует спорные/сходные символы в аргументе и возвращает каноническую форму.
- convert возвращает второй аргумент, преобразованный в языковой вариант, определённый в первом аргументе. Применимо ТОЛЬКО в вики с классом LanguageConverter. (новая функция, добавленная в rev:49399, необходима поддержка MediaWiki после rev:49397)
- rmdoubles удаляет повторяющиеся символы в аргументе и возвращает результат.
- rmwhitespace удаляет пробелы (пробелы, табуляции, новые строки)
- specialratio возвращает число не буквенно-цифровых сиволов, разделённое на количество символов в первом аргументе.
- rmspecials удаляет любые специальные символы в первом аргументе и возвращает результа.
- norm является эквивалентом rmwhitespace(rmspecials(rmdoubles(ccnorm(arg1)))).
- count возвращает количество игл (первая строка), появившихся в стоге сена (вторая строка). Если указан только один аргумент, разделяет его запятыми и возвращает количество сегментов.
- Примеры
length("Wikipedia")
Результат: 9
lcase("Wikipedia")
Результат: wikipedia
ccnorm("ωɨƙɩᑭƐƉlα")
Результат: W1K1PED1A
convert("zh-hant", "维基百科") // assume we work on a wiki with Chinese LanguageConverter class
Результат: 維基百科
rmdoubles( "foobybboo" )
Результат: fobybo
specialratio("Wikipedia!")
Результат: 0.1
norm( "!!ω..ɨ..ƙ..ɩ..ᑭᑭ..Ɛ.Ɖ@@l%%α!!" )
Результат: W1K1PED1A
count( "foo", "foofooboofoo" )
Результат: 3
count( "foo,bar,baz" )
Результат: 3
rmspecials( "FOOBAR!!1" )
Результат: FOOBAR1
[edit] Булевы операции
Вы можете вызвать срабатывание фильтра, если только все условия верны, одно или больше из условий является верным или только одно из условий является верным.
- x | y — ИЛИ – возвращает true, если одно или больше условий являются верными.
- x & y — И – возвращает true, если оба условия являются верными.
- x ^ y — ИСКЛЮЧАЮЩЕЕ ИЛИ – возвращает true, если только одно условие является верным.
- !x — НЕ – возвращает true, если условие неверно.
- Примеры
1 | 1
Результат: True
1 | 0
Результат: True
0 | 0
Результат: False
1 & 1
Результат: True
1 & 0
Результат: False
0 & 0
Результат: False
1 ^ 1
Результат: False
1 ^ 0
Результат: True
0 ^ 0
Результат: False
!1
Результат: False
[edit] Порядок операций
Обычно операции выполняются слева направо, но существует порядок, в котором они будут исполнены. Когда расширение не может проверить одно из условий фильтра, оно останавливает проверку остальных и переходит к следующему фильтру. Порядок вычисления:
- Всё, окружённое скобками (( and )) оценивается как одна едииница.
- Касающееся переменных/литерал и их данных (например, article_namespace к 0)
- Вызовы функций (norm, lcase, и т. д.)
- Унарные + и - (например, -1234, +1234)
- Ключевые слова
- Булева инверсия (!x)
- Возведение в степень (2**3 > 8)
- Действия, связанные с умножением (multiplication, division, modulo)
- Сравнения (<, >, ==)
- Булевы операции (&, |, ^, in)