Zastosowane do różnych źródeł i wejść, filtrowanie tekstu zapobiega użytkownikom widzeniu nieodpowiedniego języka i osobowo identyfikowalnych informacji, takich jak numery telefonów.Roblox automatycznie filtruje zwykłe wyniki tekstowe, takie jak wiadomości, które przeszły przez czat tekstowy w doświadczeniu, ale jesteś odpowiedzialny za filtrowanie każdego wyświetlanego tekstu, nad którym nie masz żadnej kontroli wyraźnej .
Filtruj scenariusze
Tekst może być gromadzony i/lub wyświetlany użytkownikom w różnych scenariuszach, w tym:
Doświadczenie, które generuje słowa z losowych znaków i wyświetla je użytkownikom, ponieważ istnieje szansa, że stworzy nieodpowiednie słowa.
Doświadczenie, które łączy się z zewnętrznym serwerem internetowym, aby pobrać treści wyświetlane w doświadczeniu.Często nie będziesz miał kontroli nad zawartością zewnętrznej strony i strona trzecia może edytować informacje.
Doświadczenie, które przechowuje tekst, tak jak nazwy zwierząt użytkowników za pomocą magazynów danych, gdzie przechowywany tekst może zawierać nieodpowiednie słowa, które powinny zostać przefiltrowane podczas ich odzyskiwania.
Proces filtrowania
TextService:FilterStringAsync() filtry w tekście doświadczenia, biorąc ciąg tekstu i UserId użytkownika, który stworzył tekst jako wejście.Zwraca obiekt TextFilterResult, który ma dwa dodatkowe metody, które możesz wezwać w różnych scenariuszach:
- TextFilterResult:GetNonChatStringForBroadcastAsync() do filtrowania tekstu widocznego dla wszystkich użytkowników w doświadczeniu, takiego jak dialog, który pozwala użytkownikowi napisać wiadomość na tablicy, która jest widoczna dla wszystkich użytkowników na serwerze.
- TextFilterResult:GetNonChatStringForUserAsync() do wyświetlenia filtrowanego tekstu dla jednego konkretnego użytkownika, w oparciu o wiek i inne szczegóły.
W kontekście wejścia TextBox wpisu następujący przykład gromadzi wejście na wydarzenie FocusLost i przesyła je na serwer za pośrednictwem RemoteEvent.Na serwerze jest najpierw filtrowany przez FilterStringAsync() i następnie GetNonChatStringForBroadcastAsync() z zamiarem, że tekst zostanie wyświetlony dla wszystkich użytkowników na obiekcie serwerowym, takim jak SurfaceGui w świecie 3D.
Filtrowanie wpisu tekstowego - skrypt klienta
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local textBox = script.Parent
textBox.ClearTextOnFocus = false
textBox.PlaceholderText = "..."
textBox.TextXAlignment = Enum.TextXAlignment.Left
textBox.TextScaled = true
-- Wydarzenie zdalne, aby wysłać tekstowe wpisanie na serwer do filtrowania
local inputRemoteEvent = ReplicatedStorage:FindFirstChild("InputRemoteEvent")
-- Menadżer zdarzeń dla utraconego skupienia i wciśnięcia klawisza
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)
Filtrowanie wpisu tekstowego - skrypt serwera
local TextService = game:GetService("TextService")
local ReplicatedStorage = game:GetService("ReplicatedStorage")
-- Wydarzenie zdalne do otrzymywania wpisu tekstowego od klienta do filtrowania
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
-- Wystrzelony, gdy klient przesyła wejście z 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("FILTERED:", filteredText)
else
warn("Error filtering text!")
end
end
end
end
inputRemoteEvent.OnServerEvent:Connect(onInputReceived)