功能
更清爽的聊天:髒話與連結過濾
大廳和遊戲內聊天現在都會依據一份 40,000 詞的名單遮蔽髒話,並在訊息被儲存之前就拒絕連結。

通俗版
無論用哪種語言,聊天都應當友好而安全。你傳送的每一條訊息——無論在大廳還是在遊戲內——現在都會在釋出前經過檢查。髒話會被遮蔽,連結也不被允許,讓聊天始終圍繞著遊戲。
這些檢查謹慎而不笨拙:它匹配的是完整的詞和短語,因此一個只是碰巧包含被遮蔽子串的無辜詞語仍能通過。貼紙是一組固定且安全的集合,因此從不受影響。
40,917
遮蔽詞條
~65
識別的連結域名
~0.3ms
每條訊息的檢查
2
覆蓋的聊天路徑
如果一條訊息被遮蔽,你會看到一條內嵌提示,它就是不會被發送——什麼都不會儲存,別人也看不到。
技術細節
一個新的 @opolyx/moderation 包(仿照 logger 包)按照遮蔽名單自身的使用說明,進行完整詞和短語的精確匹配:「pain in the ass」會被遮蔽,但「assassin」和「horde」能通過——沒有子串掃描,而且名單已經預先枚舉了諸如 h0rny 之類的變體寫法,因此無需模糊歸一化。它會轉為小寫、按空白切分、用原始形式和去掉邊緣標點的變體去對照一個 Set,然後檢查 2 到 11 個詞的短語 n-gram。
這 40,917 個詞條存放在一個生成的字串字面量模組中(約 420 KB),僅在伺服器端——客戶端分塊已驗證是乾淨的。兩條聊天寫入路徑都會在插入之前拒絕不良訊息,因為 Realtime 會原樣廣播已儲存的行,所以檢查必須先於寫入。
ts
// link filter: schemed URLs (https?|ftp|wss?://, hxxp), www., and bare
// label.tld against a curated ~65-TLD set — so Node.js / e.g. / "gg wp" pass,
// but discord.gg / t.me/x / mysite.com / emails are blocked. Light dot-de-obfuscation
// folds example[.]com and "site dot net" first.一個可接受的缺口(所有者決定):直接向資料庫插入會繞過這些動作級過濾——加固的候選方案是一張 banned-terms 表加上一個插入前觸發器。暱稱過濾和完全本地化的錯誤字串被推遲。
