Áp dụng cho các nguồn và đầu vào khác nhau, lọc văn bản ngăn người dùng thấy ngôn ngữ không phù hợp và thông tin cá nhân có thể nhận diện được như số điện thoại. Roblox tự động lọc các đầu ra văn bản thông thường như tin nhắn đã qua trò chuyện văn bản trong trải nghiệm, nhưng bạn có trách nhiệm lọc bất kỳ văn bản nào được hiển thị mà bạn không có quyền kiểm soát rõ ràng.
Các kịch bản lọc
Văn bản có thể được thu thập và/hoặc hiển thị cho người dùng trong nhiều kịch bản khác nhau, bao gồm:
Một trải nghiệm thu thập đầu vào văn bản của người dùng thông qua các mục TextBox, một GUI tùy chỉnh với các nút như giao diện bàn phím/máy tính số, hoặc một mô hình bàn phím tương tác trong không gian 3D.
Một trải nghiệm tạo ra các từ từ các ký tự ngẫu nhiên và hiển thị chúng cho người dùng, vì có khả năng nó sẽ tạo ra các từ không phù hợp.
Một trải nghiệm kết nối đến máy chủ web bên ngoài để lấy nội dung được hiển thị trong trải nghiệm. thường bạn sẽ không kiểm soát được nội dung của trang web bên ngoài và một bên thứ ba có thể chỉnh sửa thông tin.
Một trải nghiệm lưu trữ văn bản như tên thú cưng của người dùng bằng các kho dữ liệu, nơi văn bản lưu trữ có thể bao gồm các từ không phù hợp cần được lọc khi truy xuất chúng.
Quá trình lọc
TextService:FilterStringAsync() lọc văn bản trong trải nghiệm bằng cách lấy một chuỗi văn bản và UserId của người dùng tạo ra văn bản đó làm đầu vào. Nó trả về một đối tượng TextFilterResult có hai phương thức bổ sung mà bạn có thể gọi trong các kịch bản khác nhau:
- TextFilterResult:GetNonChatStringForBroadcastAsync() để lọc văn bản hiển thị cho tất cả người dùng trong một trải nghiệm, chẳng hạn như cho một hộp thoại cho phép người dùng viết một tin nhắn trên một biển báo có thể nhìn thấy bởi tất cả người dùng trên máy chủ.
- TextFilterResult:GetNonChatStringForUserAsync() để hiển thị văn bản đã lọc cho một người dùng cụ thể, dựa trên độ tuổi và các chi tiết khác.
Trong ngữ cảnh của đầu vào TextBox, ví dụ sau thu thập đầu vào trong sự kiện FocusLost và gửi nó đến máy chủ thông qua một RemoteEvent. Trên máy chủ, nó được lọc trước thông qua FilterStringAsync() và sau đó GetNonChatStringForBroadcastAsync() với ý định rằng văn bản sẽ được hiển thị cho tất cả người dùng trên một đối tượng phía máy chủ như SurfaceGui trong thế giới 3D.
Lọc Đầu Vào Văn Bản - Script Khách
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local textBox = script.Parent
textBox.ClearTextOnFocus = false
textBox.PlaceholderText = "..."
textBox.TextXAlignment = Enum.TextXAlignment.Left
textBox.TextScaled = true
-- RemoteEvent để gửi đầu vào văn bản đến máy chủ để lọc
local inputRemoteEvent = ReplicatedStorage:FindFirstChild("InputRemoteEvent")
-- Xử lý sự kiện cho khi mất tập trung và nhấn Enter
local function onFocusLost(enterPressed, inputObject)
if enterPressed then
print("ĐÃ GỬI:", textBox.Text)
if inputRemoteEvent then
inputRemoteEvent:FireServer(textBox.Text)
end
end
end
textBox.FocusLost:Connect(onFocusLost)
Lọc Đầu Vào Văn Bản - Script Máy Chủ
local TextService = game:GetService("TextService")
local ReplicatedStorage = game:GetService("ReplicatedStorage")
-- RemoteEvent để nhận đầu vào văn bản từ khách hàng để lọc
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("Lỗi tạo TextFilterResult:", errorMessage)
end
end
-- Nhan sự kiện khi khách hàng gửi đầu vào từ TextBox
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("ĐÃ LỌC:", filteredText)
else
warn("Lỗi lọc văn bản!")
end
end
end
end
inputRemoteEvent.OnServerEvent:Connect(onInputReceived)