Applicato a diverse fonti e input, filtraggio del testo impedisce agli utenti di vedere lingua inappropriata e informazioni personalmente identificabili come numeri di telefono.Roblox filtra automaticamente i comuni output di testo come messaggi che sono passati attraverso chat di testo in-experience, ma sei responsabile del filtraggio di qualsiasi testo visualizzato di cui non hai un controllo esplicito .
Filtra gli scenari
Il testo può essere raccolto e/o visualizzato agli utenti in una varietà di scenari, tra cui:
Un'esperienza che raccoglie l'input del testo degli utenti attraverso entrate, una GUI personalizzata con pulsanti come un'interfaccia di tastiera/tastiera, o un modello di tastiera interattiva nello Spazio3D.
Un'esperienza che genera parole da caratteri casuali e li mostra agli utenti, poiché c'è la possibilità che creerà parole inappropriate.
Un'esperienza che si connette a un server web esterno per recuperare contenuti che vengono visualizzati in-experience.Spesso non avrai il controllo sul contenuto del sito esterno e un terzo può modificare le informazioni.
Un'esperienza che memorizza testo come i nomi degli animali domestici degli utenti utilizzando depositi di dati, dove il testo memorizzato potrebbe includere parole inappropriate che dovrebbero essere filtrate quando vengono recuperati.
Processo di filtraggio
TextService:FilterStringAsync() filtri nel testo in-experience prendendo una stringa di testo e il UserId dell'utente che ha creato il testo come input.Restituisce un oggetto TextFilterResult che ha due metodi aggiuntivi che puoi chiamare in diversi scenari:
- TextFilterResult:GetNonChatStringForBroadcastAsync() per filtrare il testo visibile a tutti gli utenti in un'esperienza, come per un dialogo che consente a un utente di scrivere un messaggio su un segno che è visibile a tutti gli utenti sul server.
- TextFilterResult:GetNonChatStringForUserAsync() per visualizzare il testo filtrato per un utente specifico, in base all'età e ad altri dettagli.
Nel contesto dell'input TextBox , l'esempio seguente raccoglie l'input sull'evento FocusLost e lo invia al server attraverso un RemoteEvent .Sul Server, viene filtrato prima attraverso FilterStringAsync() e poi GetNonChatStringForBroadcastAsync() con l'intenzione che il testo verrà visualizzato a tutti gli utenti su un oggetto lato server come un SurfaceGui nel Mondo3D.
Filtro di input del testo - script del client
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local textBox = script.Parent
textBox.ClearTextOnFocus = false
textBox.PlaceholderText = "..."
textBox.TextXAlignment = Enum.TextXAlignment.Left
textBox.TextScaled = true
-- RemoteEvent per inviare l'input del testo al server per la filtrazione
local inputRemoteEvent = ReplicatedStorage:FindFirstChild("InputRemoteEvent")
-- Trattatore di eventi per focus perso e inserimento in pressione
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)
Input del testo di filtraggio - Script del server
local TextService = game:GetService("TextService")
local ReplicatedStorage = game:GetService("ReplicatedStorage")
-- RemoteEvent per ricevere l'input del testo dal client per la filtrazione
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
-- Spedito quando il client invia l'input dalla 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)