Шаблон:Bots
С помощью этого шаблона можно сообщить боту, что он не должен трогать страницу. Это ограничение может распространяться на отдельных ботов.
Использование
[править код]Шаблон может использоваться в случаях, когда один или несколько ботов производят в статье очевидно некорректные правки, обусловленные ошибками в программном обеспечении или тому подобными причинами. Шаблон не должен использоваться для запрета правок, с которыми вы по какой-либо причинене согласны: в этом случае необходимо обсудить работу бота с его владельцем или вболее широком кругу участников. При каждом использовании шаблона вместе с ним должен быть вставлен комментарий типатакого, объясняющий проблему и указывающий, когда можно будет снять шаблон. Шаблоны без такого комментария могут быть удалены любым участником.
Пример
[править код]Правка ботами разрешена (по умолчанию)
{{bots}}или{{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, хотя в настройках можно установить игнорирование этих шаблонов.
- Желательно, чтобы боты с оригинальным исходным кодом также поддерживали эти шаблоны.
Примеры реализации
[править код]PHP
[править код]functionallowBots($text){global$user;if(preg_match('/\{\{(nobots|bots\|allow=none|bots\|deny=all|bots\|optout=all|bots\|deny=.*?'.preg_quote($user,'/').'.*?)\}\}/iS',$text)){returnfalse;}returntrue;}
Perl
[править код]suballowBots{my($text,$user,$opt)=@_;return0if$text=~ /{{[nN]obots}}/;return1if$text=~ /{{[bB]ots}}/;if($text=~ /{{[bB]ots\s*\|\s*allow\s*=\s*(.*?)\s*}}/s){return1if$1eq'all';return0if$1eq'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){return0if$1eq'all';return1if$1eq'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){return0if$1eq'all';my@opt=split(/\s*,\s*/,$1);return(grep$_eq$opt,@opt)?0:1;}return1;}
C#
[править код]publicstaticboolAllowBots(stringtext,stringuser){return!Regex.Match(text,@"\{\{(nobots|bots\|(allow=none|deny=.*?"+user.Normalize()+@".*?|optout=all|deny=all))\}\}",RegexOptions.IgnoreCase).Success;}
VB.NET
[править код]PublicSharedFunctionAllowBots(ByValtextAsString,ByValuserAsString)AsBooleanReturnNotRegex.IsMatch(text,"\{\{(nobots|bots\|(allow=none|deny=(?!none).*("&user.Normalize()&"|all)|optout=all))\}\}",RegexOptions.IgnoreCase)EndFunction
Java
[править код]publicstaticbooleanallowBots(Stringtext,Stringuser){return!text.matches("(?si).*\\{\\{(nobots|bots\\|(allow=none|deny=(.*?"+user+".*?|all)|optout=all))\\}\\}.*");}
JavaScript
[править код]functionallowBots(text,user){if(!newRegExp("\\{\\{\\s*(nobots|bots[^}]*)\\s*\\}\\}","i").test(text))returntrue;return(newRegExp("\\{\\{\\s*bots\\s*\\|\\s*deny\\s*=\\s*([^}]*,\\s*)*"+user+"\\s*(?=[,\\}])[^}]*\\s*\\}\\}","i").test(text))?false:newRegExp("\\{\\{\\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);}
Python
[править код]defallow_bots(text,user):returnnotre.search(r'\{\{(nobots|bots\|(allow=none|deny=.*?'+user+r'.*?|optout=all|deny=all))\}\}',text)
См. также
[править код]- {{nobots}} — аналогичный шаблон, но с отрицанием по умолчанию
Во избежание поломок страниц, использующих этот шаблон, экспериментируйте впесочнице(создать |зеркало) или своёмличном пространстве.
Пожалуйста, добавляйте категории на подстраницу/doc. Подстраницы этого шаблона.