Estamos importando un montón de publicaciones, y el contenido a menudo contiene texto como @global o similar (el tema de nuestra instancia de discourse está relacionado con la programación, y @ es un símbolo en ese idioma).
¿Hay alguna forma agradable y limpia de suprimir las menciones de usuarios? No me importa preprocesar las publicaciones antes de importarlas.
Como una solución alternativa un tanto sucia, descubrí que insertar una etiqueta bbcode vacía después del @ funciona (como @[b][/b]global). Simplemente no se siente como una muy buena solución y requeriría que analice/tokenice el markdown, ya que el bbcode no debe insertarse si la cadena está dentro de un bloque de código. Por lo tanto, no es una buena solución. Un espacio de ancho cero tampoco es una solución, ya que conducirá a errores extraños cuando los usuarios copien el fragmento de código en su propio código fuente.
Si está en un bloque de código, no es un problema. Si puedes asegurarte de que siempre esté en un bloque de código, estarás bien. Sin embargo, tienes que ejecutar un analizador real para saber cuándo estás en un bloque de código.
Oh, o desactiva la configuración Permitir a los usuarios mencionar a otros usuarios mientras importas los datos.
Claro, si el @nombre está en un bloque de código, no es un problema. El problema es detectar cuándo lo está y cuándo no, para poder evitar el ping fuera de los bloques de código insertando la etiqueta invisible [b][/b] entre @ y el nombre. De hecho, requeriría un analizador/tokenizador de markdown completo.
Hmm, ¿eso todavía se aplica incluso cuando la publicación se vuelve a hornear más tarde o eso provocaría pings aleatorios en ese caso?
Estoy bastante seguro de que cuando se vuelven a hornear, es con un cambio para evitar golpes y menciones, pero nunca he revisado el código ni lo he intentado.
No veo nada que impida los pings, los cambios se publican directamente en los clientes, hasta donde yo entiendo (pero no soy ningún experto en ruby ni en discourse, así que por favor corríjanme si me equivoco):