{{i}} Документація шаблону[перегляд] [редагувати] [історія] [очистити кеш]

Ці шаблони повідомляють ботам та іншим автоматизованим інструментам редагування і скриптам, що вони повинні або не повинні редагувати сторінку, яка містить такий шаблон. Ці шаблони можна використовувати, щоб блокувати більшість ботів (усіх ботів, які впровадили цей функціонал), або якихось конкретних ботів, ввівши у відповідний параметр назву бота чи його функцію. Наприклад, цими шаблонами можна користуватись, щоб увімкнути або вимкнути сповіщення від ботів на СО користувача, або щоб змусити ботів, які займаються впорядкуванням, уникати певних сторінок. Ці шаблони слід обережно використовувати за межами простору користувача, щоб уникнути випадкового блокування корисних редагувань від ботів.

Чіткий дозвіл для редагувань ботів має ту перевагу, що можна отримувати корисні зміни чи цільові сповіщення, які в іншому разі бот міг пропустити, відповідно до стандартних налаштувань. Користувачам слід пам'ятати, що відмовляючись від повідомлень від ботів, вони не отримуватимуть від них сповіщень про певні справи, пов'язані з матеріалом, який ці користувачі редагували чи завантажили, який сканується й опрацьовується ботами згідно з відповідними правилами.

Зокрема в енциклопедичних просторах назв:

  • Уникайте використання цього шаблону як грубого інструмента
  • Глибинну проблему вирішуйте за допомогою звернення до ботовласника чи представників спільноти, що займаються ботами
  • Вилучіть цей шаблон зі сторінки, як тільки проблему буде вирішено.

Важливі зауваги

Більшість ботів НЕ розумітиме цих шаблонів, якщо вони включені на сторінку непрямо. Наприклад, якщо помістити цей шаблон у {{Користувач помер}}, він намагатиметься включити {{nobots}} на ті сторінки, на яких він сам використовується, однак бот, який користується регулярними виразами для парсингу тексту відповідної сторінки, не помітить цього непрямо включеного шаблону.

Більшість ботів не ігноруватимуть цей шаблон, якщо він поміщений у теги <nowiki> ... </nowiki>. Наприклад, якщо Ви обговорюєте шаблони з іншим редактором, будь ласка, використовуйте шаблон {{tl}}, напр., {{tl|nobots}}, який у результаті даватиме {{nobots}}, тоді як код <nowiki>{{nobots}}</nowiki> боти можуть розпізнати як такий, ціллю якого є заборона редагувань для ботів на відповідній сторінці.

Цей шаблон не має впливу на масові повідомлення. Щоб відмовитись від отримання таких повідомлень, додайте на свою сторінку обговорення категорію Категорія:Відмова від доставки повідомлень.

Синтаксис

{{nobots}}                Блокувати всіх відповідних ботів (короткий варіант)
{{bots}}                  Дозволити всіх ботів (короткий варіант)
{{bots|allow=<botlist>}}  Блокувати всіх відповідних ботів, яких немає в списку
{{bots|deny=<botlist>}}   Блокувати всіх відповідних ботів зі списку
Де <botlist> — це рядок назв ботів, відокремлених комами (AWB можна використовувати для всіх ботів, базованих на AWB):
  {{bots|allow=HagermanBot,Werdnabot}}
  {{bots|deny=AWB}}
<botlist> також можна надавати значення «none» або «all», як у поданих прикладах:
  {{bots|allow=all}}      Дозволити всіх ботів
  {{bots|allow=none}}     Блокувати всіх відповідних ботів
  {{bots|deny=all}}       Блокувати всіх відповідних ботів
  {{bots|deny=none}}      Дозволити всіх ботів

Боти не зобов'язані за замовчуванням розпізнавати шаблони на кшталт {{nobots}}; це залежатиме від їхнього функціоналу, їхніх власників та умов затвердження статусу бота.

Неправильний синтаксис

Цей синтаксис виглядає наче й правильно, але залежно від окремих ботів, може не мати належного впливу. Такий код може взагалі не заблокувати ані першого, ані другого бота, може заблокувати лише одного з них, а в деяких випадках може спрацювати так, як задумано, й заблокувати обох.

{{bots|deny=Bot1|deny=Bot2}} НЕПРАВИЛЬНО

Натомість використовуйте такий запис:

{{bots|deny=Bot1,Bot2}}      ПРАВИЛЬНО

