قالب:Bots

من ويكيبيديا، الموسوعة الحرة
(بالتحويل من قالب:بوتات)
اذهب إلى: تصفح، ‏ ابحث
Symbol redirect vote2.svg
تحويلات:

These templates tell ويكيبيديا:بوت and other automated editing tools and scripts that they either should or should not edit a page that has the template. The templates can be used to block most bots (all bots that have implemented this functionality) or specific bots by name or function. For example, this can be used to opt-in or opt-out from user talk bot messages or to cause maintenance bots to avoid certain pages. These templates should be used carefully outside userspace to avoid blocking useful bot edits.

Explicitly opting-in has the advantage of receiving useful changes or targeted posts a bot might otherwise skip by following "opt-out" behavior by default. Users should be aware that by opting-out of bot posts, they will not be notified of matters relating to material they have edited or uploaded, which are tagged or scanned by bots per policy.

In particular, in the encyclopedia spaces:

  • Avoid using the template as a blunt instrument
  • Address the root problem with the bot owner or bot community
  • Remove the template tag once the underlying problem has been resolved.

Important notes[عدل]

Most bots will NOT understand these templates when they are indirectly transcluded. For example, the {{Deceased Wikipedian}} template attempts to transclude {{nobots}} into the pages on which it is used, but a bot that is using regex to parse the text of the page will not notice that template.

Most bots will not disregard the template if it is inside of <nowiki> ... </nowiki> tags. For example, if you are discussing the templates with another editor, please use the {{tl}} template, e.g. {{قا|nobots}}, which will show {{nobots}}, rather than <nowiki>{{بوتات}}</nowiki>, which will possibly be parsed as intending to ban bots from the page.

Syntax:[عدل]

{{بوتات}}                Ban all compliant bots (shortcut)
{{بوتات}}                  Allow all bots (shortcut)
{{بوتات|allow=<botlist>}}  Ban all compliant bots not in the list
{{بوتات|deny=<botlist>}}   Ban all compliant bots in the list
Where <botlist> is a comma-delimited string of bot usernames (AWB can be used for all ويكيبيديا:أوتوويكي براوزر-based bots):
  {{بوتات|allow=HagermanBot,Werdnabot}}
  {{بوتات|deny=AWB}}
<botlist> can also be "none" or "all" as in the following examples:
  {{بوتات|allow=all}}      Allow all bots
  {{بوتات|allow=none}}     Ban all compliant bots
  {{بوتات|deny=all}}       Ban all compliant bots
  {{بوتات|deny=none}}      Allow all bots

Bots are not bound to observe the nobots template; it will depend on their functionality, their owners and their terms of approval. The bots that currently support exclusion are listed at exclusion compliant bots.

Incorrect syntax[عدل]

This syntax looks correct, but depending on the individual bot may not have the intended effect. This statement may deny neither Bot1 nor Bot2, only one of the two bots, or both bots as intended.

{{بوتات|deny=Bot1|deny=Bot2}} INCORRECT

Instead, write:

{{بوتات|deny=Bot1,Bot2}}      CORRECT

Message notification opt out[عدل]

Another option is to opt out-of specific types of messages for users who wish to be notified of certain problems, but not others. Users should be aware that by opting-out of specific notification posts, they will not be notified of matters relating to material they have edited or uploaded, which are tagged per policy. Actions (such as deletion) may be executed without you being notified as a result. By applying this to your own user talk page, you agree to this consequence. Applying this to a user talk page other than your own will be considered vandalism. All bots and scripts that leave messages on a user's talk page are encouraged to add this capability.

By adding this to a user's talk page, a user may still receive these messages by non-compliant bots or scripts, or humans who add the tag manually.

{{بوتات|optout=all}}            يلغي جميع الرسائل (see limitations below).
{{بوتات|optout=nosource}}       يلغي قالب:مصدر الصورة رسائل.
{{بوتات|optout=nolicense}}      يلغي قالب:حقوق الصورة رسائل.
{{بوتات|optout=orfud}}          يلغي orphaned fair use رسائل.
{{بوتات|optout=npd}}            يلغي no permission رسائل.
{{بوتات|optout=norationale}}    يلغي no rationale رسائل.
{{بوتات|optout=replaceable}}    يلغي replaceable fair use رسائل.
{{بوتات|optout=bettersource}}   يلغي better source request رسائل.
{{بوتات|optout=afd}}            يلغي قالب:تنبيه حذف رسائل or قالب:تنبيه حذف قالب:تنبيه حذف.
{{بوتات|optout=ifd}}            يلغي images for deletion رسائل or variant.
{{بوتات|optout=prod}}           يلغي prod warning رسائل or variant.

Items can be combined by putting a comma between options

{{بوتات|optout=nosource,nolicense}}                 يلغي no source, and no license رسائل.
{{بوتات|optout=orfud,norationale,replaceable}}      يلغي fair use رسائل.

Restrictions of messages that can be opted out[عدل]

Some message notifications are not allowed to be opted out. These include (but are not limited to):

  1. Copyright violation notifications
  2. Vandalism (and other) warning notices.
  3. Any message tag that isn't included as a way of opting out above. (Is there one that should be included? Leave a message on the talk page.)

Implementation[عدل]

  • Pywikipediabot supports bots and nobots since r4096. The templates may be ignored using a parameter.
  • Since version 3.2.0.0 ويكيبيديا:أوتوويكي براوزر fully supports {{بوتات}} and {{بوتات}}. Additionally, pseudo-username AWB can be specified to ban all AWB-based bots from the page. However, AWB has an option to ignore these templates.
  • Opt out message notification was introduced here April 3, 2008. Individual bot/script implementation will vary and notice above of implementation may not include this feature.

Example implementations[عدل]

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[عدل]

This code assumes that the mwparserfromhell library was installed and imported in the current script.

def allow_bots(text, user):
    text = mwparserfromhell.parse(text)
    for tl in text.filter_templates():
        if tl.name in ('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
    return False

See also[عدل]