Я пытаюсь настроить самоконтроль в моем сообществе, поэтому добавил большинство нецензурных выражений и чувствительной информации (с помощью регулярных выражений) в список запрещённых слов.
Однако я заметил, что администраторы не получают уведомлений, когда посты подвергаются цензуре. В идеале нам нужно вести учёт количества раз, когда пользователь использовал нецензурное слово или фразу, чтобы при необходимости отключить ему возможность писать из-за слишком большого количества неуместных сообщений.
Ведёт ли Discourse учёт отцензуренных постов по пользователям? Как администраторы могут получать уведомления о таких постах?
advanced_filter(/^status:open$/) do |posts|
advanced_filter(/^status:closed$/) do |posts|
advanced_filter(/^status:archived$/) do |posts|
advanced_filter(/^status:noreplies$/) do |posts|
advanced_filter(/^status:single_user$/) do |posts|
advanced_filter(/^in:first|^f$/) do |posts|
advanced_filter(/^in:pinned$/) do |posts|
advanced_filter(/^in:unpinned$/) do |posts|
advanced_filter(/^in:(likes|bookmarks)$/) do |posts, match|
advanced_filter(/^in:posted$/) do |posts|
advanced_filter(/^in:seen$/) do |posts|
advanced_filter(/^in:unseen$/) do |posts|
advanced_filter(/^in:wiki$/) do |posts, match|
advanced_filter(/^posts_count:(\d+)$/) do |posts, match|
advanced_filter(/^min_post_count:(\d+)$/) do |posts, match|
advanced_filter(/^badge:(.)$/) do |posts, match|
advanced_filter(/^with:images$/) do |posts|
advanced_filter(/^#([\p{L}0-9-:=]+)$/) do |posts, match|
advanced_filter(/^group:(.+)$/) do |posts, match|
advanced_filter(/^user:(.+)$/) do |posts, match|
advanced_filter(/^@([a-zA-Z0-9_-.]+)$/) do |posts, match|
advanced_filter(/^before:(.</em>)$/) do |posts, match|
advanced_filter(/^after:(.*)$/) do |posts, match|
advanced_filter(/^tags?:([\p{L}0-9,-]+)$/) do |posts, match|
advanced_filter(/^-tags?:([\p{L}0-9,-</em>]+)$/) do |posts, match|
advanced_filter(/^filetypes?:([a-zA-Z0-9,-_]+)$/) do |posts, match|
Один из наших SQL-мастеров разрабатывает гораздо более сложный запрос, который находит точную позицию запрещённого слова. Он вроде бы работает, но он постоянно жалуется, что поля raw и cooked имеют разную длину… что заставляет нас по-новому оценить, насколько сложно хранить и особенно управлять результатами поиска по отслеживаемым словам.
Нет, я думаю, что это было слишком сложно — искать запрещённое слово в версии с Markdown по сравнению с живой версией, а проще было просто просмотреть глазами (пока что для нашей новой платформы). Если кто-то другой нашёл способ, дайте знать!