Las plantillas Bots y Nobots indican a los bots y otras herramientas y scripts de edición automatizada que deben o no 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 aceptar o rechazar los mensajes del bot de conversación de usuarios o para hacer que los bots de mantenimiento eviten ciertas páginas. Estas plantillas se deben usar con cuidado fuera del espacio de usuario para evitar bloquear ediciones útiles de bots.
La opción de participar explícitamente tiene la ventaja de recibir cambios útiles o publicaciones específicas que un bot podría omitir de otro modo si sigue el comportamiento de "exclusión voluntaria" predeterminado. Los usuarios deben tener en cuenta que, al optar por no participar en las publicaciones de los bots, no recibirán notificaciones sobre asuntos relacionados con el material que hayan editado o subido, que los bots etiquetan o escanean según la política.
En particular, en los espacios de enciclopedia:
La mayoría de los bots NO entenderán estas plantillas cuando se transcluyan indirectamente.
La mayoría de los bots no ignorarán la plantilla si está dentro de <nowiki>...</nowiki>
las etiquetas. Por ejemplo, si está discutiendo las plantillas con otro editor, utilice la plantilla {{ tl }}{{tl|nobots}}
, por ejemplo , que mostrará {{ nobots }} , en lugar de , que posiblemente se analizará como si tuviera la intención de excluir a los bots de la página.<nowiki>{{nobots}}</nowiki>
Una lista de inclusiones se encuentra en Usuario:AnomieBOT/Nobots Hall of Shame
{{nobots}} Prohibir todos los bots compatibles (acceso directo que no acepta parámetros) {{bots}} Permitir todos los bots (acceso directo que no acepta parámetros)
{{bots|allow=<botlist>}} Prohibir todos los bots compatibles que no estén en la lista {{bots|deny=<botlist>}} Prohibir todos los bots compatibles de la lista
Donde <botlist> es una cadena delimitada por comas de nombres de usuario de bots (AWB se puede usar para todos los bots basados en AWB ): {{bots|allow=SineBot,Legobot}} {{bots|deny=AWB}}
<botlist> 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 que cumplan con las normas {{bots|deny=none}} Permitir todos los bots
Los bots no están obligados a respetar la plantilla de nobots; dependerá de su funcionalidad, sus propietarios y sus condiciones de aprobación. Los bots que actualmente admiten la exclusión se enumeran en bots que cumplen con la exclusión .
Otra opción es optar por no recibir determinados tipos de mensajes para los usuarios que desean recibir notificaciones sobre determinados problemas, pero no sobre otros. Los usuarios deben tener en cuenta que, al optar por no recibir notificaciones específicas, no recibirán notificaciones sobre asuntos relacionados con el material que hayan editado o subido, que están etiquetados según la política. Se pueden ejecutar 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 recomienda que todos los bots y scripts que dejen mensajes en la página de discusión de un usuario agreguen esta capacidad.
Al agregar esto a la página de discusión de un usuario, es posible que el usuario aún reciba estos mensajes de bots o scripts no compatibles, o de humanos que agregan la etiqueta manualmente.
{{bots|optout=all}} Opte por no recibir todos los mensajes (ver las limitaciones a continuación).
{{bots|optout=nosource}} Inhabilitar mensajes sin fuente . {{bots|optout=nolicense}} Inhabilitar mensajes sin licencia . {{bots|optout=orfud}} Inhabilitar mensajes huérfanos de uso legítimo . {{bots|optout=npd}} Inhabilitar mensajes sin permiso . {{bots|optout=norationale}} Inhabilitar mensajes sin justificación . {{bots|optout=replaceable}} Inhabilitar mensajes de uso legítimo reemplazables . {{bots|optout=bettersource}} Inhabilitar mensajes de solicitud de mejor fuente . {{bots|optout=afd}} Inhabilitar mensajes de eliminación de artículos o formas variantes . {{bots|optout=ifd}} Inhabilitar mensajes de eliminación de imágenes o formas variantes . {{bots|optout=prod}} Inhabilitar advertencia de producción . {{bots|optout=MassMessage}} Optar por no recibir mensajes masivos .
Los elementos se pueden combinar colocando una coma entre las opciones.
{{bots|optout=nosource,nolicense}} Opte por no recibir mensajes sin fuente ni licencia. {{bots|optout=orfud,norationale,replaceable}} Opte por no recibir mensajes de uso legítimo.
No se puede optar por no recibir algunas notificaciones de mensajes, como las siguientes:
Estas sintaxis parecen correctas, pero dependiendo del bot individual pueden no tener el efecto deseado.
función allowBots ( $texto , $usuario ) { si ( preg_match ( '/\{\{(nobots|bots\|allow=none|bots\|deny=all|bots\|optout=all|bots\|deny=.*?' . preg_quote ( $usuario , '/' ) . '.*?)}}/iS' , $texto )) devuelve falso ; si ( preg_match ( '/\{\{(bots\|allow=all|bots\|allow=.*?' . preg_quote ( $usuario , '/' ) . '.*?)}}/iS' , $texto )) devuelve verdadero ; si ( preg_match ( '/\{\{(bots\|allow=.*?)}}/iS' , $texto )) devuelve falso ; devuelve verdadero ; }
sub allow_bots { my ( $texto , $usuario , $opt ) = @_ ; devuelve 0 si $texto =~ /{{[nN]obots}}/ ; devuelve 1 si $texto =~ /{{[bB]ots}}/ ; si ( $texto =~ /\{\{[bB]ots\s*\|\s*allow\s*=\s*(.*?)\s*}}/s ){ devuelve 1 si $1 eq 'todos' ; devuelve 0 si $1 eq 'ninguno' ; my @bots = split ( /\s*,\s*/ , $1 ); devuelve ( grep $_ eq $usuario , @bots ) ? 1 : 0 ; } si ( $texto =~ /\{\{[bB]ots\s*\|\s*denegar\s*=\s*(.*?)\s*}}/s ){ devolver 0 si $1 eq 'todos' ; devolver 1 si $1 eq 'ninguno' ; mi @bots = dividir ( /\s*,\s*/ , $1 ); devolver ( grep $_ eq $usuario , @bots ) ? 0 : 1 ; } si ( definido ( $opt ) y $texto =~ /\{\{[bB]ots\s*\|\s*optout\s*=\s*(.*?)\s*}}/s ){ devolver 0 si $1 eq 'todos' ; mi @opt = dividir ( /\s*,\s*/ , $1 ); devolver ( grep $_ eq $opt , @opt ) ? 0 : 1 ; } devolver 1 ; }
Función pública compartida AllowBots ( ByVal text As String , ByVal user As String ) Como booleano Devuelve No Regex . IsMatch ( text , "\{\{(nobots|bots\|(allow=none|deny=(?!none).*(" & user . Normalize () & "|all)|optout=all))\}\}" , RegexOptions . IgnoreCase ) Fin de la función
público estático bool AllowBots ( cadena texto , cadena usuario ) { devolver ! Regex . IsMatch ( texto , @"\{\{(nobots|bots\|(allow=none|deny=(?!none).*(" + usuario . Normalize () + @".*|all)|optout=all))\}\}" , RegexOptions . IgnoreCase ); }
público estático booleano allowBots ( String texto , String usuario ) { devolver ! texto . matches ( "(?si).*\\{\\{(nobots|bots\\|(allow=none|deny=([^\\}]*?" + usuario + "[^\\}]*?|all)|optout=all))\\}\\}.*" ); }
función allowBots ( texto , usuario ){ si ( ! nueva expresión regular ( "\\{\\{\\s*(nobots|bots[^}]*)\\s*\\}\\}" , "i" ). prueba ( texto )) devolver verdadero ; devolver ( nueva expresión regular ( "\\{\\{\\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*((?!none)|([^}]*,\\s*)*" + usuario.reemplazar ( /([\(\)\*\+\?\.\-\:\!\=\/\^\$])/g , " \\ $ 1 " ) + " \\s*(?=[,\\}])[^}]*|todos))?|bots\\s*\\|\\s*deny\\s*=\\s*(?!todos)[^}]*|bots\\s*\\|\\s*optout=(?!todos)[^}]*)\\s*\\}\\}" , "i" .prueba ( texto ) ; }
Este código asume que la biblioteca mwparserfromhell se instaló e importó en el script actual.
def allow_bots ( texto , usuario ) : usuario = usuario.lower ( ) . strip ( ) texto = mwparserfromhell.parse ( texto ) para tl en texto.filter_templates ( ) : si tl.name.matches ( [ ' bots' , ' nobots ' ]): break de lo contrario : devuelve Verdadero para parámetro en tl.params : bots = [ x.lower ( ) . strip ( ) para x en parámetro.value.split ( " , " )] si parámetro.name == ' permitir' : si ' ' .join ( bots ) == ' ninguno ' : devuelve Falso para bot en bots : si bot en ( usuario , ' todos ' ) : devuelve Verdadero elif parámetro.name == ' denegar ' : si ' ' . join ( bots ) == 'none' : devuelve True para bot en bots : si bot en ( usuario , 'all' ): devuelve False si ( tl . name . matches ( 'nobots' ) y len ( tl . params ) == 0 ): devuelve False devuelve True