관리자가 검열된 게시물을 찾는 방법은 무엇이며, 사용자별 검열 단어 수가 집계되나요?

커뮤니티가 자율적으로 관리되도록 하려고 대부분의 욕설/민감한 정보(정규식 표현)를 검열 대상 단어로 등록해 두었습니다.

하지만 게시물이 검열될 때 관리자에게 알림이 가지 않는 것을 확인했습니다. 이상적으로는 사용자가 부적절한 단어나 표현을 사용한 횟수를 집계하여, 필요할 경우 부적절한 게시물이 너무 많으면 해당 사용자의 게시 권한을 정지할 수 있기를 바랍니다.

Discourse는 사용자별 검열된 게시물을 집계하나요? 아니면 관리자에게 검열된 게시물에 대해 알림을 받으려면 어떻게 해야 하나요?

@Nesha

또는 다른 각도에서 보면, 고급 검색 필터를 사용하여 검열되거나 플래그가 지정된 게시물을 나열할 수 있을까요?

네, 먼저 검색을 해보았습니다:

우리는 (대략적으로) 작동하는 것들의 목록을 자체적으로 정리했습니다:

주제 나열을 위한 더 유용한 팁

모든 아카이브된 주제 나열:
https://datalabcommonstrial.discourse.group/latest?status=archived

모든 닫힌 주제 나열:
https://datalabcommonstrial.discourse.group/latest?status=closed

모든 삭제된 주제 나열:
https://datalabcommonstrial.discourse.group/latest?status=deleted

모든 상단 고정된(bumped) 주제 나열:
https://datalabcommonstrial.discourse.group/latest?status=bumped

모든 지연된(deferred) 주제 나열:
https://datalabcommonstrial.discourse.group/latest?status=deferred

모든 목록에 없는(unlisted) 주제 나열:
https://datalabcommonstrial.discourse.group/latest?status=unlisted

모든 대상이 지정된(assigned) 주제 나열:
https://datalabcommonstrial.discourse.group/latest?status=assigned

모든 답변 없는 주제 나열:
https://datalabcommonstrial.discourse.group/latest?max_posts=1

? 표시되거나 표시되지 않음?

더 보기:

이것은 검색 상자에서 사용할 수 있습니다:
검색에서 in:pinned와 status:archived를 사용하여 이 작업을 수행할 수 있습니다.

더 많이:

태그가 없는 주제 검색/필터링 방법

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:(.
)$/) 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,-
+]+)$/) do |posts, match|
advanced_filter(/^filetypes?:([a-zA-Z0-9,-_]+)$/) do |posts, match|

참고로: 현재 우리의 요구사항을 충족하는 비교적 간단한 쿼리를 작성했습니다:

SELECT
id, user_id, topic_id, post_number, cooked, raw
FROM posts p
WHERE cooked ~* ‘.*■’

결과:

우리 중 SQL 고수의 한 명은 검열된 단어의 정확한 위치를 찾는 훨씬 정교한 쿼리를 작성하고 있습니다. 이 쿼리는 어느 정도 작동하지만, 그는 raw와 cooked의 길이가 같지 않다는 점을 계속 불평하고 있습니다… 이는 감시 단어(watched words)에 의해 발견된 결과를 저장하고, 특히 관리하는 것이 얼마나 어려운지를 다시금 깨닫게 해 줍니다.

결국 이 부분을 개선할 수 있었나요?

음, 마크다운 버전과 라이브 버전에서 검열된 단어를 찾는 게 너무 골치 아파서, 그냥 눈으로 빠르게 훑는 게 더 쉬웠던 것 같아요 (적어도 현재 우리 새 플랫폼에서는요). 혹시 다른 방법으로 해결하신 분 있으시면 알려주세요!