Шаблон: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
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; }
Perl
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; }
C#
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; }
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
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+"\\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); }
Python
def Allowbots(text, user): if (re.search(r'\{\{(nobots|bots\|(allow=none|deny=.*?' + user + r'.*?|optout=all|deny=all))\}\}', text)): return false return true
См. также
- {{nobots}}
Во избежание поломок страниц, использующих данный шаблон, желательно экспериментировать в своём личном пространстве.