Шаблон:Bots

Документация

С помощью этого шаблона можно сообщить боту, что он не должен трогать страницу. Это ограничение может распространяться на отдельных ботов.

Шаблон может использоваться в случаях, когда какой-либо бот или класс ботов производят в статье очевидно некорректные правки, обусловленные ошибками в программном обеспечении или тому подобными причинами. Шаблон не должен использоваться для запрета правок, с которыми вы по какой-либо причине не согласны — в этом случае сначала необходимо обсудить работу бота с его владельцем или в более широком кругу участников. При каждом использовании шаблона вместе с ним должен быть вставлен комментарий типа [1], объясняющий проблему и указывающий, когда можно будет снять шаблон. Шаблоны без такого комментария могут быть удалены любым участником. Данные требования не распространяются на личное пространство.

Пример

[править код]

Правка ботами разрешена (по умолчанию)

{{bots|allow=all}} 

Запрет правки ботами

{{nobots}}  или  {{bots|allow=none}} 

Запрет или разрешение правки отдельными ботами

{{bots|deny=BotName1,BotName2,…}} {{bots|allow=BotName1,BotName2,…}} 

Название AWB указывает на запрет или разрешение правок всем ботам на базе AutoWikiBrowser. Пример:

{{bots|allow=BotName1, BotName2}} {{bots|deny=AWB}}

Поддержка шаблона

[править код]
  • Pywikipediabot поддерживает шаблоны {{bots}} и {{nobots}} с версии r4096, но имеет возможность игнорирования блокировки.
  • AutoWikiBrowser полностью поддерживает шаблоны {{bots}} и {{nobots}} с версии 3.2, хотя в настройках можно установить игнорирование этих шаблонов.
  • Желательно, чтобы боты с оригинальным исходным кодом также поддерживали эти шаблоны.

Примеры реализации

[править код]
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; }     return true; } 
sub allowBots {     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; } 
public static bool AllowBots(string text, string user) {     return !Regex.Match(text, @"\{\{(nobots|bots\|(allow=none|deny=.*?" + user.Normalize() + @".*?|optout=all|deny=all))\}\}", RegexOptions.IgnoreCase).Success; } 


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 
public static boolean allowBots(String text, String user) {       return !text.matches("(?si).*\\{\\{(nobots|bots\\|(allow=none|deny=(.*?" + user + ".*?|all)|optout=all))\\}\\}.*"); } 
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+"\\s*(?=[,\\}])[^}]*\\s*\\}\\}", "i").test(text)) ? false : new RegExp("\\{\\{\\s*((?!nobots)|bots(\\s*\\|\\s*allow\\s*=\\s*((?!none)|([^}]*,\\s*)*"+user+"\\s*(?=[,\\}])[^}]*|all))?|bots\\s*\\|\\s*deny\\s*=\\s*(?!all)[^}]*|bots\\s*\\|\\s*optout=(?!all)[^}]*)\\s*\\}\\}", "i").test(text); } 
def allow_bots(text, user):     return not re.search(r'\{\{(nobots|bots\|(allow=none|deny=.*?' + user + r'.*?|optout=all|deny=all))\}\}', text) 

См. также

[править код]
  • {{nobots}}