Відмова від отримання повідомлень на СО

Іншою опцією є відмова від конкретних типів повідомлень для користувачів, які хочуть отримувати сповіщення про одні проблеми, але не отримувати їх про інші. Користувачам слід пам'ятати, що відмовляючись від конкретних повідомлень, вони не отримуватимуть сповіщень про певні справи, пов'язані з матеріалом, який вони редагували чи завантажили, які надсилаються згідно з відповідними правилами. Згодом можуть бути виконані дії (такі як вилучення тексту чи зображень) без додаткового повідомлення Вас про це. Використовуючи цей шаблон на власній сторінці обговорення, Ви висловлюєте згоду на прийняття таких наслідків. Використання цього шаблону на чужій сторінці обговорення користувача розцінюватиметься як акт вандалізму. Всім ботам і скриптам, які залишають повідомлення на сторінках обговорення користувачів, рекомендовано додати цей функціонал.

Додаючи цей шаблон на власну сторінку обговорення, користувач все ще отримуватиме повідомлення від ботів чи скриптів, які не прописали цей функціонал у своєму коді, а також від людей, які додають такі шаблонні повідомлення вручну.

Примітка: ці функції можуть не працювати (і швидше за все, таки не працюють) в українській Вікіпедії, оскільки відсутні відповідні шаблони для сповіщення користувачів, а також боти, які розсилають наявні шаблонні повідомлення, можуть не мати відповідних налаштувань і не розпізнаватимуть цей код на СО користувачів.
{{bots|optout=all}}            Відмова від усіх повідомлень (див. обмеження нижче).
{{bots|optout=nosource}}       Відмова від повідомлень про відсутність джерела файлу.
{{bots|optout=nolicense}}      Відмова від повідомлень про відсутність ліцензії.
{{bots|optout=orfud}}          Відмова від повідомлень про файл, який не використовується, маючи {{ОДВ}}.
{{bots|optout=npd}}            Відмова від повідомлень про відсутність дозволу.
{{bots|optout=norationale}}    Відмова від повідомлень про відсутність {{ОДВ}}.
{{bots|optout=replaceable}}    Відмова від повідомлень про можливість вільної заміни невільного файлу.
{{bots|optout=bettersource}}   Відмова від повідомлень про необхідність кращого джерела файлу.
{{bots|optout=afd}}            Відмова від повідомлень про номінування статей на вилучення, чи їхніх різновидів.
{{bots|optout=ifd}}            Відмова від повідомлень про номінування зображень на вилучення, чи їхніх різновидів.
{{bots|optout=prod}}           Відмова від повідомлень про попередження щодо пропонованого вилучення.

Елементи можна об'єднувати в одному параметрі, відокремлюючи їх комами:

{{bots|optout=nosource,nolicense}}                 Відмова від повідомлень про відсутність джерела та ліцензії.
{{bots|optout=orfud,norationale,replaceable}}      Відмова від повідомлень, які стосуються наявності {{ОДВ}}.

Обмеження відмови від повідомлень

Від отримання деяких повідомлень на СО не можна відмовлятися. До таких належать:

  1. Сповіщення про порушення авторських прав
  2. Сповіщення про вандалізм та інші повідомлення-попередження.
  3. Повідомлення, що надсилаються користувачам за допомогою розширення MassMessage (щоб відмовитись від отримання масових повідомлень, додайте Категорія:Відмова від доставки повідомлень на свою сторінку обговорення)

Впровадження

  • Pywikibot підтримує {{bots}} і {{nobots}}, починаючи з r4096. Шаблони можна ігнорувати, використовуючи параметр.
  • Починаючи з версії 3.2.0.0 AutoWikiBrowser має повну підтримку {{bots}} та {{nobots}}. Крім того, псевдоім'я користувача AWB можна використовувати у відповідному параметрі цього шаблону, щоб блокувати доступ до певної сторінки для всіх ботів, заснованих на AWB. Проте AWB має опцію, що дає змогу ігнорувати ці шаблони.
  • Опція для відмови від повідомлень на СО з'явилася 3 квітня 2008 року. Застосування для окремих ботів чи скриптів варіюватиметься, і деякі з них можуть взагалі не мати такого функціоналу.

Приклади впровадження

PHP

