Отключить упоминания пользователей в импортированных постах

Мы импортируем множество постов, и их содержимое часто включает текст вроде @global или подобного (тема нашего экземпляра Discourse связана с программированием, а символ @ используется в этом языке).

Есть ли хороший и чистый способ отключить упоминание пользователей? Я не против предварительной обработки постов перед импортом.

В качестве своеобразного грязного обходного пути я обнаружил, что вставка пустого тега bbcode после @ работает (например, @[b][/b]global). Однако это не кажется хорошим решением, к тому же потребует от меня разбора/токенизации markdown, так как тег bbcode не должен вставляться, если строка находится внутри блока кода. Поэтому это не подходящее решение. Нулевая ширина пробела тоже не вариант, так как это приведёт к странным ошибкам, когда пользователи будут копировать фрагмент кода в свой собственный исходный код.

Если текст находится внутри блока кода, это не проблема. Если вы сможете убедиться, что он всегда будет в блоке кода, то всё будет в порядке. Однако вам понадобится настоящий парсер, чтобы определить, когда вы находитесь внутри блока кода.

Или, alternatively, отключите настройку «Разрешить пользователям упоминать других пользователей» во время импорта данных.

Да, если @имя находится внутри блока кода, то проблем нет. Проблема заключается в том, чтобы определить, находится ли оно там или нет, чтобы я мог предотвратить упоминание вне блоков кода, вставляя невидимый тег [b][/b] между @ и именем. Для этого действительно потребовался бы полноценный парсер/токенизатор Markdown.

Хм, применимо ли это даже в том случае, если пост позже будет переформатирован (rebaked), или это приведёт к случайным упоминаниям в таком случае?

Я почти уверен, что при перепечивании включается переключатель Wyeth, чтобы избежать всплываний и упоминаний, но я ни разу не проверял код и не пробовал это на практике.

Я не вижу ничего, что препятствовало бы пингам, насколько я понимаю, изменения напрямую публикуются для клиентов (хотя я далеко не эксперт в Ruby или Discourse, так что, пожалуйста, поправьте меня, если я ошибаюсь):

Я думаю, что это

Я полагаю, что обход bump также предотвращает повторное срабатывание менторов, но в trigger post process указано:

`new_post: false,`

Так что, думаю, вы в безопасности.

О, отличное замечание, я упустил эту часть! Отлично, тогда я так и сделаю :sparkles:

Возможно, скрипты импорта уже устанавливают это. Я не думаю, что один импорт вызывает тысячи уведомлений.