Moderacja wyrazow: slownik i wstrzymywanie wiadomosci do akceptacji
Deploy PROD / deploy (push) Successful in 33s

Wiadomosc czatu i pytanie uczestnika przechodza przez slownik przed
publikacja. Trafienie wstrzymuje je (status NEW, moderation_hit), widzi
je tylko panel prowadzenia z przyciskami Opublikuj / Odrzuc, a autor
dostaje informacje, ze wiadomosc czeka. Wiadomosci prowadzacych nie sa
filtrowane.

Normalizacja rozpoznaje ogonki, wielkie litery, cyfry zamiast liter,
powtorzenia i rozstrzelenia. Slownik startowy w V31: wulgaryzmy, obelgi,
tresci zwiazane z pedofilia. WordFilterTest czyta slownik z migracji
i sprawdza obie strony, takze slownictwo wodociagowe.

Ekran "Moderacja wyrazow" w menu: lista z wyszukiwaniem i kategoriami,
dodawanie, edycja, wylaczanie, usuwanie z potwierdzeniem, sprawdzanie
tekstu. Dostep ADMIN i MODERATOR.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
2026-09-28 09:48:39 +02:00
parent c53ad95104
commit dda54f00a1
22 changed files with 1457 additions and 16 deletions
+26
View File
@@ -1683,6 +1683,32 @@ Tabela `speak_requests` (V17), kolejka w panelu prowadzenia, temat WebSocket
czekajacy piec minut widzi, jak mowi ktos zgloszony przed chwila.
- Pilnuje tego `SpeakRequestTest`, w tym dziesiec rownoczesnych zgloszen.
### Moderacja wyrazow
Tabela `moderation_words` (V31), ekran `/moderacja-wyrazow`, endpointy
`/admin/moderation-words/**`, filtr `WordFilter`.
- **Trafienie WSTRZYMUJE, nigdy nie kasuje.** Wiadomosc czatu albo pytanie
uczestnika z trafieniem dostaje status NEW i `moderation_hit`, widzi je tylko
panel prowadzenia, a prowadzacy publikuje albo odrzuca. Lista slow nie rozumie
kontekstu, wiec falszywe trafienie ma kosztowac jedno klikniecie.
- **Filtr dziala na serwerze, przed publikacja** (`InteractionService.postChat`
i `postQuestion`). Wiadomosci prowadzacych nie sa filtrowane.
- **Wiadomosc i wpis przechodza przez TA SAMA normalizacje**: bez ogonkow i
wielkich liter, cyfry na litery, powtorzenia zwiniete, rozstrzelenia sklejone.
Wpis podaje sie w zwyklej pisowni. Nie dopisywac wariantow typu "kurw4".
- **Tryb CONTAINS tylko dla rdzeni, ktore nie wystepuja w zwyklych slowach.**
"dup" jako fragment trafialby w "duplikat", "ciot" w "ciotka": takie wpisy sa
WORD. `WordFilterTest` czyta slownik wprost z migracji i sprawdza obie strony,
takze slownictwo wodociagowe; sprawdzony w obie strony.
- **Slownik w pamieci, uniewazniany PO zatwierdzeniu zmiany.** Uniewaznienie
w trakcie transakcji pozwalaloby rownoleglej wiadomosci wczytac stara wersje
na stale.
- **Awaria filtru przepuszcza wiadomosc** i loguje blad: czat, ktory przestaje
dzialac przez filtr, jest gorszy niz chwila bez filtru.
- `fullChatHistory` zawiera NEW, bo tam leza wiadomosci wstrzymane. Publiczne
`chatHistory` nadal zwraca wylacznie APPROVED.
### Obecni na sali w panelu prowadzenia
Karta "Na sali" (`RoomParticipants`), endpointy `/admin/webinars/{id}/room/participants`.