適用於各種來源和輸入, 文字過濾 防止使用者看到不適當的語言和個人身份標識信息,例如電話號碼。 Roblox 會自動過濾常見的文字輸出,例如通過體驗文字聊天發送的訊息,但 你負責過濾任何顯示的文字,你不能控制
過濾場景
文字可以被收集並/或顯示給用戶在各種情況下,包括:
一個會從隨機角色中生成文字,並且顯示給使用者的體驗,因為有機會會生成不當的文字。
連接到外部網站的體驗,以取得體驗中顯示的內容。通常您沒有控制外部網站的內容,而第三方可以編輯信息。
一個使用 資料儲存 儲存用戶寵物名稱的體驗,當用戶寵物名稱包含不當字詞,會在重新擷取時過濾。
過濾過程
TextService:FilterStringAsync() 在體驗中以文字串和 UserId 的用戶梳理過的文字體驗內容,並且返回一個 TextFilterResult 對象,其中有兩個額外的方法:
- TextFilterResult:GetNonChatStringForBroadcastAsync() 用於在體驗中對所有用戶可見的文字進行過濾,例如對於允許用戶在服務伺服器上的所有用戶上寫下訊息的對話框。
- TextFilterResult:GetNonChatStringForUserAsync() 以顯示特定用戶的過濾文字,基於年齡和其他細節。
在 TextBox 輸伺服器的上下文中,以下示例會在 FocusLost
過濾文字輸入 - 客戶端指令碼
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local textBox = script.Parent
textBox.ClearTextOnFocus = false
textBox.PlaceholderText = "..."
textBox.TextXAlignment = Enum.TextXAlignment.Left
textBox.TextScaled = true
-- 遠端事件發送文字輸入到服務器以進行過濾
local inputRemoteEvent = ReplicatedStorage:FindFirstChild("InputRemoteEvent")
-- 專注度損失和輸入被按下的事件處理器
local function onFocusLost(enterPressed, inputObject)
if enterPressed then
print("SUBMITTED:", textBox.Text)
if inputRemoteEvent then
inputRemoteEvent:FireServer(textBox.Text)
end
end
end
textBox.FocusLost:Connect(onFocusLost)
過濾文字輸入 - 伺服器指令碼
local TextService = game:GetService("TextService")
local ReplicatedStorage = game:GetService("ReplicatedStorage")
-- 遠端事件接收客戶端輸入的文字以進行篩選
local inputRemoteEvent = ReplicatedStorage:FindFirstChild("InputRemoteEvent")
local function getFilterResult(text, fromUserId)
local filterResult
local success, errorMessage = pcall(function()
filterResult = TextService:FilterStringAsync(text, fromUserId)
end)
if success then
return filterResult
else
warn("Error generating TextFilterResult:", errorMessage)
end
end
-- 發射時,客戶端從文字輸入框提交輸入
local function onInputReceived(player, text)
if text ~= "" then
local filterResult = getFilterResult(text, player.UserId)
if filterResult then
local success, filteredText = pcall(function()
return filterResult:GetNonChatStringForBroadcastAsync()
end)
if success then
print("FILTERED:", filteredText)
else
warn("Error filtering text!")
end
end
end
end
inputRemoteEvent.OnServerEvent:Connect(onInputReceived)