Las plantillas de Bots y Nobots les dicen a los bots y otras herramientas y scripts de edición automatizada que deben o no deben editar una página que tiene la plantilla. Las plantillas se pueden usar para bloquear la mayoría de los bots (todos los bots que han implementado esta funcionalidad) o bots específicos por nombre o función. Por ejemplo, esto se puede usar para optar por participar o no recibir mensajes de bots de conversación de usuarios o para hacer que los bots de mantenimiento eviten ciertas páginas. Estas plantillas deben usarse con cuidado fuera del espacio de usuario para evitar bloquear ediciones útiles de bot.
La suscripción explícita tiene la ventaja de recibir cambios útiles o publicaciones específicas que un bot podría omitir si sigue el comportamiento de "exclusión voluntaria" de forma predeterminada. Los usuarios deben tener en cuenta que al optar por no recibir publicaciones de bots, no se les notificará sobre asuntos relacionados con el material que han editado o subido, que son etiquetados o escaneados por bots según la política.
En particular, en los espacios de la enciclopedia:
- Evite usar la plantilla como un instrumento contundente
- Aborde el problema raíz con el propietario del bot o la comunidad de bot
- Quite la etiqueta de la plantilla una vez que se haya resuelto el problema subyacente.
Notas importantes
La mayoría de los bots NO entenderán estas plantillas cuando se trasladen indirectamente.
La mayoría de los bots no ignorarán la plantilla si está dentro de las etiquetas {{tl|nobots}}
, Que mostrará {{ nobots }}, en lugar de
, que posiblemente se analizará como la intención de prohibir bots de la página. .
Una lista de transclusiones está en Usuario: AnomieBOT / Nobots Hall of Shame
Sintaxis
{{nobots}} Prohibir todos los bots compatibles (atajo que no toma parámetros) {{bots}} Permitir todos los bots (atajo que no toma parámetros)
{{bots | allow =}} Prohibir todos los bots compatibles que no estén en la lista {{bots | deny =}} Prohibir todos los bots compatibles en la lista
Dondees una cadena delimitada por comas de nombres de usuario de bot (AWB se puede usar para todos los bots basados en AWB ): {{bots | allow = SineBot, Legobot}} {{bots | deny = AWB}}
también puede ser "none" o "all" como en los siguientes ejemplos: {{bots | allow = all}} Permitir todos los bots {{bots | allow = none}} Prohibir todos los bots compatibles
{{bots | deny = all}} Prohibir todos los bots compatibles {{bots | deny = none}} Permitir todos los bots
Los bots no están obligados a seguir la plantilla de los nobots; dependerá de su funcionalidad, sus propietarios y sus términos de aprobación. Los bots que actualmente admiten la exclusión se enumeran en bots compatibles con la exclusión .
Sintaxis incorrecta
Esta sintaxis parece correcta, pero dependiendo del bot individual puede que no tenga el efecto deseado. Esta declaración no puede negar ni Bot1 ni Bot2, solo uno de los dos bots, o ambos bots según lo previsto.
{{bots | deny = Bot1 | deny = Bot2}} INCORRECTO
En su lugar, escribe:
{{bots | deny = Bot1, Bot2}} CORRECTO
Exclusión de notificación de mensajes
Otra opción es optar por no recibir tipos específicos de mensajes para los usuarios que desean ser notificados de ciertos problemas, pero no de otros. Los usuarios deben saber que al optar por no recibir notificaciones específicas, no se les notificará sobre asuntos relacionados con el material que han editado o subido, que están etiquetados según la política. Es posible que se ejecuten acciones (como la eliminación) sin que se le notifique como resultado. Al aplicar esto a su propia página de discusión de usuario, acepta esta consecuencia. Aplicar esto a una página de discusión de usuario que no sea la suya se considerará vandalismo. Se alienta a todos los bots y scripts que dejan mensajes en la página de discusión de un usuario a agregar esta capacidad.
Al agregar esto a la página de discusión de un usuario, un usuario aún puede recibir estos mensajes por bots o scripts que no cumplen, o personas que agregan la etiqueta manualmente.
{{bots | optout = all}} Opte por no recibir todos los mensajes (consulte las limitaciones a continuación).
{{bots | optout = nosource}} Opte por no recibir mensajes de origen .{{bots | optout = nolicense}} Optar por no recibir mensajes de licencia .{{bots | optout = orfud}} Opte por no recibir mensajes de uso legítimo huérfanos .{{bots | optout = npd}} Optar por no recibir mensajes de permiso .{{bots | optout = norationale}} Opte por no recibir mensajes sin justificación .{{bots | optout = replaceable}} Opte por no recibir mensajes de uso legítimo reemplazables .{{bots | optout = bettersource}} Opte por no recibir mejores mensajes de solicitud de fuentes .{{bots | optout = afd}} Opte por no recibir artículos para mensajes de eliminación o formas variantes .{{bots | optout = ifd}} Opte por no recibir imágenes para mensajes de eliminación o variantes .{{bots | optout = prod}} Opte por no recibir la advertencia de prod .{{bots | optout = MassMessage}} Opta por no recibir mensajes masivos .
Los elementos se pueden combinar poniendo una coma entre las opciones
{{bots | optout = nosource, nolicense}} Opte por no recibir mensajes de licencia ni fuente.{{bots | optout = orfud, norationale, replaceable}} Opte por no recibir mensajes de uso legítimo .
Restricciones de los mensajes que se pueden excluir
No se permite la exclusión voluntaria de algunas notificaciones de mensajes. Éstas incluyen:
- Notificaciones de infracción de derechos de autor
- Avisos de advertencia de vandalismo (y otros).
- Usuario: avisos de SineBot por no firmar publicaciones
- Cualquier etiqueta de mensaje que no esté incluida como una forma de excluirse arriba. (¿Hay alguno que deba incluirse? Deje un mensaje en la página de discusión).
- Los mensajes masivos no se pueden excluir usando {{bots | optout = all}}; los usuarios deben excluirse explícitamente con {{bots | optout = MassMessage}}
Implementación
- Pywikibot admite bots y nobots desde r4096 . Las plantillas pueden ignorarse mediante un parámetro.
- Desde la versión 3.2.0.0, AutoWikiBrowser es totalmente compatible con {{bots}} y {{nobots}}. Además, se puede especificar el pseudo-nombre de usuario AWB para prohibir todos los bots basados en AWB de la página. Sin embargo, AWB tiene la opción de ignorar estas plantillas.
- La notificación de mensaje de exclusión voluntaria se introdujo aquí el 3 de abril de 2008. La implementación de un bot / script individual variará y es posible que el aviso de implementación anterior no incluya esta característica.
Implementaciones de ejemplo
PHP
function allowBots ( $ text , $ user ) { if ( preg_match ( '/ \ {\ {(nobots | bots \ | allow = none | bots \ | deny = all | bots \ | optout = all | bots \ | deny =. *? ' . preg_quote ( $ usuario , ' / ' ) . '. *?)}} / iS ' , $ texto )) return false ; if ( preg_match ( '/\{\{(bots\|allow=all|bots\|allow=.*?' . preg_quote ( $ usuario , '/' ) . '. *?)}} / iS' , $ text )) devuelve verdadero ; if ( preg_match ( '/\{\{(bots\|allow=.*?)}}/iS' , $ texto )) devuelve falso ; devuelve verdadero ; }
Perl
sub allow_bots { my ( $ texto , $ usuario , $ opt ) = @_ ; devuelve 0 si $ text = ~ / {{[nN] obots}} / ; devuelve 1 si $ texto = ~ / {{[bB] ots}} / ; if ( $ text = ~ /\{\{[bB]ots\s*\|\s*allow\s*=\s*(.*?)\s*}}/s ) { return 1 if $ 1 eq 'todos' ; devuelve 0 si $ 1 eq 'ninguno' ; mis @bots = dividir ( / \ s *, \ s * / , $ 1 ); return ( grep $ _ eq $ usuario , @bots ) ? 1 : 0 ; } if ( $ text = ~ /\{\{[bB]ots\s*\|\s*deny\s*=\s*(.*?)\s*}}/s ) { return 0 if $ 1 eq 'todo' ; devuelve 1 si $ 1 eq 'ninguno' ; mis @bots = dividir ( / \ s *, \ s * / , $ 1 ); return ( grep $ _ eq $ usuario , @bots ) ? 0 : 1 ; } if ( definido ( $ opt ) && $ text = ~ /\{\{[bB]ots\s*\|\s*optout\s*=\s*(.*?)\s*}}/s ) { devuelve 0 si $ 1 eq 'todo' ; my @opt = split ( / \ s *, \ s * / , $ 1 ); return ( grep $ _ eq $ opt , @opt ) ? 0 : 1 ; } return 1 ; }
VB.NET
Función pública compartida AllowBots ( texto ByVal como cadena , usuario ByVal como cadena ) Como retorno booleano, no regex . IsMatch ( text , "\ {\ {(nobots | bots \ | (allow = none | deny = (?! none). * (" & User . Normalize () & "| all) | optout = all)) \} \} " , RegexOptions . IgnoreCase ) Finalizar función
C#
public static bool AllowBots ( string text , string user ) { return ! Regex . IsMatch ( text , @ "\ {\ {(nobots | bots \ | (allow = none | deny = (?! none). * (" + Usuario . Normalizar () + @ ". * | Todos) | optout = todos )) \} \} " , RegexOptions . IgnoreCase ); }
Java
public static boolean allowBots ( String text , String usuario ) { return ! texto . coincidencias ( "(? si). * \\ {\\ {(nobots | bots \\ | (permitir = ninguno | negar = ([^ \\}] *?" + usuario + "[^ \\}] * ? | todos) | optout = todos)) \\} \\}. * " ); }
JavaScript
function allowBots ( texto , usuario ) { if ( ! new RegExp ( "\\ {\\ {\\ s * (nobots | bots [^}] *) \\ s * \\} \\}" , "i" ) .prueba ( texto )) devuelve verdadero ; return ( new RegExp ( "\\ {\\ {\\ s * bots \\ s * \\ | \\ s * deny \\ s * = \\ s * ([^}] *, \\ s *) * " + usuario . reemplazar ( /([\(\)\*\+\?\.\-\:\!\=\/\^\$])/g , " \\ $ 1 " ) + " \ \ s * (? = [, \\}]) [^}] * \\ s * \\} \\} " , " i " ). prueba ( texto )) ? falso : nueva expresión regular ( "\\ {\\ {\\ s * ((?! nobots) | bots (\\ s * \\ | \\ s * allow \\ s * = \\ s * ((?! ninguno) | ([^}] *, \\ s *) * " + usuario . reemplazar ( / ([\ (\) \ * \ + \? \. \ - \: \! \ = \ / \ ^ \ $]) / g , "\\ $ 1" ) + "\\ s * (? = [, \\}]) [^}] * | todos))? | bots \\ s * \\ | \\ s * denegar \\ s * = \\ s * (?! todos) [^}] * | bots \\ s * \\ | \\ s * optout = (?! all) [^}] *) \\ s * \\} \\} " , " i " ). prueba ( texto ); }
Pitón
Este código asume que la biblioteca mwparserfromhell se instaló e importó en el script actual.
def allow_bots ( texto , usuario ): usuario = usuario . inferior () . tira () texto = mwparserfromhell . parse ( texto ) para tl en texto . filter_templates (): si tl . nombre . coincide con ([ 'bots' , 'nobots' ]): break else : devuelve True para param en tl . params : bots = [ x . inferior () . strip () para x en param . valor . split ( "," )] si param . nombre == 'permitir' : si '' . join ( bots ) == 'none' : return False para bot en bots : if bot in ( user , 'all' ): return True elif param . nombre == 'negar' : si '' . join ( bots ) == 'none' : return True para bot en bots : if bot in ( user , 'all' ): return False if ( tl . name . matches ( 'nobots' ) and len ( tl . params ) = = 0 ): return False return True
Ver también
- Plantilla: Bots en Meta-Wiki