Predefinição:Bots/doc

Origem: Wikipédia, a enciclopédia livre.

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 código-fonte]

{{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 código-fonte]

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 código-fonte]

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 código-fonte]

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 código-fonte]

  • 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 código-fonte]

PHP[editar código-fonte]

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 código-fonte]

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 código-fonte]

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 código-fonte]

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 código-fonte]

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

JavaScript[editar código-fonte]

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 código-fonte]

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 código-fonte]