Através desta predefinição especifica-se visitas aceites ou não de robôs, todos robôs, ou robôs específicos. Ela pode ser usada para especificar fácilmente e explicitamente se optamos a favor ou contra alterações não solicitadas realizadas por robôs. Esta predefinição pode ser usada em qualquer lugar, como páginas de usuário, para afastar robôs de manutenção. Optar contra edições não solicitadas possui a vantagem de receber edições úteis, ou instruções específicas que poderiam ser ignoradas por algum robô assumindo a opção padrão de rejeição. Estas predefinições devem ser usadas principalmente nos espaços nominais "Usuário" e "Usuário Discussão", e com cuidado extremo em outros espaços.

Usuários devem estar atentos que ao optar contra, eles não vão receber instruções relacionadas ao material que eles editaram ou introduziram, que são marcados ou examinados por robôs de acordo com regras e políticas da Wikipedia.

Em particular, nos espaços enciclopédicos:

  • Evite utilizar a predefinição como um instrumento de bloqueio
  • Resolva a raiz do problema com o operador do robô ou com a comunidade
  • Remova a predefinição uma vez que o problema subjacente tenha sido resolvido.

Sintaxe editar

{{nobots}}                      Bane todos robôs obedientes (atalho)
{{bots}}                        Permite todos robôs (atalho)
{{bots|allow=<lista robôs>}}    Permite todos robôs obedientes na lista
{{bots|deny=<lista robôs>}}     Bane todos robôs obedientes na lista
Onde <lista robôs> é uma lista de nomes de usuário de robôs, separados por vírgulas (AWB pode ser usado para todos robôs baseados no AWB):
  {{bots|allow=HagermanBot,Werdnabot}}
  {{bots|deny=AWB}}
<lista robôs> também pode ser "nenhum" ou "todos", seguem os exemplos:
  {{bots|allow=all}}            Permite todos robôs obedientes
  {{bots|allow=none}}           Bane todos robôs obedientes
  {{bots|deny=all}}             Bane todos robôs obedientes na lista
  {{bots|deny=none}}            Permite todos robôs obedientes na lista

Robôs não são obrigados a obedecer às marcações de robôs, isto vai depender de seus recursos e funções, seus operadores e seus termos de aprovação. Os robôs que obedecem estão listados em robôs que obedecem exclusão.

Sintaxe incorreta editar

Este sintaxe parece correto, mas dependendo do tipo de robô que está operando pode não ter o efeito pretendido. A afirmação que segue não bane nem o robô 1 nem o robô 2, apenas um dos dois robôs, ou ambos os robôs como era pretendido.

{{bots|deny=Bot1|deny=Bot2}}   INCORRETO

A maneira correta para negar ambos robôs, e assim:

{{bots|deny=Bot1,Bot2}}        CORRETO

Exclusão de notificações editar

Outra opção é optar contra tipos específicos de mensagens, para usuários que gostariam de não ser notificados sobre determinados problemas, mas sim outros. Os usuários devem entender que ao excluírem-se de mensagens e instruções específicas, eles não serão notificados sobre assuntos pertinentes às suas edições ou carregamentos, que são marcados de acordo com regras e políticas. Ações (como eliminação) podem ser executadas sem que esse usuário seja notificado do resultado. Ao aplicar a exclusão de certo tipo de robôs à sua página de discussão de usuário, o usuário aceita essas consequências. Ao aplicar a exclusão de robôs numa página de discussão de usuário alheia, essa ação será considerada vandalismo. Todos os robôs e roteiros que deixam mensagens numa PDU são fortemente encorajados a adicionar esta capacidade.

Ao adicionar isto numa página de discussão de usuário, o usuário ainda receberá mensagens de robôs desobedientes, ou humanos que o fizerem manualmente.

{{bots|optout=all}}            Cancelar todas mensagens (ver limitações abaixo).
{{bots|optout=nosource}}       Cancelar mensagens de ficheiro sem fontes.
{{bots|optout=nolicense}}      Cancelar mensagens de ficheiro sem licença.
{{bots|optout=orfud}}          Cancelar mensagens de ficheiro orfão sem uso razoável.
{{bots|optout=norationale}}    Cancelar mensagens de sem raciocínio.
{{bots|optout=replaceable}}    Cancelar mensagens de substituir uso razoável.
{{bots|optout=bettersource}}   Cancelar mensagens de aviso para melhorar a fonte.
{{bots|optout=afd}}            Cancelar mensagens de artigos para eliminação ou variante e formulários.
{{bots|optout=ifd}}            Cancelar mensagens de ficheiro proposto para eliminação ou variante.
{{bots|optout=prod}}           Cancelar mensagens de aviso de eliminação ou variante.

Os itens podem ser combinados ao separados com vírgulas

{{bots|optout=nosource,nolicense}}                 Cancelar mensagens de sem fontes, e sem licença.
{{bots|optout=orfud,norationale,replaceable}}      Cancelar mensagens de uso razoável.

Restrições sobre mensagens que podem ser canceladas editar

Algumas notificações não podem ser canceladas. Estas incluem, mas não se limitam a:

  1. Notificações de violação dos direitos de autor
  2. Avisos de vandalismo (e correlacionadas)
  3. Qualquer mensagem que não se enquadre nos exemplos acima. (Faltou algum? Deixa um aviso na página de discussão)

Implementação editar

  • Pywikipediabot suporta {{bots}} e {{nobots}} desde a revisão 4096. Estas predefinições podem ser ignoradas usando um parâmetro.
  • Desde a versão 3.2.0.0, o AutoWikiBrowser suporta totalmente {{bots}} e {{nobots}}. Além disso, o pseudônimo AWB pode ser especificado para banir todos os robôs baseados no AWB de uma página. No entando, o AWB possui uma opção para ignorar estas predefinições.
  • Cancelar a notificação de mensagens se tornou possível em 03 de abril de 2008. Implementações específicas de robô/roteiro variam, e mesmo o aviso de implementação pode não cobrir todas as funções destes recursos.

Exemplo de implementações editar

PHP editar

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 editar

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 editar

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# editar

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 editar

public static boolean allowBots(String text, String user)
{
      return !text.matches("(?si).*\\{\\{(nobots|bots\\|(allow=none|deny=(.*?" + user + ".*?|all)|optout=all))\\}\\}.*");
}

JavaScript editar

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 editar

Este código assume que a biblioteca mwparserfromhell foi instalado e importados no script atual.

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

Ver também editar