function allowBots( $text ) {
    global $user;
    if (preg_match('/\{\{(nobots|bots\|allow=none|bots\|deny=all|bots\|optout=all|bots\|deny=.*?'.preg_quote($user,'/').'.*?)\}\}/iS',$text))
      return false;
    if (preg_match('/\{\{(bots\|allow=all|bots\|allow=.*?'.preg_quote($user,'/').'.*?)\}\}/iS', $text))
      return true;
    if (preg_match('/\{\{(bots\|allow=.*?)\}\}/iS', $text))
      return false;
    return true;
}

Perl

sub allow_bots {
    my($text, $user, $opt) = @_;
    return 0 if $text =~ /{{[nN]obots}}/;
    return 1 if $text =~ /{{[bB]ots}}/;
    if($text =~ /\{\{[bB]ots\s*\|\s*allow\s*=\s*(.*?)\s*}}/s){
        return 1 if $1 eq 'all';
        return 0 if $1 eq 'none';
        my @bots = split(/\s*,\s*/, $1);
        return (grep $_ eq $user, @bots) ? 1 : 0;
    }
    if($text =~ /\{\{[bB]ots\s*\|\s*deny\s*=\s*(.*?)\s*}}/s){
        return 0 if $1 eq 'all';
        return 1 if $1 eq 'none';
        my @bots = split(/\s*,\s*/, $1);
        return (grep $_ eq $user, @bots) ? 0 : 1;
    }
    if(defined($opt) && $text =~ /\{\{[bB]ots\s*\|\s*optout\s*=\s*(.*?)\s*}}/s){
        return 0 if $1 eq 'all';
        my @opt = split(/\s*,\s*/, $1);
        return (grep $_ eq $opt, @opt) ? 0 : 1;
    }
    return 1;
}

VB.NET

Public Shared Function AllowBots(ByVal text As String, ByVal user As String) As Boolean
    Return Not Regex.IsMatch(text, "\{\{(nobots|bots\|(allow=none|deny=(?!none).*(" & user.Normalize() & "|all)|optout=all))\}\}", RegexOptions.IgnoreCase)
End Function

C#

public static bool AllowBots(string text, string user)
{
    return !Regex.IsMatch(text, @"\{\{(nobots|bots\|(allow=none|deny=(?!none).*(" + user.Normalize() + @".*|all)|optout=all))\}\}", RegexOptions.IgnoreCase);
}

Java

public static boolean allowBots(String text, String user)
{
      return !text.matches("(?si).*\\{\\{(nobots|bots\\|(allow=none|deny=([^\\}]*?" + user + "[^\\}]*?|all)|optout=all))\\}\\}.*");
}

JavaScript

function allowBots(text, user){
  if (!new RegExp("\\{\\{\\s*(nobots|bots[^}]*)\\s*\\}\\}", "i").test(text)) return true;
  return (new RegExp("\\{\\{\\s*bots\\s*\\|\\s*deny\\s*=\\s*([^}]*,\\s*)*" + user.replace(/([\(\)\*\+\?\.\-\:\!\=\/\^\$])/g, "\\$1") + "\\s*(?=[,\\}])[^}]*\\s*\\}\\}", "i").test(text)) ? false : new RegExp("\\{\\{\\s*((?!nobots)|bots(\\s*\\|\\s*allow\\s*=\\s*((?!none)|([^}]*,\\s*)*" + user.replace(/([\(\)\*\+\?\.\-\:\!\=\/\^\$])/g, "\\$1") + "\\s*(?=[,\\}])[^}]*|all))?|bots\\s*\\|\\s*deny\\s*=\\s*(?!all)[^}]*|bots\\s*\\|\\s*optout=(?!all)[^}]*)\\s*\\}\\}", "i").test(text);
}

Python

Цей код припускає, що бібліотеку mwparserfromhell встановлено й імпортовано в поточний скрипт.

def allow_bots(text, user):
	user = user.lower().strip()
	text = mwparserfromhell.parse(text)
	for tl in text.filter_templates():
		if tl.name.matches(['bots', 'nobots']):
			break
	else:
		return True
	for param in tl.params:
		bots = [x.lower().strip() for x in param.value.split(",")]
		if param.name == 'allow':
			if ''.join(bots) == 'none': return False
			for bot in bots:
				if bot in (user, 'all'):
					return True
		elif param.name == 'deny':
			if ''.join(bots) == 'none': return True
			for bot in bots:
				if bot in (user, 'all'):
					return False
	if (tl.name.matches('nobots') and len(tl.params) == 0):
		return False
	return True

Див. також