跳转到内容

模板:Bots/doc

维基百科,自由的百科全书

此页面是为用户解释有关于如何允许或排除机器人对页面的浏览访问并留下讯息,相关的指令非常容易理解,因下有范例在此不赘述。这类模板适用于用户页或其讨论页当中(即以“User:”或“User_talk:”这2个命名空间开首的页面),在用户空间之外请小心使用,以避免阻止有用的机器人编辑。对于机器人管理者,建议阁下遵从页面中{{bots}}及{{nobots}}的指示。

用户须意识到透过选择排除来自机器人的通知,根据他们所选择的标签,机器人将不会被通知有关他们已编辑或上传资料的讯息(如版权问题、条目DYK等讯息)。

对于百科条目空间,尤其注意:

  • 小心模板作用范围过大,带来副作用;
  • 应用于处置机器人持有者或机器人社群的根本问题;
  • 一旦相关问题解决,请移除模板标签。

机器人语法

[编辑]
  • {{nobots}} 封锁所有的机器人账户访问
  • {{bots}} 允许所有机器人账户访问
  • {{bots|allow=<botlist>}} 封锁所有列表指定之外的机器人账户
  • {{bots|deny=<botlist>}} 封锁列表指定之所有机器人账户

以下指令使用于过滤指定用户名的机器人账户(以半形逗号作间隔),另关键字“AWB”可以过滤所有使用维基自动浏览器的机器人:

  • {{bots|allow=HagermanBot,Werdnabot}}
  • {{bots|deny=AWB}}

<botlist> 可以透过 "none" or "all" 选项允许/封锁机器人访问,如下:

  • {{bots|allow=all}} 允许所有机器人账户访问
  • {{bots|allow=none}} 封锁所有的机器人账户访问
  • {{bots|deny=all}} 封锁所有的机器人账户访问
  • {{bots|deny=none}} 允许所有机器人账户访问

但须注意的是,由于机器人在它们创建时不是为了不通知用户,因此并非所有机器人会遵守以上标签,这取决于机器人程序的相关设定。

排除所有机器人通知

[编辑]

另外一种排除通知法是按通知种类而过滤,当用户套用至个人用户页面时,相关类型的停滞将会被过滤,当用户套用以下模板就代表其同意本模板使用原则。但如果用在非其个人用户页面放置以下模板将会被视为破坏

使用这种选择性排除的方法,用户将不会受到来自机器人的负面通知,但透过人工编辑的负面通知/警告将在排除范围之外。


以上选项可透过逗号间隔相加使用,例如:

  • {{bots|optout=nosource,nolicense}} 过滤所有机器人所发出有关上传资料缺乏来源以及缺乏授权的通知
  • {{bots|optout=orfud,norationale,replaceable}} 过滤所有机器人所发出有关上传资料合理使用的通知

限制

[编辑]

有些通知不能以此模板排除,此类通知包括但不限于:

  1. 违反版权的通知
  2. 破坏(及类似行为)的通知
  3. 任何不含上方标签的通知(有任何被遗忘的通知标签?请于讨论页告诉我们。;])

置入使用

[编辑]
  • Pywikipediabot于r4096后支持{{bots}}及{{nobots}},然而可用参数将其忽略。
  • 自动维基浏览器由3.2.0.0起完全支持{{bots}}及{{nobots}}。另外,将用户名设置为awb可以拒绝所有自动维基浏览器机器人。自动维基浏览器亦有选项可忽略这些模板。

范例

[编辑]

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 =~ /{{nob[o]ts}}/;
    return 1 if $text =~ /{{b[o]ts}}/;
    if($text =~ /{{bots\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 =~ /{{bots\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 =~ /{{bots\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.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 !Regex.Match(text, "\\{\\{(nobots|bots\\|(allow=none|deny=(.*?" + user.Normalize() + ".*?|all)|optout=all))\\}\\}", RegexOptions.IgnoreCase).Success;
}

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

参见

[编辑]